{
  "contractName": "ContractRegistryClient",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_prevOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "OwnerUpdate",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "newOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "onlyOwnerCanUpdateRegistry",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "prevRegistry",
      "outputs": [
        {
          "internalType": "contract IContractRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IContractRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "restoreRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_onlyOwnerCanUpdateRegistry",
          "type": "bool"
        }
      ],
      "name": "restrictRegistryUpdate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_prevOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onlyOwnerCanUpdateRegistry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prevRegistry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"restoreRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_onlyOwnerCanUpdateRegistry\",\"type\":\"bool\"}],\"name\":\"restrictRegistryUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for ContractRegistry clients\",\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"used by a new owner to accept an ownership transfer\"},\"constructor\":{\"details\":\"initializes a new ContractRegistryClient instance\",\"params\":{\"_registry\":\"address of a contract-registry contract\"}},\"restoreRegistry()\":{\"details\":\"restores the previous contract-registry\"},\"restrictRegistryUpdate(bool)\":{\"details\":\"restricts the permission to update the contract-registry\",\"params\":{\"_onlyOwnerCanUpdateRegistry\":\"indicates whether or not permission is restricted to owner only\"}},\"transferOwnership(address)\":{\"details\":\"allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner\",\"params\":{\"_newOwner\":\"new contract owner\"}},\"updateRegistry()\":{\"details\":\"updates to the new contract-registry\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol\":\"ContractRegistryClient\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol\":{\"keccak256\":\"0x74caf88eff1cb113ad8277df9ba7933a6f1e0deea8fd1855157def3be833b859\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://c7793c9f245736cd8413bc8c4b5c40b67949cbee32289a16d29c83cf59396ad6\",\"dweb:/ipfs/QmWony7b1buUrGnE32gjLAnSwkBYMrJ68vUcCwDMmp3MbJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol\":{\"keccak256\":\"0x6ef69d9dcc80a8a36d5eb37783375cd5e4831c6d20c723fa6f6b6a06c0aeb53d\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://5a5d087e2c5b47739615ef22e1f29749de44b43c9a37cfae32b3dfc498a258c4\",\"dweb:/ipfs/Qmd1mXKEQbmBxqHk326LGVzNoayXsam8gZNecknnYpBnyh\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol\":{\"keccak256\":\"0x073efa69fcd6b5e60f841b28b366d63b62ff48ab12a06ce3f5a7f41afd6ce885\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://e8b8ecb2d29197ca77f0ed98f728ace54e6edcfdf5cd1194ae22701607eaf608\",\"dweb:/ipfs/QmcsR6Q35Hurh3TrPkYAboicz9bQQoGCWmZLzUCDyhotH8\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol\":{\"keccak256\":\"0x3551889a83738b621c29ed66f1ecb6a843cca4217e54c9357198559b9cc92259\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://231a59c8f2665adeda8c7e6930832409c9b991fd27ad84b3a24335e7bf269bbe\",\"dweb:/ipfs/QmeJJbn1EAUbZenruTEdJAnwUn3dxsVNeJvxPe81qKEGqL\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IOwned.sol\":{\"keccak256\":\"0xc60a9d197abc28c1906ed4d18b59caa0242db754a0e1f67af6e6277593530dae\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://a8c6f3e6525a81a5165ccbf04f73f6c389c14b74135d11a7b5f70b1c9bdac75c\",\"dweb:/ipfs/QmaPu4Z7yUPc9sMADmoTZVY6AnyDSYHtNNCx3mm4VkJwhP\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: SEE LICENSE IN LICENSE\r\npragma solidity 0.6.12;\r\nimport \"./Owned.sol\";\r\nimport \"./Utils.sol\";\r\nimport \"./interfaces/IContractRegistry.sol\";\r\n\r\n/**\r\n  * @dev Base contract for ContractRegistry clients\r\n*/\r\ncontract ContractRegistryClient is Owned, Utils {\r\n    bytes32 internal constant CONTRACT_REGISTRY = \"ContractRegistry\";\r\n    bytes32 internal constant BANCOR_NETWORK = \"BancorNetwork\";\r\n    bytes32 internal constant BANCOR_FORMULA = \"BancorFormula\";\r\n    bytes32 internal constant CONVERTER_FACTORY = \"ConverterFactory\";\r\n    bytes32 internal constant CONVERSION_PATH_FINDER = \"ConversionPathFinder\";\r\n    bytes32 internal constant CONVERTER_UPGRADER = \"BancorConverterUpgrader\";\r\n    bytes32 internal constant CONVERTER_REGISTRY = \"BancorConverterRegistry\";\r\n    bytes32 internal constant CONVERTER_REGISTRY_DATA = \"BancorConverterRegistryData\";\r\n    bytes32 internal constant BNT_TOKEN = \"BNTToken\";\r\n    bytes32 internal constant BANCOR_X = \"BancorX\";\r\n    bytes32 internal constant BANCOR_X_UPGRADER = \"BancorXUpgrader\";\r\n    bytes32 internal constant CHAINLINK_ORACLE_WHITELIST = \"ChainlinkOracleWhitelist\";\r\n\r\n    IContractRegistry public registry;      // address of the current contract-registry\r\n    IContractRegistry public prevRegistry;  // address of the previous contract-registry\r\n    bool public onlyOwnerCanUpdateRegistry; // only an owner can update the contract-registry\r\n\r\n    /**\r\n      * @dev verifies that the caller is mapped to the given contract name\r\n      *\r\n      * @param _contractName    contract name\r\n    */\r\n    modifier only(bytes32 _contractName) {\r\n        _only(_contractName);\r\n        _;\r\n    }\r\n\r\n    // error message binary size optimization\r\n    function _only(bytes32 _contractName) internal view {\r\n        require(msg.sender == addressOf(_contractName), \"ERR_ACCESS_DENIED\");\r\n    }\r\n\r\n    /**\r\n      * @dev initializes a new ContractRegistryClient instance\r\n      *\r\n      * @param  _registry   address of a contract-registry contract\r\n    */\r\n    constructor(IContractRegistry _registry) internal validAddress(address(_registry)) {\r\n        registry = IContractRegistry(_registry);\r\n        prevRegistry = IContractRegistry(_registry);\r\n    }\r\n\r\n    /**\r\n      * @dev updates to the new contract-registry\r\n     */\r\n    function updateRegistry() public {\r\n        // verify that this function is permitted\r\n        require(msg.sender == owner || !onlyOwnerCanUpdateRegistry, \"ERR_ACCESS_DENIED\");\r\n\r\n        // get the new contract-registry\r\n        IContractRegistry newRegistry = IContractRegistry(addressOf(CONTRACT_REGISTRY));\r\n\r\n        // verify that the new contract-registry is different and not zero\r\n        require(newRegistry != registry && address(newRegistry) != address(0), \"ERR_INVALID_REGISTRY\");\r\n\r\n        // verify that the new contract-registry is pointing to a non-zero contract-registry\r\n        require(newRegistry.addressOf(CONTRACT_REGISTRY) != address(0), \"ERR_INVALID_REGISTRY\");\r\n\r\n        // save a backup of the current contract-registry before replacing it\r\n        prevRegistry = registry;\r\n\r\n        // replace the current contract-registry with the new contract-registry\r\n        registry = newRegistry;\r\n    }\r\n\r\n    /**\r\n      * @dev restores the previous contract-registry\r\n    */\r\n    function restoreRegistry() public ownerOnly {\r\n        // restore the previous contract-registry\r\n        registry = prevRegistry;\r\n    }\r\n\r\n    /**\r\n      * @dev restricts the permission to update the contract-registry\r\n      *\r\n      * @param _onlyOwnerCanUpdateRegistry  indicates whether or not permission is restricted to owner only\r\n    */\r\n    function restrictRegistryUpdate(bool _onlyOwnerCanUpdateRegistry) public ownerOnly {\r\n        // change the permission to update the contract-registry\r\n        onlyOwnerCanUpdateRegistry = _onlyOwnerCanUpdateRegistry;\r\n    }\r\n\r\n    /**\r\n      * @dev returns the address associated with the given contract name\r\n      *\r\n      * @param _contractName    contract name\r\n      *\r\n      * @return contract address\r\n    */\r\n    function addressOf(bytes32 _contractName) internal view returns (address) {\r\n        return registry.addressOf(_contractName);\r\n    }\r\n}\r\n",
  "sourcePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol",
  "ast": {
    "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol",
    "exportedSymbols": {
      "ContractRegistryClient": [
        21719
      ]
    },
    "id": 21720,
    "license": "SEE LICENSE IN LICENSE",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21516,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "52:23:56"
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol",
        "file": "./Owned.sol",
        "id": 21517,
        "nodeType": "ImportDirective",
        "scope": 21720,
        "sourceUnit": 21819,
        "src": "77:21:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol",
        "file": "./Utils.sol",
        "id": 21518,
        "nodeType": "ImportDirective",
        "scope": 21720,
        "sourceUnit": 22662,
        "src": "100:21:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol",
        "file": "./interfaces/IContractRegistry.sol",
        "id": 21519,
        "nodeType": "ImportDirective",
        "scope": 21720,
        "sourceUnit": 22832,
        "src": "123:44:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21521,
              "name": "Owned",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21818,
              "src": "268:5:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Owned_$21818",
                "typeString": "contract Owned"
              }
            },
            "id": 21522,
            "nodeType": "InheritanceSpecifier",
            "src": "268:5:56"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21523,
              "name": "Utils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22661,
              "src": "275:5:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Utils_$22661",
                "typeString": "contract Utils"
              }
            },
            "id": 21524,
            "nodeType": "InheritanceSpecifier",
            "src": "275:5:56"
          }
        ],
        "contractDependencies": [
          21818,
          22661,
          22847
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 21520,
          "nodeType": "StructuredDocumentation",
          "src": "171:60:56",
          "text": " @dev Base contract for ContractRegistry clients"
        },
        "fullyImplemented": true,
        "id": 21719,
        "linearizedBaseContracts": [
          21719,
          22661,
          21818,
          22847
        ],
        "name": "ContractRegistryClient",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 21527,
            "mutability": "constant",
            "name": "CONTRACT_REGISTRY",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "288:64:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21525,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "288:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "436f6e74726163745265676973747279",
              "id": 21526,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "334:18:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_014cc675742635098f3843c56f86f2875ab1c0e8ccd166d07159a5036b798b15",
                "typeString": "literal_string \"ContractRegistry\""
              },
              "value": "ContractRegistry"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21530,
            "mutability": "constant",
            "name": "BANCOR_NETWORK",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "359:58:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21528,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "359:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f724e6574776f726b",
              "id": 21529,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "402:15:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e13073a1961b7477f917c9e8fc77a7d64eb68a6e4f8820f41bc0991c65d90aea",
                "typeString": "literal_string \"BancorNetwork\""
              },
              "value": "BancorNetwork"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21533,
            "mutability": "constant",
            "name": "BANCOR_FORMULA",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "424:58:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21531,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "424:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72466f726d756c61",
              "id": 21532,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "467:15:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f9aac19de3c8e04eb4d0548047a1cd61c5aaafde7cf99ed9c7ed906ce4dddf38",
                "typeString": "literal_string \"BancorFormula\""
              },
              "value": "BancorFormula"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21536,
            "mutability": "constant",
            "name": "CONVERTER_FACTORY",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "489:64:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21534,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "489:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "436f6e766572746572466163746f7279",
              "id": 21535,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "535:18:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_01f892de917bf09cf6fd04f57ff78c6ca006205a8809769abbeb39a039d3d768",
                "typeString": "literal_string \"ConverterFactory\""
              },
              "value": "ConverterFactory"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21539,
            "mutability": "constant",
            "name": "CONVERSION_PATH_FINDER",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "560:73:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21537,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "560:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "436f6e76657273696f6e5061746846696e646572",
              "id": 21538,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "611:22:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d55bb14cf5551b26acee2cc099a4125a85ce113cb3306082cd15a1b4785376f1",
                "typeString": "literal_string \"ConversionPathFinder\""
              },
              "value": "ConversionPathFinder"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21542,
            "mutability": "constant",
            "name": "CONVERTER_UPGRADER",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "640:72:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21540,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "640:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72436f6e7665727465725570677261646572",
              "id": 21541,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "687:25:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e8cccdfec0e08322695b48c2ff60a2acb1243c72e02ec3a238fe40eefe726c01",
                "typeString": "literal_string \"BancorConverterUpgrader\""
              },
              "value": "BancorConverterUpgrader"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21545,
            "mutability": "constant",
            "name": "CONVERTER_REGISTRY",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "719:72:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21543,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "719:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72436f6e7665727465725265676973747279",
              "id": 21544,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "766:25:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_be29ba855de63e3aeb1afb9aed4122f6a4ac386581ea1b32773e72966a3749e7",
                "typeString": "literal_string \"BancorConverterRegistry\""
              },
              "value": "BancorConverterRegistry"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21548,
            "mutability": "constant",
            "name": "CONVERTER_REGISTRY_DATA",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "798:81:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21546,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "798:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72436f6e766572746572526567697374727944617461",
              "id": 21547,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "850:29:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f47ef61fa81526eefb8475acf271ff419a87423535a77af3ef98ebc7b31c640c",
                "typeString": "literal_string \"BancorConverterRegistryData\""
              },
              "value": "BancorConverterRegistryData"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21551,
            "mutability": "constant",
            "name": "BNT_TOKEN",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "886:48:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21549,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "886:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "424e54546f6b656e",
              "id": 21550,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "924:10:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4686149f7058d2454e334cfa4ea1a3482469c64fd3d4f50dfc69716086aee66f",
                "typeString": "literal_string \"BNTToken\""
              },
              "value": "BNTToken"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21554,
            "mutability": "constant",
            "name": "BANCOR_X",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "941:46:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21552,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "941:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f7258",
              "id": 21553,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "978:9:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_86ea4d05259b04f0f72cb84c9671b182b8bbe45a219bbea86edd67f80c414eb4",
                "typeString": "literal_string \"BancorX\""
              },
              "value": "BancorX"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21557,
            "mutability": "constant",
            "name": "BANCOR_X_UPGRADER",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "994:63:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21555,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "994:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72585570677261646572",
              "id": 21556,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1040:17:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d5e7e6eba8567517cf1f8f313379e5a6dbd5dcff956b158cf65a32e6b2bb5fd8",
                "typeString": "literal_string \"BancorXUpgrader\""
              },
              "value": "BancorXUpgrader"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21560,
            "mutability": "constant",
            "name": "CHAINLINK_ORACLE_WHITELIST",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "1064:81:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21558,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1064:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "436861696e6c696e6b4f7261636c6557686974656c697374",
              "id": 21559,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1119:26:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f1d302dc7d7d6451424d658039558f1ea7e3cbf7255a10240557f430d300feb3",
                "typeString": "literal_string \"ChainlinkOracleWhitelist\""
              },
              "value": "ChainlinkOracleWhitelist"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "7b103999",
            "id": 21562,
            "mutability": "mutable",
            "name": "registry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "1154:33:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IContractRegistry_$22831",
              "typeString": "contract IContractRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 21561,
              "name": "IContractRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22831,
              "src": "1154:17:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                "typeString": "contract IContractRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "61cd756e",
            "id": 21564,
            "mutability": "mutable",
            "name": "prevRegistry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "1243:37:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IContractRegistry_$22831",
              "typeString": "contract IContractRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 21563,
              "name": "IContractRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22831,
              "src": "1243:17:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                "typeString": "contract IContractRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "2fe8a6ad",
            "id": 21566,
            "mutability": "mutable",
            "name": "onlyOwnerCanUpdateRegistry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "1333:38:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 21565,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1333:4:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21576,
              "nodeType": "Block",
              "src": "1616:51:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21572,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21569,
                        "src": "1633:13:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 21571,
                      "name": "_only",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21593,
                      "src": "1627:5:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32) view"
                      }
                    },
                    "id": 21573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1627:20:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21574,
                  "nodeType": "ExpressionStatement",
                  "src": "1627:20:56"
                },
                {
                  "id": 21575,
                  "nodeType": "PlaceholderStatement",
                  "src": "1658:1:56"
                }
              ]
            },
            "documentation": {
              "id": 21567,
              "nodeType": "StructuredDocumentation",
              "src": "1430:143:56",
              "text": " @dev verifies that the caller is mapped to the given contract name\n @param _contractName    contract name"
            },
            "id": 21577,
            "name": "only",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 21570,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21569,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21577,
                  "src": "1593:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21568,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1593:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1592:23:56"
            },
            "src": "1579:88:56",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21592,
              "nodeType": "Block",
              "src": "1774:87:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21588,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21583,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1793:3:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 21584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1793:10:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21586,
                              "name": "_contractName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21579,
                              "src": "1817:13:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 21585,
                            "name": "addressOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21718,
                            "src": "1807:9:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 21587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1807:24:56",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1793:38:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4143434553535f44454e494544",
                        "id": 21589,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1833:19:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        },
                        "value": "ERR_ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        }
                      ],
                      "id": 21582,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1785:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1785:68:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21591,
                  "nodeType": "ExpressionStatement",
                  "src": "1785:68:56"
                }
              ]
            },
            "documentation": null,
            "id": 21593,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_only",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21580,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21579,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21593,
                  "src": "1737:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21578,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1737:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1736:23:56"
            },
            "returnParameters": {
              "id": 21581,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1774:0:56"
            },
            "scope": 21719,
            "src": "1722:139:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21617,
              "nodeType": "Block",
              "src": "2111:112:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21605,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21562,
                      "src": "2122:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21607,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21596,
                          "src": "2151:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          }
                        ],
                        "id": 21606,
                        "name": "IContractRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22831,
                        "src": "2133:17:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IContractRegistry_$22831_$",
                          "typeString": "type(contract IContractRegistry)"
                        }
                      },
                      "id": 21608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2133:28:56",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "2122:39:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21610,
                  "nodeType": "ExpressionStatement",
                  "src": "2122:39:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21611,
                      "name": "prevRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21564,
                      "src": "2172:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21613,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21596,
                          "src": "2205:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          }
                        ],
                        "id": 21612,
                        "name": "IContractRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22831,
                        "src": "2187:17:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IContractRegistry_$22831_$",
                          "typeString": "type(contract IContractRegistry)"
                        }
                      },
                      "id": 21614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2187:28:56",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "2172:43:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21616,
                  "nodeType": "ExpressionStatement",
                  "src": "2172:43:56"
                }
              ]
            },
            "documentation": {
              "id": 21594,
              "nodeType": "StructuredDocumentation",
              "src": "1869:153:56",
              "text": " @dev initializes a new ContractRegistryClient instance\n @param  _registry   address of a contract-registry contract"
            },
            "id": 21618,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21601,
                        "name": "_registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21596,
                        "src": "2099:9:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                          "typeString": "contract IContractRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                          "typeString": "contract IContractRegistry"
                        }
                      ],
                      "id": 21600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2091:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 21599,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2091:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 21602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2091:18:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 21603,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21598,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22618,
                  "src": "2078:12:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2078:32:56"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21596,
                  "mutability": "mutable",
                  "name": "_registry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21618,
                  "src": "2040:27:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                    "typeString": "contract IContractRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21595,
                    "name": "IContractRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22831,
                    "src": "2040:17:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2039:29:56"
            },
            "returnParameters": {
              "id": 21604,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2111:0:56"
            },
            "scope": 21719,
            "src": "2028:195:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21679,
              "nodeType": "Block",
              "src": "2333:892:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 21629,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21623,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "2403:3:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 21624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2403:10:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 21625,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21728,
                            "src": "2417:5:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2403:19:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 21628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "2426:27:56",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 21627,
                            "name": "onlyOwnerCanUpdateRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21566,
                            "src": "2427:26:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2403:50:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4143434553535f44454e494544",
                        "id": 21630,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2455:19:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        },
                        "value": "ERR_ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        }
                      ],
                      "id": 21622,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2395:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2395:80:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21632,
                  "nodeType": "ExpressionStatement",
                  "src": "2395:80:56"
                },
                {
                  "assignments": [
                    21634
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21634,
                      "mutability": "mutable",
                      "name": "newRegistry",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21679,
                      "src": "2530:29:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 21633,
                        "name": "IContractRegistry",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22831,
                        "src": "2530:17:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                          "typeString": "contract IContractRegistry"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21640,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21637,
                            "name": "CONTRACT_REGISTRY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21527,
                            "src": "2590:17:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 21636,
                          "name": "addressOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21718,
                          "src": "2580:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 21638,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2580:28:56",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21635,
                      "name": "IContractRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22831,
                      "src": "2562:17:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IContractRegistry_$22831_$",
                        "typeString": "type(contract IContractRegistry)"
                      }
                    },
                    "id": 21639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2562:47:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2530:79:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 21654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          },
                          "id": 21644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21642,
                            "name": "newRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21634,
                            "src": "2706:11:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                              "typeString": "contract IContractRegistry"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 21643,
                            "name": "registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21562,
                            "src": "2721:8:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                              "typeString": "contract IContractRegistry"
                            }
                          },
                          "src": "2706:23:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 21647,
                                "name": "newRegistry",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21634,
                                "src": "2741:11:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                                  "typeString": "contract IContractRegistry"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                                  "typeString": "contract IContractRegistry"
                                }
                              ],
                              "id": 21646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2733:7:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 21645,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2733:7:56",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 21648,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2733:20:56",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 21651,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2765:1:56",
                                "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": 21650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2757:7:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 21649,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2757:7:56",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 21652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2757:10:56",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "2733:34:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2706:61:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f5245474953545259",
                        "id": 21655,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2769:22:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_75b9212739e68843904752f41fb54f1609594bc4b84683da2a4384aeff5c191d",
                          "typeString": "literal_string \"ERR_INVALID_REGISTRY\""
                        },
                        "value": "ERR_INVALID_REGISTRY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_75b9212739e68843904752f41fb54f1609594bc4b84683da2a4384aeff5c191d",
                          "typeString": "literal_string \"ERR_INVALID_REGISTRY\""
                        }
                      ],
                      "id": 21641,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2698:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2698:94:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21657,
                  "nodeType": "ExpressionStatement",
                  "src": "2698:94:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21661,
                              "name": "CONTRACT_REGISTRY",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21527,
                              "src": "2929:17:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21659,
                              "name": "newRegistry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21634,
                              "src": "2907:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                                "typeString": "contract IContractRegistry"
                              }
                            },
                            "id": 21660,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "addressOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22830,
                            "src": "2907:21:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view external returns (address)"
                            }
                          },
                          "id": 21662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2907:40:56",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 21665,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2959:1:56",
                              "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": 21664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2951:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 21663,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2951:7:56",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 21666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2951:10:56",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2907:54:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f5245474953545259",
                        "id": 21668,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2963:22:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_75b9212739e68843904752f41fb54f1609594bc4b84683da2a4384aeff5c191d",
                          "typeString": "literal_string \"ERR_INVALID_REGISTRY\""
                        },
                        "value": "ERR_INVALID_REGISTRY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_75b9212739e68843904752f41fb54f1609594bc4b84683da2a4384aeff5c191d",
                          "typeString": "literal_string \"ERR_INVALID_REGISTRY\""
                        }
                      ],
                      "id": 21658,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2899:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2899:87:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21670,
                  "nodeType": "ExpressionStatement",
                  "src": "2899:87:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21671,
                      "name": "prevRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21564,
                      "src": "3078:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21672,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21562,
                      "src": "3093:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "3078:23:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21674,
                  "nodeType": "ExpressionStatement",
                  "src": "3078:23:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21675,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21562,
                      "src": "3195:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21676,
                      "name": "newRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21634,
                      "src": "3206:11:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "3195:22:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21678,
                  "nodeType": "ExpressionStatement",
                  "src": "3195:22:56"
                }
              ]
            },
            "documentation": {
              "id": 21619,
              "nodeType": "StructuredDocumentation",
              "src": "2231:63:56",
              "text": " @dev updates to the new contract-registry"
            },
            "functionSelector": "49d10b64",
            "id": 21680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateRegistry",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21620,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2323:2:56"
            },
            "returnParameters": {
              "id": 21621,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2333:0:56"
            },
            "scope": 21719,
            "src": "2300:925:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21690,
              "nodeType": "Block",
              "src": "3348:93:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21686,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21562,
                      "src": "3410:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21687,
                      "name": "prevRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21564,
                      "src": "3421:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "3410:23:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21689,
                  "nodeType": "ExpressionStatement",
                  "src": "3410:23:56"
                }
              ]
            },
            "documentation": {
              "id": 21681,
              "nodeType": "StructuredDocumentation",
              "src": "3233:65:56",
              "text": " @dev restores the previous contract-registry"
            },
            "functionSelector": "b4a176d3",
            "id": 21691,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 21684,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21683,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "3338:9:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3338:9:56"
              }
            ],
            "name": "restoreRegistry",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21682,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3328:2:56"
            },
            "returnParameters": {
              "id": 21685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3348:0:56"
            },
            "scope": 21719,
            "src": "3304:137:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21703,
              "nodeType": "Block",
              "src": "3738:141:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21699,
                      "name": "onlyOwnerCanUpdateRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21566,
                      "src": "3815:26:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21700,
                      "name": "_onlyOwnerCanUpdateRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21694,
                      "src": "3844:27:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3815:56:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21702,
                  "nodeType": "ExpressionStatement",
                  "src": "3815:56:56"
                }
              ]
            },
            "documentation": {
              "id": 21692,
              "nodeType": "StructuredDocumentation",
              "src": "3449:200:56",
              "text": " @dev restricts the permission to update the contract-registry\n @param _onlyOwnerCanUpdateRegistry  indicates whether or not permission is restricted to owner only"
            },
            "functionSelector": "024c7ec7",
            "id": 21704,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 21697,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21696,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "3728:9:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3728:9:56"
              }
            ],
            "name": "restrictRegistryUpdate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21694,
                  "mutability": "mutable",
                  "name": "_onlyOwnerCanUpdateRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21704,
                  "src": "3687:32:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21693,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3687:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3686:34:56"
            },
            "returnParameters": {
              "id": 21698,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3738:0:56"
            },
            "scope": 21719,
            "src": "3655:224:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21717,
              "nodeType": "Block",
              "src": "4151:59:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21714,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21707,
                        "src": "4188:13:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 21712,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21562,
                        "src": "4169:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                          "typeString": "contract IContractRegistry"
                        }
                      },
                      "id": 21713,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addressOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22830,
                      "src": "4169:18:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 21715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4169:33:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 21711,
                  "id": 21716,
                  "nodeType": "Return",
                  "src": "4162:40:56"
                }
              ]
            },
            "documentation": {
              "id": 21705,
              "nodeType": "StructuredDocumentation",
              "src": "3887:184:56",
              "text": " @dev returns the address associated with the given contract name\n @param _contractName    contract name\n @return contract address"
            },
            "id": 21718,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addressOf",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21707,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21718,
                  "src": "4096:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21706,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4096:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4095:23:56"
            },
            "returnParameters": {
              "id": 21711,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21710,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21718,
                  "src": "4142:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21709,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4142:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4141:9:56"
            },
            "scope": 21719,
            "src": "4077:133:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 21720,
        "src": "233:3980:56"
      }
    ],
    "src": "52:4163:56"
  },
  "legacyAST": {
    "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol",
    "exportedSymbols": {
      "ContractRegistryClient": [
        21719
      ]
    },
    "id": 21720,
    "license": "SEE LICENSE IN LICENSE",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21516,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "52:23:56"
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol",
        "file": "./Owned.sol",
        "id": 21517,
        "nodeType": "ImportDirective",
        "scope": 21720,
        "sourceUnit": 21819,
        "src": "77:21:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol",
        "file": "./Utils.sol",
        "id": 21518,
        "nodeType": "ImportDirective",
        "scope": 21720,
        "sourceUnit": 22662,
        "src": "100:21:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol",
        "file": "./interfaces/IContractRegistry.sol",
        "id": 21519,
        "nodeType": "ImportDirective",
        "scope": 21720,
        "sourceUnit": 22832,
        "src": "123:44:56",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21521,
              "name": "Owned",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 21818,
              "src": "268:5:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Owned_$21818",
                "typeString": "contract Owned"
              }
            },
            "id": 21522,
            "nodeType": "InheritanceSpecifier",
            "src": "268:5:56"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 21523,
              "name": "Utils",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22661,
              "src": "275:5:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Utils_$22661",
                "typeString": "contract Utils"
              }
            },
            "id": 21524,
            "nodeType": "InheritanceSpecifier",
            "src": "275:5:56"
          }
        ],
        "contractDependencies": [
          21818,
          22661,
          22847
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 21520,
          "nodeType": "StructuredDocumentation",
          "src": "171:60:56",
          "text": " @dev Base contract for ContractRegistry clients"
        },
        "fullyImplemented": true,
        "id": 21719,
        "linearizedBaseContracts": [
          21719,
          22661,
          21818,
          22847
        ],
        "name": "ContractRegistryClient",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 21527,
            "mutability": "constant",
            "name": "CONTRACT_REGISTRY",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "288:64:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21525,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "288:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "436f6e74726163745265676973747279",
              "id": 21526,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "334:18:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_014cc675742635098f3843c56f86f2875ab1c0e8ccd166d07159a5036b798b15",
                "typeString": "literal_string \"ContractRegistry\""
              },
              "value": "ContractRegistry"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21530,
            "mutability": "constant",
            "name": "BANCOR_NETWORK",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "359:58:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21528,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "359:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f724e6574776f726b",
              "id": 21529,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "402:15:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e13073a1961b7477f917c9e8fc77a7d64eb68a6e4f8820f41bc0991c65d90aea",
                "typeString": "literal_string \"BancorNetwork\""
              },
              "value": "BancorNetwork"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21533,
            "mutability": "constant",
            "name": "BANCOR_FORMULA",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "424:58:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21531,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "424:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72466f726d756c61",
              "id": 21532,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "467:15:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f9aac19de3c8e04eb4d0548047a1cd61c5aaafde7cf99ed9c7ed906ce4dddf38",
                "typeString": "literal_string \"BancorFormula\""
              },
              "value": "BancorFormula"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21536,
            "mutability": "constant",
            "name": "CONVERTER_FACTORY",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "489:64:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21534,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "489:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "436f6e766572746572466163746f7279",
              "id": 21535,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "535:18:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_01f892de917bf09cf6fd04f57ff78c6ca006205a8809769abbeb39a039d3d768",
                "typeString": "literal_string \"ConverterFactory\""
              },
              "value": "ConverterFactory"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21539,
            "mutability": "constant",
            "name": "CONVERSION_PATH_FINDER",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "560:73:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21537,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "560:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "436f6e76657273696f6e5061746846696e646572",
              "id": 21538,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "611:22:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d55bb14cf5551b26acee2cc099a4125a85ce113cb3306082cd15a1b4785376f1",
                "typeString": "literal_string \"ConversionPathFinder\""
              },
              "value": "ConversionPathFinder"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21542,
            "mutability": "constant",
            "name": "CONVERTER_UPGRADER",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "640:72:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21540,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "640:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72436f6e7665727465725570677261646572",
              "id": 21541,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "687:25:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e8cccdfec0e08322695b48c2ff60a2acb1243c72e02ec3a238fe40eefe726c01",
                "typeString": "literal_string \"BancorConverterUpgrader\""
              },
              "value": "BancorConverterUpgrader"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21545,
            "mutability": "constant",
            "name": "CONVERTER_REGISTRY",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "719:72:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21543,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "719:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72436f6e7665727465725265676973747279",
              "id": 21544,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "766:25:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_be29ba855de63e3aeb1afb9aed4122f6a4ac386581ea1b32773e72966a3749e7",
                "typeString": "literal_string \"BancorConverterRegistry\""
              },
              "value": "BancorConverterRegistry"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21548,
            "mutability": "constant",
            "name": "CONVERTER_REGISTRY_DATA",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "798:81:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21546,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "798:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72436f6e766572746572526567697374727944617461",
              "id": 21547,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "850:29:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f47ef61fa81526eefb8475acf271ff419a87423535a77af3ef98ebc7b31c640c",
                "typeString": "literal_string \"BancorConverterRegistryData\""
              },
              "value": "BancorConverterRegistryData"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21551,
            "mutability": "constant",
            "name": "BNT_TOKEN",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "886:48:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21549,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "886:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "424e54546f6b656e",
              "id": 21550,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "924:10:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_4686149f7058d2454e334cfa4ea1a3482469c64fd3d4f50dfc69716086aee66f",
                "typeString": "literal_string \"BNTToken\""
              },
              "value": "BNTToken"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21554,
            "mutability": "constant",
            "name": "BANCOR_X",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "941:46:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21552,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "941:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f7258",
              "id": 21553,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "978:9:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_86ea4d05259b04f0f72cb84c9671b182b8bbe45a219bbea86edd67f80c414eb4",
                "typeString": "literal_string \"BancorX\""
              },
              "value": "BancorX"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21557,
            "mutability": "constant",
            "name": "BANCOR_X_UPGRADER",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "994:63:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21555,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "994:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "42616e636f72585570677261646572",
              "id": 21556,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1040:17:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_d5e7e6eba8567517cf1f8f313379e5a6dbd5dcff956b158cf65a32e6b2bb5fd8",
                "typeString": "literal_string \"BancorXUpgrader\""
              },
              "value": "BancorXUpgrader"
            },
            "visibility": "internal"
          },
          {
            "constant": true,
            "id": 21560,
            "mutability": "constant",
            "name": "CHAINLINK_ORACLE_WHITELIST",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "1064:81:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 21558,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1064:7:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "436861696e6c696e6b4f7261636c6557686974656c697374",
              "id": 21559,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1119:26:56",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_f1d302dc7d7d6451424d658039558f1ea7e3cbf7255a10240557f430d300feb3",
                "typeString": "literal_string \"ChainlinkOracleWhitelist\""
              },
              "value": "ChainlinkOracleWhitelist"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "functionSelector": "7b103999",
            "id": 21562,
            "mutability": "mutable",
            "name": "registry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "1154:33:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IContractRegistry_$22831",
              "typeString": "contract IContractRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 21561,
              "name": "IContractRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22831,
              "src": "1154:17:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                "typeString": "contract IContractRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "61cd756e",
            "id": 21564,
            "mutability": "mutable",
            "name": "prevRegistry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "1243:37:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IContractRegistry_$22831",
              "typeString": "contract IContractRegistry"
            },
            "typeName": {
              "contractScope": null,
              "id": 21563,
              "name": "IContractRegistry",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22831,
              "src": "1243:17:56",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                "typeString": "contract IContractRegistry"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "2fe8a6ad",
            "id": 21566,
            "mutability": "mutable",
            "name": "onlyOwnerCanUpdateRegistry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 21719,
            "src": "1333:38:56",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 21565,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1333:4:56",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21576,
              "nodeType": "Block",
              "src": "1616:51:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21572,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21569,
                        "src": "1633:13:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 21571,
                      "name": "_only",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21593,
                      "src": "1627:5:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$__$",
                        "typeString": "function (bytes32) view"
                      }
                    },
                    "id": 21573,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1627:20:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21574,
                  "nodeType": "ExpressionStatement",
                  "src": "1627:20:56"
                },
                {
                  "id": 21575,
                  "nodeType": "PlaceholderStatement",
                  "src": "1658:1:56"
                }
              ]
            },
            "documentation": {
              "id": 21567,
              "nodeType": "StructuredDocumentation",
              "src": "1430:143:56",
              "text": " @dev verifies that the caller is mapped to the given contract name\n @param _contractName    contract name"
            },
            "id": 21577,
            "name": "only",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 21570,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21569,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21577,
                  "src": "1593:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21568,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1593:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1592:23:56"
            },
            "src": "1579:88:56",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21592,
              "nodeType": "Block",
              "src": "1774:87:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21588,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21583,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1793:3:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 21584,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1793:10:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21586,
                              "name": "_contractName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21579,
                              "src": "1817:13:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "id": 21585,
                            "name": "addressOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21718,
                            "src": "1807:9:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view returns (address)"
                            }
                          },
                          "id": 21587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "1807:24:56",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1793:38:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4143434553535f44454e494544",
                        "id": 21589,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1833:19:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        },
                        "value": "ERR_ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        }
                      ],
                      "id": 21582,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1785:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21590,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1785:68:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21591,
                  "nodeType": "ExpressionStatement",
                  "src": "1785:68:56"
                }
              ]
            },
            "documentation": null,
            "id": 21593,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_only",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21580,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21579,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21593,
                  "src": "1737:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21578,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1737:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1736:23:56"
            },
            "returnParameters": {
              "id": 21581,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1774:0:56"
            },
            "scope": 21719,
            "src": "1722:139:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21617,
              "nodeType": "Block",
              "src": "2111:112:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21609,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21605,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21562,
                      "src": "2122:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21607,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21596,
                          "src": "2151:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          }
                        ],
                        "id": 21606,
                        "name": "IContractRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22831,
                        "src": "2133:17:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IContractRegistry_$22831_$",
                          "typeString": "type(contract IContractRegistry)"
                        }
                      },
                      "id": 21608,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2133:28:56",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "2122:39:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21610,
                  "nodeType": "ExpressionStatement",
                  "src": "2122:39:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21611,
                      "name": "prevRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21564,
                      "src": "2172:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21613,
                          "name": "_registry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21596,
                          "src": "2205:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          }
                        ],
                        "id": 21612,
                        "name": "IContractRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22831,
                        "src": "2187:17:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IContractRegistry_$22831_$",
                          "typeString": "type(contract IContractRegistry)"
                        }
                      },
                      "id": 21614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2187:28:56",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "2172:43:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21616,
                  "nodeType": "ExpressionStatement",
                  "src": "2172:43:56"
                }
              ]
            },
            "documentation": {
              "id": 21594,
              "nodeType": "StructuredDocumentation",
              "src": "1869:153:56",
              "text": " @dev initializes a new ContractRegistryClient instance\n @param  _registry   address of a contract-registry contract"
            },
            "id": 21618,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21601,
                        "name": "_registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21596,
                        "src": "2099:9:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                          "typeString": "contract IContractRegistry"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                          "typeString": "contract IContractRegistry"
                        }
                      ],
                      "id": 21600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2091:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 21599,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "2091:7:56",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 21602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2091:18:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 21603,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21598,
                  "name": "validAddress",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22618,
                  "src": "2078:12:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2078:32:56"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21596,
                  "mutability": "mutable",
                  "name": "_registry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21618,
                  "src": "2040:27:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                    "typeString": "contract IContractRegistry"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21595,
                    "name": "IContractRegistry",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22831,
                    "src": "2040:17:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2039:29:56"
            },
            "returnParameters": {
              "id": 21604,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2111:0:56"
            },
            "scope": 21719,
            "src": "2028:195:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21679,
              "nodeType": "Block",
              "src": "2333:892:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 21629,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21626,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21623,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "2403:3:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 21624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "2403:10:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 21625,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21728,
                            "src": "2417:5:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "2403:19:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 21628,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "2426:27:56",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 21627,
                            "name": "onlyOwnerCanUpdateRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21566,
                            "src": "2427:26:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2403:50:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f4143434553535f44454e494544",
                        "id": 21630,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2455:19:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        },
                        "value": "ERR_ACCESS_DENIED"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f5894269650d3e1726ed81a4f48c5b62c7dd6fa025b89d639952a7012960d666",
                          "typeString": "literal_string \"ERR_ACCESS_DENIED\""
                        }
                      ],
                      "id": 21622,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2395:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2395:80:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21632,
                  "nodeType": "ExpressionStatement",
                  "src": "2395:80:56"
                },
                {
                  "assignments": [
                    21634
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21634,
                      "mutability": "mutable",
                      "name": "newRegistry",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 21679,
                      "src": "2530:29:56",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 21633,
                        "name": "IContractRegistry",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22831,
                        "src": "2530:17:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                          "typeString": "contract IContractRegistry"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21640,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21637,
                            "name": "CONTRACT_REGISTRY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21527,
                            "src": "2590:17:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 21636,
                          "name": "addressOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21718,
                          "src": "2580:9:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$",
                            "typeString": "function (bytes32) view returns (address)"
                          }
                        },
                        "id": 21638,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2580:28:56",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21635,
                      "name": "IContractRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22831,
                      "src": "2562:17:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IContractRegistry_$22831_$",
                        "typeString": "type(contract IContractRegistry)"
                      }
                    },
                    "id": 21639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2562:47:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2530:79:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 21654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                            "typeString": "contract IContractRegistry"
                          },
                          "id": 21644,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21642,
                            "name": "newRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21634,
                            "src": "2706:11:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                              "typeString": "contract IContractRegistry"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 21643,
                            "name": "registry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21562,
                            "src": "2721:8:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                              "typeString": "contract IContractRegistry"
                            }
                          },
                          "src": "2706:23:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 21647,
                                "name": "newRegistry",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21634,
                                "src": "2741:11:56",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                                  "typeString": "contract IContractRegistry"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                                  "typeString": "contract IContractRegistry"
                                }
                              ],
                              "id": 21646,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2733:7:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 21645,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2733:7:56",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 21648,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2733:20:56",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 21651,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2765:1:56",
                                "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": 21650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "2757:7:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 21649,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "2757:7:56",
                                "typeDescriptions": {
                                  "typeIdentifier": null,
                                  "typeString": null
                                }
                              }
                            },
                            "id": 21652,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2757:10:56",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "2733:34:56",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2706:61:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f5245474953545259",
                        "id": 21655,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2769:22:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_75b9212739e68843904752f41fb54f1609594bc4b84683da2a4384aeff5c191d",
                          "typeString": "literal_string \"ERR_INVALID_REGISTRY\""
                        },
                        "value": "ERR_INVALID_REGISTRY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_75b9212739e68843904752f41fb54f1609594bc4b84683da2a4384aeff5c191d",
                          "typeString": "literal_string \"ERR_INVALID_REGISTRY\""
                        }
                      ],
                      "id": 21641,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2698:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21656,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2698:94:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21657,
                  "nodeType": "ExpressionStatement",
                  "src": "2698:94:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21661,
                              "name": "CONTRACT_REGISTRY",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21527,
                              "src": "2929:17:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21659,
                              "name": "newRegistry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21634,
                              "src": "2907:11:56",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                                "typeString": "contract IContractRegistry"
                              }
                            },
                            "id": 21660,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "addressOf",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22830,
                            "src": "2907:21:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                              "typeString": "function (bytes32) view external returns (address)"
                            }
                          },
                          "id": 21662,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2907:40:56",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 21665,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2959:1:56",
                              "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": 21664,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2951:7:56",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 21663,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2951:7:56",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 21666,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2951:10:56",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "2907:54:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552525f494e56414c49445f5245474953545259",
                        "id": 21668,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2963:22:56",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_75b9212739e68843904752f41fb54f1609594bc4b84683da2a4384aeff5c191d",
                          "typeString": "literal_string \"ERR_INVALID_REGISTRY\""
                        },
                        "value": "ERR_INVALID_REGISTRY"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_75b9212739e68843904752f41fb54f1609594bc4b84683da2a4384aeff5c191d",
                          "typeString": "literal_string \"ERR_INVALID_REGISTRY\""
                        }
                      ],
                      "id": 21658,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2899:7:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21669,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2899:87:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21670,
                  "nodeType": "ExpressionStatement",
                  "src": "2899:87:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21671,
                      "name": "prevRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21564,
                      "src": "3078:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21672,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21562,
                      "src": "3093:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "3078:23:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21674,
                  "nodeType": "ExpressionStatement",
                  "src": "3078:23:56"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21675,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21562,
                      "src": "3195:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21676,
                      "name": "newRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21634,
                      "src": "3206:11:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "3195:22:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21678,
                  "nodeType": "ExpressionStatement",
                  "src": "3195:22:56"
                }
              ]
            },
            "documentation": {
              "id": 21619,
              "nodeType": "StructuredDocumentation",
              "src": "2231:63:56",
              "text": " @dev updates to the new contract-registry"
            },
            "functionSelector": "49d10b64",
            "id": 21680,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "updateRegistry",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21620,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2323:2:56"
            },
            "returnParameters": {
              "id": 21621,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2333:0:56"
            },
            "scope": 21719,
            "src": "2300:925:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21690,
              "nodeType": "Block",
              "src": "3348:93:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21688,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21686,
                      "name": "registry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21562,
                      "src": "3410:8:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21687,
                      "name": "prevRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21564,
                      "src": "3421:12:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                        "typeString": "contract IContractRegistry"
                      }
                    },
                    "src": "3410:23:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                      "typeString": "contract IContractRegistry"
                    }
                  },
                  "id": 21689,
                  "nodeType": "ExpressionStatement",
                  "src": "3410:23:56"
                }
              ]
            },
            "documentation": {
              "id": 21681,
              "nodeType": "StructuredDocumentation",
              "src": "3233:65:56",
              "text": " @dev restores the previous contract-registry"
            },
            "functionSelector": "b4a176d3",
            "id": 21691,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 21684,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21683,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "3338:9:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3338:9:56"
              }
            ],
            "name": "restoreRegistry",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21682,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3328:2:56"
            },
            "returnParameters": {
              "id": 21685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3348:0:56"
            },
            "scope": 21719,
            "src": "3304:137:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21703,
              "nodeType": "Block",
              "src": "3738:141:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21701,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21699,
                      "name": "onlyOwnerCanUpdateRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21566,
                      "src": "3815:26:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21700,
                      "name": "_onlyOwnerCanUpdateRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21694,
                      "src": "3844:27:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3815:56:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21702,
                  "nodeType": "ExpressionStatement",
                  "src": "3815:56:56"
                }
              ]
            },
            "documentation": {
              "id": 21692,
              "nodeType": "StructuredDocumentation",
              "src": "3449:200:56",
              "text": " @dev restricts the permission to update the contract-registry\n @param _onlyOwnerCanUpdateRegistry  indicates whether or not permission is restricted to owner only"
            },
            "functionSelector": "024c7ec7",
            "id": 21704,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 21697,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21696,
                  "name": "ownerOnly",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 21754,
                  "src": "3728:9:56",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3728:9:56"
              }
            ],
            "name": "restrictRegistryUpdate",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21695,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21694,
                  "mutability": "mutable",
                  "name": "_onlyOwnerCanUpdateRegistry",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21704,
                  "src": "3687:32:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21693,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3687:4:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3686:34:56"
            },
            "returnParameters": {
              "id": 21698,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3738:0:56"
            },
            "scope": 21719,
            "src": "3655:224:56",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21717,
              "nodeType": "Block",
              "src": "4151:59:56",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21714,
                        "name": "_contractName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21707,
                        "src": "4188:13:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 21712,
                        "name": "registry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21562,
                        "src": "4169:8:56",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IContractRegistry_$22831",
                          "typeString": "contract IContractRegistry"
                        }
                      },
                      "id": 21713,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "addressOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22830,
                      "src": "4169:18:56",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32) view external returns (address)"
                      }
                    },
                    "id": 21715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4169:33:56",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 21711,
                  "id": 21716,
                  "nodeType": "Return",
                  "src": "4162:40:56"
                }
              ]
            },
            "documentation": {
              "id": 21705,
              "nodeType": "StructuredDocumentation",
              "src": "3887:184:56",
              "text": " @dev returns the address associated with the given contract name\n @param _contractName    contract name\n @return contract address"
            },
            "id": 21718,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addressOf",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 21708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21707,
                  "mutability": "mutable",
                  "name": "_contractName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21718,
                  "src": "4096:21:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21706,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4096:7:56",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4095:23:56"
            },
            "returnParameters": {
              "id": 21711,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21710,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 21718,
                  "src": "4142:7:56",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21709,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4142:7:56",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4141:9:56"
            },
            "scope": 21719,
            "src": "4077:133:56",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 21720,
        "src": "233:3980:56"
      }
    ],
    "src": "52:4163:56"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.2.3",
  "updatedAt": "2020-10-20T08:24:47.839Z",
  "devdoc": {
    "details": "Base contract for ContractRegistry clients",
    "kind": "dev",
    "methods": {
      "acceptOwnership()": {
        "details": "used by a new owner to accept an ownership transfer"
      },
      "constructor": {
        "details": "initializes a new ContractRegistryClient instance",
        "params": {
          "_registry": "address of a contract-registry contract"
        }
      },
      "restoreRegistry()": {
        "details": "restores the previous contract-registry"
      },
      "restrictRegistryUpdate(bool)": {
        "details": "restricts the permission to update the contract-registry",
        "params": {
          "_onlyOwnerCanUpdateRegistry": "indicates whether or not permission is restricted to owner only"
        }
      },
      "transferOwnership(address)": {
        "details": "allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner",
        "params": {
          "_newOwner": "new contract owner"
        }
      },
      "updateRegistry()": {
        "details": "updates to the new contract-registry"
      }
    },
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}