{
  "fileName": "DummyImplementation.sol",
  "contractName": "Impl",
  "source": "pragma solidity ^0.5.0;\n\ncontract Impl {\n  function version() public pure returns (string memory); \n}\n\ncontract DummyImplementation {\n  uint256 public value;\n  string public text;\n  uint256[] public values;\n\n  function initializeNonPayable() public {\n    value = 10;\n  }\n\n  function initializePayable() payable public {\n    value = 100;\n  }\n\n  function initializeNonPayable(uint256 _value) public {\n    value = _value;\n  }\n\n  function initializePayable(uint256 _value) payable public {\n    value = _value;\n  }\n\n  function initialize(uint256 _value, string memory _text, uint256[] memory _values) public {\n    value = _value;\n    text = _text;\n    values = _values;\n  }\n\n  function get() public pure returns (bool) {\n    return true;\n  }\n\n  function version() public pure returns (string memory) {\n    return \"V1\";\n  }\n\n  function reverts() public pure {\n    require(false);\n  }\n}\n\ncontract DummyImplementationV2 is DummyImplementation {\n  function migrate(uint256 newVal) payable public {\n    value = newVal;\n  }\n\n  function version() public pure returns (string memory) {\n    return \"V2\";\n  }\n}\n",
  "sourcePath": "contracts/mocks/DummyImplementation.sol",
  "sourceMap": "",
  "deployedSourceMap": "",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/mocks/DummyImplementation.sol",
    "exportedSymbols": {
      "DummyImplementation": [
        1524
      ],
      "DummyImplementationV2": [
        1545
      ],
      "Impl": [
        1433
      ]
    },
    "id": 1546,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1427,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": false,
        "id": 1433,
        "linearizedBaseContracts": [
          1433
        ],
        "name": "Impl",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": null,
            "id": 1432,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "version",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1428,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "59:2:9"
            },
            "returnParameters": {
              "id": 1431,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1430,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1432,
                  "src": "83:13:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1429,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "83:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "82:15:9"
            },
            "scope": 1433,
            "src": "43:55:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1546,
        "src": "25:76:9"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1524,
        "linearizedBaseContracts": [
          1524
        ],
        "name": "DummyImplementation",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1435,
            "name": "value",
            "nodeType": "VariableDeclaration",
            "scope": 1524,
            "src": "136:20:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1434,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "136:7:9",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1437,
            "name": "text",
            "nodeType": "VariableDeclaration",
            "scope": 1524,
            "src": "160:18:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1436,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "160:6:9",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1440,
            "name": "values",
            "nodeType": "VariableDeclaration",
            "scope": 1524,
            "src": "182:23:9",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
              "typeString": "uint256[]"
            },
            "typeName": {
              "baseType": {
                "id": 1438,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "182:7:9",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 1439,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "182:9:9",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                "typeString": "uint256[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1447,
              "nodeType": "Block",
              "src": "249:21:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1443,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1435,
                      "src": "255:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3130",
                      "id": 1444,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "263:2:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_10_by_1",
                        "typeString": "int_const 10"
                      },
                      "value": "10"
                    },
                    "src": "255:10:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1446,
                  "nodeType": "ExpressionStatement",
                  "src": "255:10:9"
                }
              ]
            },
            "documentation": null,
            "id": 1448,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initializeNonPayable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1441,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "239:2:9"
            },
            "returnParameters": {
              "id": 1442,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "249:0:9"
            },
            "scope": 1524,
            "src": "210:60:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1455,
              "nodeType": "Block",
              "src": "318:22:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1451,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1435,
                      "src": "324:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "313030",
                      "id": 1452,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "332:3:9",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_100_by_1",
                        "typeString": "int_const 100"
                      },
                      "value": "100"
                    },
                    "src": "324:11:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1454,
                  "nodeType": "ExpressionStatement",
                  "src": "324:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1456,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initializePayable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1449,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "300:2:9"
            },
            "returnParameters": {
              "id": 1450,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "318:0:9"
            },
            "scope": 1524,
            "src": "274:66:9",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1465,
              "nodeType": "Block",
              "src": "397:25:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1463,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1461,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1435,
                      "src": "403:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1462,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1458,
                      "src": "411:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "403:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1464,
                  "nodeType": "ExpressionStatement",
                  "src": "403:14:9"
                }
              ]
            },
            "documentation": null,
            "id": 1466,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initializeNonPayable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1459,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1458,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 1466,
                  "src": "374:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1457,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "374:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "373:16:9"
            },
            "returnParameters": {
              "id": 1460,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "397:0:9"
            },
            "scope": 1524,
            "src": "344:78:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1475,
              "nodeType": "Block",
              "src": "484:25:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1471,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1435,
                      "src": "490:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1472,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1468,
                      "src": "498:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "490:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1474,
                  "nodeType": "ExpressionStatement",
                  "src": "490:14:9"
                }
              ]
            },
            "documentation": null,
            "id": 1476,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initializePayable",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1468,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 1476,
                  "src": "453:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1467,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "453:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "452:16:9"
            },
            "returnParameters": {
              "id": 1470,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "484:0:9"
            },
            "scope": 1524,
            "src": "426:83:9",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1498,
              "nodeType": "Block",
              "src": "603:65:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1488,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1486,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1435,
                      "src": "609:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1487,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1478,
                      "src": "617:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "609:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1489,
                  "nodeType": "ExpressionStatement",
                  "src": "609:14:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1490,
                      "name": "text",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1437,
                      "src": "629:4:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1491,
                      "name": "_text",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1480,
                      "src": "636:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "629:12:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1493,
                  "nodeType": "ExpressionStatement",
                  "src": "629:12:9"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1494,
                      "name": "values",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1440,
                      "src": "647:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                        "typeString": "uint256[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1495,
                      "name": "_values",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1483,
                      "src": "656:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[] memory"
                      }
                    },
                    "src": "647:16:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage",
                      "typeString": "uint256[] storage ref"
                    }
                  },
                  "id": 1497,
                  "nodeType": "ExpressionStatement",
                  "src": "647:16:9"
                }
              ]
            },
            "documentation": null,
            "id": 1499,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1484,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1478,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 1499,
                  "src": "533:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1477,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "533:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1480,
                  "name": "_text",
                  "nodeType": "VariableDeclaration",
                  "scope": 1499,
                  "src": "549:19:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1479,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "549:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1483,
                  "name": "_values",
                  "nodeType": "VariableDeclaration",
                  "scope": 1499,
                  "src": "570:24:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1481,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "570:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1482,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "570:9:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "532:63:9"
            },
            "returnParameters": {
              "id": 1485,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "603:0:9"
            },
            "scope": 1524,
            "src": "513:155:9",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1506,
              "nodeType": "Block",
              "src": "714:22:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1504,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "727:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1503,
                  "id": 1505,
                  "nodeType": "Return",
                  "src": "720:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1507,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "get",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1500,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "684:2:9"
            },
            "returnParameters": {
              "id": 1503,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1502,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1507,
                  "src": "708:4:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1501,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "708:4:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "707:6:9"
            },
            "scope": 1524,
            "src": "672:64:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1514,
              "nodeType": "Block",
              "src": "795:22:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "5631",
                    "id": 1512,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "808:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_4c23426613a5dc69e08fbd2787e6210aa679d4522e95a89d4dd88c4fd13a2283",
                      "typeString": "literal_string \"V1\""
                    },
                    "value": "V1"
                  },
                  "functionReturnParameters": 1511,
                  "id": 1513,
                  "nodeType": "Return",
                  "src": "801:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1515,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "version",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1508,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "756:2:9"
            },
            "returnParameters": {
              "id": 1511,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1510,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1515,
                  "src": "780:13:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1509,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "780:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "779:15:9"
            },
            "scope": 1524,
            "src": "740:77:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1522,
              "nodeType": "Block",
              "src": "852:25:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 1519,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "866:5:9",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1518,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        6466,
                        6467
                      ],
                      "referencedDeclaration": 6466,
                      "src": "858:7:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1520,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "858:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1521,
                  "nodeType": "ExpressionStatement",
                  "src": "858:14:9"
                }
              ]
            },
            "documentation": null,
            "id": 1523,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "reverts",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1516,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "837:2:9"
            },
            "returnParameters": {
              "id": 1517,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "852:0:9"
            },
            "scope": 1524,
            "src": "821:56:9",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1546,
        "src": "103:776:9"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1525,
              "name": "DummyImplementation",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1524,
              "src": "915:19:9",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DummyImplementation_$1524",
                "typeString": "contract DummyImplementation"
              }
            },
            "id": 1526,
            "nodeType": "InheritanceSpecifier",
            "src": "915:19:9"
          }
        ],
        "contractDependencies": [
          1524
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1545,
        "linearizedBaseContracts": [
          1545,
          1524
        ],
        "name": "DummyImplementationV2",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1535,
              "nodeType": "Block",
              "src": "987:25:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1531,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1435,
                      "src": "993:5:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1532,
                      "name": "newVal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1528,
                      "src": "1001:6:9",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "993:14:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1534,
                  "nodeType": "ExpressionStatement",
                  "src": "993:14:9"
                }
              ]
            },
            "documentation": null,
            "id": 1536,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "migrate",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1529,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1528,
                  "name": "newVal",
                  "nodeType": "VariableDeclaration",
                  "scope": 1536,
                  "src": "956:14:9",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1527,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "956:7:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "955:16:9"
            },
            "returnParameters": {
              "id": 1530,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "987:0:9"
            },
            "scope": 1545,
            "src": "939:73:9",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1543,
              "nodeType": "Block",
              "src": "1071:22:9",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "5632",
                    "id": 1541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1084:4:9",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_23d235efaf569b2b407d10f447247743508d1762a8e3a3aed85ccc0570dde35f",
                      "typeString": "literal_string \"V2\""
                    },
                    "value": "V2"
                  },
                  "functionReturnParameters": 1540,
                  "id": 1542,
                  "nodeType": "Return",
                  "src": "1077:11:9"
                }
              ]
            },
            "documentation": null,
            "id": 1544,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "version",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1537,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1032:2:9"
            },
            "returnParameters": {
              "id": 1540,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1539,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1544,
                  "src": "1056:13:9",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1538,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1056:6:9",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1055:15:9"
            },
            "scope": 1545,
            "src": "1016:77:9",
            "stateMutability": "pure",
            "superFunction": 1515,
            "visibility": "public"
          }
        ],
        "scope": 1546,
        "src": "881:214:9"
      }
    ],
    "src": "0:1096:9"
  },
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "compiler": {
    "name": "solc",
    "version": "0.5.3+commit.10d17f24.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
