{
  "fileName": "WithInitialize.sol",
  "contractName": "ExtendsFromShouldHaveInitialize",
  "source": "pragma solidity ^0.5.0;\n\nimport \"../Initializable.sol\";\n\ncontract WithInitialize {\n  uint public value;\n\n  function initialize() public {\n    value = 42;\n  }\n}\n\ncontract AnotherWithInitialize is Initializable {\n  uint public anotherValue;\n\n  function init() initializer public {\n    anotherValue = 42;\n  }\n}\n\ncontract WithoutInitialize {\n  function say() public pure returns (string memory) {\n    return \"WithoutInitialize\";\n  }\n}\n\ncontract WithBaseUninitialized is WithInitialize, AnotherWithInitialize {\n  uint public someValue;\n\n  function initialize() public {\n    someValue = 42;\n  }\n}\n\ncontract WithBaseInitialized is WithInitialize, AnotherWithInitialize {\n  uint public someValue;\n\n  function initialize() public {\n    WithInitialize.initialize();\n    AnotherWithInitialize.init();\n    someValue = 42;\n  }\n}\n\ncontract WithSimpleBaseUninitialized is WithoutInitialize {\n  uint public someValue;\n\n  function initialize() public {\n    someValue = 42;\n  }\n}\n\ncontract ShouldHaveInitialize is WithInitialize, AnotherWithInitialize {\n  uint public someValue;\n}\n\ncontract DoesNotNeedAnInitialize is WithInitialize, WithoutInitialize {\n  uint public someValue;\n}\n\ncontract ExtendsFromShouldHaveInitialize is ShouldHaveInitialize {\n  uint public someOtherValue;\n}\n",
  "sourcePath": "contracts/mocks/WithInitialize.sol",
  "sourceMap": "1164:98:24:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1164:98:24;;;;;;;",
  "deployedSourceMap": "1164:98:24:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1164:98:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;85:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1038:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;213:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;107:50;;;:::i;:::-;;1233:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;242:63;;;:::i;:::-;;85:17;;;;:::o;1038:21::-;;;;:::o;213:24::-;;;;:::o;107:50::-;150:2;142:5;:10;;;;107:50::o;1233:26::-;;;;:::o;242:63::-;1024:12:0;;;;;;;;;;;:31;;;;1040:15;:13;:15::i;:::-;1024:31;:47;;;;1060:11;;;;;;;;;;;1059:12;1024:47;1016:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;;;;;;1151:13;1129:35;;1174:14;1170:80;;;1213:4;1198:12;;:19;;;;;;;;;;;;;;;;;;1239:4;1225:11;;:18;;;;;;;;;;;;;;;;;;1170:80;298:2:24;283:12;:17;;;;1268:14:0;1264:55;;;1307:5;1292:12;;:20;;;;;;;;;;;;;;;;;;1264:55;242:63:24;:::o;1409:498:0:-;1456:4;1797:12;1820:4;1797:28;;1831:10;1876:4;1864:17;1858:23;;1901:1;1895:2;:7;1888:14;;;;1409:498;:::o",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "value",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "someValue",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "anotherValue",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "someOtherValue",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "init",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/mocks/WithInitialize.sol",
    "exportedSymbols": {
      "AnotherWithInitialize": [
        4818
      ],
      "DoesNotNeedAnInitialize": [
        4894
      ],
      "ExtendsFromShouldHaveInitialize": [
        4899
      ],
      "ShouldHaveInitialize": [
        4887
      ],
      "WithBaseInitialized": [
        4867
      ],
      "WithBaseUninitialized": [
        4842
      ],
      "WithInitialize": [
        4803
      ],
      "WithSimpleBaseUninitialized": [
        4880
      ],
      "WithoutInitialize": [
        4827
      ]
    },
    "id": 4900,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 4791,
        "literals": [
          "solidity",
          "^",
          "0.5",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:24"
      },
      {
        "absolutePath": "contracts/Initializable.sol",
        "file": "../Initializable.sol",
        "id": 4792,
        "nodeType": "ImportDirective",
        "scope": 4900,
        "sourceUnit": 69,
        "src": "25:30:24",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4803,
        "linearizedBaseContracts": [
          4803
        ],
        "name": "WithInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4794,
            "name": "value",
            "nodeType": "VariableDeclaration",
            "scope": 4803,
            "src": "85:17:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4793,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "85:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4801,
              "nodeType": "Block",
              "src": "136:21:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4799,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4797,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4794,
                      "src": "142:5:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 4798,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "150:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "142:10:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4800,
                  "nodeType": "ExpressionStatement",
                  "src": "142:10:24"
                }
              ]
            },
            "documentation": null,
            "id": 4802,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4795,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "126:2:24"
            },
            "returnParameters": {
              "id": 4796,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "136:0:24"
            },
            "scope": 4803,
            "src": "107:50:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "57:102:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4804,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 68,
              "src": "195:13:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$68",
                "typeString": "contract Initializable"
              }
            },
            "id": 4805,
            "nodeType": "InheritanceSpecifier",
            "src": "195:13:24"
          }
        ],
        "contractDependencies": [
          68
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4818,
        "linearizedBaseContracts": [
          4818,
          68
        ],
        "name": "AnotherWithInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4807,
            "name": "anotherValue",
            "nodeType": "VariableDeclaration",
            "scope": 4818,
            "src": "213:24:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4806,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "213:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4816,
              "nodeType": "Block",
              "src": "277:28:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4812,
                      "name": "anotherValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4807,
                      "src": "283:12:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 4813,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "298:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "283:17:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4815,
                  "nodeType": "ExpressionStatement",
                  "src": "283:17:24"
                }
              ]
            },
            "documentation": null,
            "id": 4817,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 4810,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 4809,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43,
                  "src": "258:11:24",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "258:11:24"
              }
            ],
            "name": "init",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4808,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "255:2:24"
            },
            "returnParameters": {
              "id": 4811,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "277:0:24"
            },
            "scope": 4818,
            "src": "242:63:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "161:146:24"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4827,
        "linearizedBaseContracts": [
          4827
        ],
        "name": "WithoutInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 4825,
              "nodeType": "Block",
              "src": "391:37:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "576974686f7574496e697469616c697a65",
                    "id": 4823,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "404:19:24",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_29904a0199e04a428d841982e15369f76a041f59a9487735d519e6dd6ca6c78c",
                      "typeString": "literal_string \"WithoutInitialize\""
                    },
                    "value": "WithoutInitialize"
                  },
                  "functionReturnParameters": 4822,
                  "id": 4824,
                  "nodeType": "Return",
                  "src": "397:26:24"
                }
              ]
            },
            "documentation": null,
            "id": 4826,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4819,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "352:2:24"
            },
            "returnParameters": {
              "id": 4822,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4821,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 4826,
                  "src": "376:13:24",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 4820,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "376:6:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "375:15:24"
            },
            "scope": 4827,
            "src": "340:88:24",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "309:121:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4828,
              "name": "WithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4803,
              "src": "466:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithInitialize_$4803",
                "typeString": "contract WithInitialize"
              }
            },
            "id": 4829,
            "nodeType": "InheritanceSpecifier",
            "src": "466:14:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4830,
              "name": "AnotherWithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4818,
              "src": "482:21:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AnotherWithInitialize_$4818",
                "typeString": "contract AnotherWithInitialize"
              }
            },
            "id": 4831,
            "nodeType": "InheritanceSpecifier",
            "src": "482:21:24"
          }
        ],
        "contractDependencies": [
          68,
          4803,
          4818
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4842,
        "linearizedBaseContracts": [
          4842,
          4818,
          68,
          4803
        ],
        "name": "WithBaseUninitialized",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4833,
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "scope": 4842,
            "src": "508:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4832,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "508:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4840,
              "nodeType": "Block",
              "src": "563:25:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4836,
                      "name": "someValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4833,
                      "src": "569:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 4837,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "581:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "569:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4839,
                  "nodeType": "ExpressionStatement",
                  "src": "569:14:24"
                }
              ]
            },
            "documentation": null,
            "id": 4841,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4834,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "553:2:24"
            },
            "returnParameters": {
              "id": 4835,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "563:0:24"
            },
            "scope": 4842,
            "src": "534:54:24",
            "stateMutability": "nonpayable",
            "superFunction": 4802,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "432:158:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4843,
              "name": "WithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4803,
              "src": "624:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithInitialize_$4803",
                "typeString": "contract WithInitialize"
              }
            },
            "id": 4844,
            "nodeType": "InheritanceSpecifier",
            "src": "624:14:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4845,
              "name": "AnotherWithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4818,
              "src": "640:21:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AnotherWithInitialize_$4818",
                "typeString": "contract AnotherWithInitialize"
              }
            },
            "id": 4846,
            "nodeType": "InheritanceSpecifier",
            "src": "640:21:24"
          }
        ],
        "contractDependencies": [
          68,
          4803,
          4818
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4867,
        "linearizedBaseContracts": [
          4867,
          4818,
          68,
          4803
        ],
        "name": "WithBaseInitialized",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4848,
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "scope": 4867,
            "src": "666:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4847,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "666:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4865,
              "nodeType": "Block",
              "src": "721:92:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4851,
                        "name": "WithInitialize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4803,
                        "src": "727:14:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_WithInitialize_$4803_$",
                          "typeString": "type(contract WithInitialize)"
                        }
                      },
                      "id": 4853,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "initialize",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4802,
                      "src": "727:25:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 4854,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "727:27:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4855,
                  "nodeType": "ExpressionStatement",
                  "src": "727:27:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 4856,
                        "name": "AnotherWithInitialize",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4818,
                        "src": "760:21:24",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_AnotherWithInitialize_$4818_$",
                          "typeString": "type(contract AnotherWithInitialize)"
                        }
                      },
                      "id": 4858,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "init",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4817,
                      "src": "760:26:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 4859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "760:28:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 4860,
                  "nodeType": "ExpressionStatement",
                  "src": "760:28:24"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4863,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4861,
                      "name": "someValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4848,
                      "src": "794:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 4862,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "806:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "794:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4864,
                  "nodeType": "ExpressionStatement",
                  "src": "794:14:24"
                }
              ]
            },
            "documentation": null,
            "id": 4866,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "711:2:24"
            },
            "returnParameters": {
              "id": 4850,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "721:0:24"
            },
            "scope": 4867,
            "src": "692:121:24",
            "stateMutability": "nonpayable",
            "superFunction": 4802,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "592:223:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4868,
              "name": "WithoutInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4827,
              "src": "857:17:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithoutInitialize_$4827",
                "typeString": "contract WithoutInitialize"
              }
            },
            "id": 4869,
            "nodeType": "InheritanceSpecifier",
            "src": "857:17:24"
          }
        ],
        "contractDependencies": [
          4827
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4880,
        "linearizedBaseContracts": [
          4880,
          4827
        ],
        "name": "WithSimpleBaseUninitialized",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4871,
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "scope": 4880,
            "src": "879:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4870,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "879:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 4878,
              "nodeType": "Block",
              "src": "934:25:24",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 4876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 4874,
                      "name": "someValue",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4871,
                      "src": "940:9:24",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 4875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "952:2:24",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "940:14:24",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 4877,
                  "nodeType": "ExpressionStatement",
                  "src": "940:14:24"
                }
              ]
            },
            "documentation": null,
            "id": 4879,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 4872,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "924:2:24"
            },
            "returnParameters": {
              "id": 4873,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "934:0:24"
            },
            "scope": 4880,
            "src": "905:54:24",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "817:144:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4881,
              "name": "WithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4803,
              "src": "996:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithInitialize_$4803",
                "typeString": "contract WithInitialize"
              }
            },
            "id": 4882,
            "nodeType": "InheritanceSpecifier",
            "src": "996:14:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4883,
              "name": "AnotherWithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4818,
              "src": "1012:21:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AnotherWithInitialize_$4818",
                "typeString": "contract AnotherWithInitialize"
              }
            },
            "id": 4884,
            "nodeType": "InheritanceSpecifier",
            "src": "1012:21:24"
          }
        ],
        "contractDependencies": [
          68,
          4803,
          4818
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4887,
        "linearizedBaseContracts": [
          4887,
          4818,
          68,
          4803
        ],
        "name": "ShouldHaveInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4886,
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "scope": 4887,
            "src": "1038:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4885,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1038:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "963:99:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4888,
              "name": "WithInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4803,
              "src": "1100:14:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithInitialize_$4803",
                "typeString": "contract WithInitialize"
              }
            },
            "id": 4889,
            "nodeType": "InheritanceSpecifier",
            "src": "1100:14:24"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4890,
              "name": "WithoutInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4827,
              "src": "1116:17:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithoutInitialize_$4827",
                "typeString": "contract WithoutInitialize"
              }
            },
            "id": 4891,
            "nodeType": "InheritanceSpecifier",
            "src": "1116:17:24"
          }
        ],
        "contractDependencies": [
          4803,
          4827
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4894,
        "linearizedBaseContracts": [
          4894,
          4827,
          4803
        ],
        "name": "DoesNotNeedAnInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4893,
            "name": "someValue",
            "nodeType": "VariableDeclaration",
            "scope": 4894,
            "src": "1138:21:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4892,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1138:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "1064:98:24"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 4895,
              "name": "ShouldHaveInitialize",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 4887,
              "src": "1208:20:24",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ShouldHaveInitialize_$4887",
                "typeString": "contract ShouldHaveInitialize"
              }
            },
            "id": 4896,
            "nodeType": "InheritanceSpecifier",
            "src": "1208:20:24"
          }
        ],
        "contractDependencies": [
          68,
          4803,
          4818,
          4887
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 4899,
        "linearizedBaseContracts": [
          4899,
          4887,
          4818,
          68,
          4803
        ],
        "name": "ExtendsFromShouldHaveInitialize",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 4898,
            "name": "someOtherValue",
            "nodeType": "VariableDeclaration",
            "scope": 4899,
            "src": "1233:26:24",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 4897,
              "name": "uint",
              "nodeType": "ElementaryTypeName",
              "src": "1233:4:24",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          }
        ],
        "scope": 4900,
        "src": "1164:98:24"
      }
    ],
    "src": "0:1263:24"
  },
  "bytecode": "0x608060405234801561001057600080fd5b5061028e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80633fa4f245146100675780634a627e611461008557806368620bd0146100a35780638129fc1c146100c1578063df04ef0a146100cb578063e1c7392a146100e9575b600080fd5b61006f6100f3565b6040518082815260200191505060405180910390f35b61008d6100f9565b6040518082815260200191505060405180910390f35b6100ab6100ff565b6040518082815260200191505060405180910390f35b6100c9610105565b005b6100d361010f565b6040518082815260200191505060405180910390f35b6100f1610115565b005b60005481565b60355481565b60345481565b602a600081905550565b60365481565b6001809054906101000a900460ff1680610133575061013261021d565b5b8061014b5750600160009054906101000a900460ff16155b15156101a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610235602e913960400191505060405180910390fd5b60006001809054906101000a900460ff1615905080156101f15760018060016101000a81548160ff02191690831515021790555060018060006101000a81548160ff0219169083151502179055505b602a603481905550801561021a5760006001806101000a81548160ff0219169083151502179055505b50565b6000803090506000813b905060008114925050509056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a72305820d15e97d59c176aff3a62934a0b39f324fd19e4102647aa237817886577107e240029",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c80633fa4f245146100675780634a627e611461008557806368620bd0146100a35780638129fc1c146100c1578063df04ef0a146100cb578063e1c7392a146100e9575b600080fd5b61006f6100f3565b6040518082815260200191505060405180910390f35b61008d6100f9565b6040518082815260200191505060405180910390f35b6100ab6100ff565b6040518082815260200191505060405180910390f35b6100c9610105565b005b6100d361010f565b6040518082815260200191505060405180910390f35b6100f1610115565b005b60005481565b60355481565b60345481565b602a600081905550565b60365481565b6001809054906101000a900460ff1680610133575061013261021d565b5b8061014b5750600160009054906101000a900460ff16155b15156101a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180610235602e913960400191505060405180910390fd5b60006001809054906101000a900460ff1615905080156101f15760018060016101000a81548160ff02191690831515021790555060018060006101000a81548160ff0219169083151502179055505b602a603481905550801561021a5760006001806101000a81548160ff0219169083151502179055505b50565b6000803090506000813b905060008114925050509056fe436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a72305820d15e97d59c176aff3a62934a0b39f324fd19e4102647aa237817886577107e240029",
  "compiler": {
    "name": "solc",
    "version": "0.5.3+commit.10d17f24.Emscripten.clang",
    "optimizer": {},
    "evmVersion": "constantinople"
  }
}
