{
  "contractName": "WithParentWithSelfDestruct",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "value",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "say",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052600115610024573373ffffffffffffffffffffffffffffffffffffffff16ff5b61017b806100336000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514610051578063954ab4b21461007c575b600080fd5b34801561005d57600080fd5b5061006661010c565b6040518082815260200191505060405180910390f35b34801561008857600080fd5b50610091610112565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100d15780820151818401526020810190506100b6565b50505050905090810190601f1680156100fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60005481565b60606040805190810160405280601a81526020017f57697468506172656e745769746853656c6644657374727563740000000000008152509050905600a165627a7a72305820fdb7bb06656f1906e9080e5c912062e7ff7255e8a2f84520d5e3233ed8b283050029",
  "deployedBytecode": "0x60806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633fa4f24514610051578063954ab4b21461007c575b600080fd5b34801561005d57600080fd5b5061006661010c565b6040518082815260200191505060405180910390f35b34801561008857600080fd5b50610091610112565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100d15780820151818401526020810190506100b6565b50505050905090810190601f1680156100fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60005481565b60606040805190810160405280601a81526020017f57697468506172656e745769746853656c6644657374727563740000000000008152509050905600a165627a7a72305820fdb7bb06656f1906e9080e5c912062e7ff7255e8a2f84520d5e3233ed8b283050029",
  "sourceMap": "509:152:11:-;;;380:4;376:40;;;405:10;392:24;;;376:40;509:152;;;;;;",
  "deployedSourceMap": "509:152:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;324:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;324:20:11;;;;;;;;;;;;;;;;;;;;;;;569:90;;8:9:-1;5:2;;;30:1;27;20:12;5:2;569:90:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;569:90:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;324:20;;;;:::o;569:90::-;605:6;619:35;;;;;;;;;;;;;;;;;;;;569:90;:::o",
  "source": "pragma solidity ^0.4.24;\n\ncontract WithConstructor {\n  uint256 public value;\n\n  constructor() public {\n    value = 42;\n  }\n\n  function say() public pure returns (string) {\n    return \"WithConstructor\";\n  }\n}\n\ncontract WithFailingConstructor {\n  constructor() public {\n    assert(false);\n  }\n}\n\ncontract WithSelfDestruct {\n  uint256 public value;\n\n  constructor() public {\n    if (true)\n      selfdestruct(msg.sender);\n  }\n\n  function say() public pure returns (string) {\n    return \"WithSelfDestruct\";\n  }\n}\n\ncontract WithParentWithSelfDestruct is WithSelfDestruct {\n  function say() public pure returns (string) {\n    return \"WithParentWithSelfDestruct\";\n  }\n}\n\ncontract WithDelegateCall {\n  constructor(address _e) public {\n    require(_e.delegatecall(bytes4(keccak256(\"kill()\"))));\n  }\n  \n  function say() public pure returns (string) {\n    return \"WithDelegateCall\";\n  }\n}\n\ncontract WithParentWithDelegateCall is WithDelegateCall {\n  constructor(address _e) public WithDelegateCall(_e) {\n  }\n\n  function say() public pure returns (string) {\n    return \"WithParentWithDelegateCall\";\n  }\n}\n\ncontract WithConstructorImplementation {\n  uint256 public value;\n  string public text;\n\n  constructor(uint256 _value, string _text) public {\n    require(_value > 0);\n    value = _value;\n    text = _text;\n  }\n}\n",
  "sourcePath": "/Users/yoonjae/WebstormProjects/zos/packages/lib/contracts/mocks/Invalid.sol",
  "ast": {
    "absolutePath": "/Users/yoonjae/WebstormProjects/zos/packages/lib/contracts/mocks/Invalid.sol",
    "exportedSymbols": {
      "WithConstructor": [
        1601
      ],
      "WithConstructorImplementation": [
        1716
      ],
      "WithDelegateCall": [
        1669
      ],
      "WithFailingConstructor": [
        1610
      ],
      "WithParentWithDelegateCall": [
        1689
      ],
      "WithParentWithSelfDestruct": [
        1643
      ],
      "WithSelfDestruct": [
        1632
      ]
    },
    "id": 1717,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1582,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1601,
        "linearizedBaseContracts": [
          1601
        ],
        "name": "WithConstructor",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1584,
            "name": "value",
            "nodeType": "VariableDeclaration",
            "scope": 1601,
            "src": "55:20:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1583,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "55:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1591,
              "nodeType": "Block",
              "src": "101:21:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1587,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1584,
                      "src": "107:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 1588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "115:2:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "107:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1590,
                  "nodeType": "ExpressionStatement",
                  "src": "107:10:11"
                }
              ]
            },
            "documentation": null,
            "id": 1592,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1585,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "91:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1586,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "101:0:11"
            },
            "scope": 1601,
            "src": "80:42:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1599,
              "nodeType": "Block",
              "src": "170:35:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "57697468436f6e7374727563746f72",
                    "id": 1597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "183:17:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_31a3b5169da5035c08d9b25caf8dc3b126287039d931b211746db94a5f9527fc",
                      "typeString": "literal_string \"WithConstructor\""
                    },
                    "value": "WithConstructor"
                  },
                  "functionReturnParameters": 1596,
                  "id": 1598,
                  "nodeType": "Return",
                  "src": "176:24:11"
                }
              ]
            },
            "documentation": null,
            "id": 1600,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1593,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "138:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1596,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1595,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "162:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1594,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "162:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "161:8:11"
            },
            "scope": 1601,
            "src": "126:79:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "26:181:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1610,
        "linearizedBaseContracts": [
          1610
        ],
        "name": "WithFailingConstructor",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1608,
              "nodeType": "Block",
              "src": "266:24:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 1605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "279:5:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1604,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3146,
                      "src": "272:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "272:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1607,
                  "nodeType": "ExpressionStatement",
                  "src": "272:13:11"
                }
              ]
            },
            "documentation": null,
            "id": 1609,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1602,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "256:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1603,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "266:0:11"
            },
            "scope": 1610,
            "src": "245:45:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "209:83:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1632,
        "linearizedBaseContracts": [
          1632
        ],
        "name": "WithSelfDestruct",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1612,
            "name": "value",
            "nodeType": "VariableDeclaration",
            "scope": 1632,
            "src": "324:20:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1611,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "324:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1622,
              "nodeType": "Block",
              "src": "370:51:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "380:4:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "falseBody": null,
                  "id": 1621,
                  "nodeType": "IfStatement",
                  "src": "376:40:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1617,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3157,
                            "src": "405:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "405:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1616,
                        "name": "selfdestruct",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3165,
                        "src": "392:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$",
                          "typeString": "function (address)"
                        }
                      },
                      "id": 1619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "392:24:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 1620,
                    "nodeType": "ExpressionStatement",
                    "src": "392:24:11"
                  }
                }
              ]
            },
            "documentation": null,
            "id": 1623,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1613,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "360:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1614,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "370:0:11"
            },
            "scope": 1632,
            "src": "349:72:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1630,
              "nodeType": "Block",
              "src": "469:36:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "5769746853656c664465737472756374",
                    "id": 1628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "482:18:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_58a0d53a66d046d020d11a8545600304cc361abba7cf227ae045d15251087ec7",
                      "typeString": "literal_string \"WithSelfDestruct\""
                    },
                    "value": "WithSelfDestruct"
                  },
                  "functionReturnParameters": 1627,
                  "id": 1629,
                  "nodeType": "Return",
                  "src": "475:25:11"
                }
              ]
            },
            "documentation": null,
            "id": 1631,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1624,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "437:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1626,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1631,
                  "src": "461:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1625,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "461:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "460:8:11"
            },
            "scope": 1632,
            "src": "425:80:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "294:213:11"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1633,
              "name": "WithSelfDestruct",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1632,
              "src": "548:16:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithSelfDestruct_$1632",
                "typeString": "contract WithSelfDestruct"
              }
            },
            "id": 1634,
            "nodeType": "InheritanceSpecifier",
            "src": "548:16:11"
          }
        ],
        "contractDependencies": [
          1632
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1643,
        "linearizedBaseContracts": [
          1643,
          1632
        ],
        "name": "WithParentWithSelfDestruct",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1641,
              "nodeType": "Block",
              "src": "613:46:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "57697468506172656e745769746853656c664465737472756374",
                    "id": 1639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "626:28:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_0833173257b60f10ec48eaae9ba9300579d05c0505fe51a454ef724750aca66e",
                      "typeString": "literal_string \"WithParentWithSelfDestruct\""
                    },
                    "value": "WithParentWithSelfDestruct"
                  },
                  "functionReturnParameters": 1638,
                  "id": 1640,
                  "nodeType": "Return",
                  "src": "619:35:11"
                }
              ]
            },
            "documentation": null,
            "id": 1642,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1635,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "581:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1637,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1642,
                  "src": "605:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1636,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "605:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "604:8:11"
            },
            "scope": 1643,
            "src": "569:90:11",
            "stateMutability": "pure",
            "superFunction": 1631,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "509:152:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1669,
        "linearizedBaseContracts": [
          1669
        ],
        "name": "WithDelegateCall",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1659,
              "nodeType": "Block",
              "src": "724:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "6b696c6c2829",
                                    "id": 1653,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "771:8:11",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_41c0e1b5eba5f1ef69db2e30c1ec7d6e0a5f3d39332543a8a99d1165e460a49e",
                                      "typeString": "literal_string \"kill()\""
                                    },
                                    "value": "kill()"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_41c0e1b5eba5f1ef69db2e30c1ec7d6e0a5f3d39332543a8a99d1165e460a49e",
                                      "typeString": "literal_string \"kill()\""
                                    }
                                  ],
                                  "id": 1652,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3151,
                                  "src": "761:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                    "typeString": "function () pure returns (bytes32)"
                                  }
                                },
                                "id": 1654,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "761:19:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 1651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "754:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 1655,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "754:27:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1649,
                            "name": "_e",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1645,
                            "src": "738:2:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "delegatecall",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "738:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_baredelegatecall_nonpayable$__$returns$_t_bool_$",
                            "typeString": "function () returns (bool)"
                          }
                        },
                        "id": 1656,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "738:44:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1648,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3160,
                      "src": "730:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "730:53:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1658,
                  "nodeType": "ExpressionStatement",
                  "src": "730:53:11"
                }
              ]
            },
            "documentation": null,
            "id": 1660,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1645,
                  "name": "_e",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "705:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1644,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "705:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "704:12:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1647,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "724:0:11"
            },
            "scope": 1669,
            "src": "693:95:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1667,
              "nodeType": "Block",
              "src": "838:36:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "5769746844656c656761746543616c6c",
                    "id": 1665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "851:18:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_5eb8413c60a8c94fd9d5088e6adefcd78aa6bd919916905a488ee2152e303dd3",
                      "typeString": "literal_string \"WithDelegateCall\""
                    },
                    "value": "WithDelegateCall"
                  },
                  "functionReturnParameters": 1664,
                  "id": 1666,
                  "nodeType": "Return",
                  "src": "844:25:11"
                }
              ]
            },
            "documentation": null,
            "id": 1668,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1661,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "806:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1663,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1668,
                  "src": "830:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1662,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "830:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "829:8:11"
            },
            "scope": 1669,
            "src": "794:80:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "663:213:11"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1670,
              "name": "WithDelegateCall",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1669,
              "src": "917:16:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithDelegateCall_$1669",
                "typeString": "contract WithDelegateCall"
              }
            },
            "id": 1671,
            "nodeType": "InheritanceSpecifier",
            "src": "917:16:11"
          }
        ],
        "contractDependencies": [
          1669
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1689,
        "linearizedBaseContracts": [
          1689,
          1669
        ],
        "name": "WithParentWithDelegateCall",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1679,
              "nodeType": "Block",
              "src": "990:5:11",
              "statements": []
            },
            "documentation": null,
            "id": 1680,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1676,
                    "name": "_e",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1673,
                    "src": "986:2:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1677,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1675,
                  "name": "WithDelegateCall",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1669,
                  "src": "969:16:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_WithDelegateCall_$1669_$",
                    "typeString": "type(contract WithDelegateCall)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "969:20:11"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1673,
                  "name": "_e",
                  "nodeType": "VariableDeclaration",
                  "scope": 1680,
                  "src": "950:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1672,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "950:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "949:12:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1678,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "990:0:11"
            },
            "scope": 1689,
            "src": "938:57:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1687,
              "nodeType": "Block",
              "src": "1043:46:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "57697468506172656e745769746844656c656761746543616c6c",
                    "id": 1685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1056:28:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1ca91b9bd4c1d4adb60ee5fecbdb977923c853cb1a0a4dff6ef68906c4ab5107",
                      "typeString": "literal_string \"WithParentWithDelegateCall\""
                    },
                    "value": "WithParentWithDelegateCall"
                  },
                  "functionReturnParameters": 1684,
                  "id": 1686,
                  "nodeType": "Return",
                  "src": "1049:35:11"
                }
              ]
            },
            "documentation": null,
            "id": 1688,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1681,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1011:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1683,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1688,
                  "src": "1035:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1682,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1035:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1034:8:11"
            },
            "scope": 1689,
            "src": "999:90:11",
            "stateMutability": "pure",
            "superFunction": 1668,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "878:213:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1716,
        "linearizedBaseContracts": [
          1716
        ],
        "name": "WithConstructorImplementation",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1691,
            "name": "value",
            "nodeType": "VariableDeclaration",
            "scope": 1716,
            "src": "1136:20:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1690,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1136:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1693,
            "name": "text",
            "nodeType": "VariableDeclaration",
            "scope": 1716,
            "src": "1160:18:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1692,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1160:6:11",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1714,
              "nodeType": "Block",
              "src": "1232:68:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1701,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1695,
                          "src": "1246:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1255:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1246:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1700,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3160,
                      "src": "1238:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1238:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1705,
                  "nodeType": "ExpressionStatement",
                  "src": "1238:19:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1706,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1691,
                      "src": "1263:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1707,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1695,
                      "src": "1271:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1263:14:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1709,
                  "nodeType": "ExpressionStatement",
                  "src": "1263:14:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1710,
                      "name": "text",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1693,
                      "src": "1283:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1711,
                      "name": "_text",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1697,
                      "src": "1290:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1283:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1713,
                  "nodeType": "ExpressionStatement",
                  "src": "1283:12:11"
                }
              ]
            },
            "documentation": null,
            "id": 1715,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1695,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 1715,
                  "src": "1195:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1694,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1195:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1697,
                  "name": "_text",
                  "nodeType": "VariableDeclaration",
                  "scope": 1715,
                  "src": "1211:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1696,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1211:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1194:30:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1699,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1232:0:11"
            },
            "scope": 1716,
            "src": "1183:117:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "1093:209:11"
      }
    ],
    "src": "0:1303:11"
  },
  "legacyAST": {
    "absolutePath": "/Users/yoonjae/WebstormProjects/zos/packages/lib/contracts/mocks/Invalid.sol",
    "exportedSymbols": {
      "WithConstructor": [
        1601
      ],
      "WithConstructorImplementation": [
        1716
      ],
      "WithDelegateCall": [
        1669
      ],
      "WithFailingConstructor": [
        1610
      ],
      "WithParentWithDelegateCall": [
        1689
      ],
      "WithParentWithSelfDestruct": [
        1643
      ],
      "WithSelfDestruct": [
        1632
      ]
    },
    "id": 1717,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1582,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1601,
        "linearizedBaseContracts": [
          1601
        ],
        "name": "WithConstructor",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1584,
            "name": "value",
            "nodeType": "VariableDeclaration",
            "scope": 1601,
            "src": "55:20:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1583,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "55:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1591,
              "nodeType": "Block",
              "src": "101:21:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1587,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1584,
                      "src": "107:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "3432",
                      "id": 1588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "115:2:11",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_42_by_1",
                        "typeString": "int_const 42"
                      },
                      "value": "42"
                    },
                    "src": "107:10:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1590,
                  "nodeType": "ExpressionStatement",
                  "src": "107:10:11"
                }
              ]
            },
            "documentation": null,
            "id": 1592,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1585,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "91:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1586,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "101:0:11"
            },
            "scope": 1601,
            "src": "80:42:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1599,
              "nodeType": "Block",
              "src": "170:35:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "57697468436f6e7374727563746f72",
                    "id": 1597,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "183:17:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_31a3b5169da5035c08d9b25caf8dc3b126287039d931b211746db94a5f9527fc",
                      "typeString": "literal_string \"WithConstructor\""
                    },
                    "value": "WithConstructor"
                  },
                  "functionReturnParameters": 1596,
                  "id": 1598,
                  "nodeType": "Return",
                  "src": "176:24:11"
                }
              ]
            },
            "documentation": null,
            "id": 1600,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1593,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "138:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1596,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1595,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1600,
                  "src": "162:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1594,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "162:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "161:8:11"
            },
            "scope": 1601,
            "src": "126:79:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "26:181:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1610,
        "linearizedBaseContracts": [
          1610
        ],
        "name": "WithFailingConstructor",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1608,
              "nodeType": "Block",
              "src": "266:24:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "66616c7365",
                        "id": 1605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "279:5:11",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1604,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3146,
                      "src": "272:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "272:13:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1607,
                  "nodeType": "ExpressionStatement",
                  "src": "272:13:11"
                }
              ]
            },
            "documentation": null,
            "id": 1609,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1602,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "256:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1603,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "266:0:11"
            },
            "scope": 1610,
            "src": "245:45:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "209:83:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1632,
        "linearizedBaseContracts": [
          1632
        ],
        "name": "WithSelfDestruct",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1612,
            "name": "value",
            "nodeType": "VariableDeclaration",
            "scope": 1632,
            "src": "324:20:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1611,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "324:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1622,
              "nodeType": "Block",
              "src": "370:51:11",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 1615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "380:4:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "falseBody": null,
                  "id": 1621,
                  "nodeType": "IfStatement",
                  "src": "376:40:11",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1617,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3157,
                            "src": "405:3:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 1618,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "405:10:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1616,
                        "name": "selfdestruct",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3165,
                        "src": "392:12:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$",
                          "typeString": "function (address)"
                        }
                      },
                      "id": 1619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "392:24:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$__$",
                        "typeString": "tuple()"
                      }
                    },
                    "id": 1620,
                    "nodeType": "ExpressionStatement",
                    "src": "392:24:11"
                  }
                }
              ]
            },
            "documentation": null,
            "id": 1623,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1613,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "360:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1614,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "370:0:11"
            },
            "scope": 1632,
            "src": "349:72:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1630,
              "nodeType": "Block",
              "src": "469:36:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "5769746853656c664465737472756374",
                    "id": 1628,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "482:18:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_58a0d53a66d046d020d11a8545600304cc361abba7cf227ae045d15251087ec7",
                      "typeString": "literal_string \"WithSelfDestruct\""
                    },
                    "value": "WithSelfDestruct"
                  },
                  "functionReturnParameters": 1627,
                  "id": 1629,
                  "nodeType": "Return",
                  "src": "475:25:11"
                }
              ]
            },
            "documentation": null,
            "id": 1631,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1624,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "437:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1626,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1631,
                  "src": "461:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1625,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "461:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "460:8:11"
            },
            "scope": 1632,
            "src": "425:80:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "294:213:11"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1633,
              "name": "WithSelfDestruct",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1632,
              "src": "548:16:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithSelfDestruct_$1632",
                "typeString": "contract WithSelfDestruct"
              }
            },
            "id": 1634,
            "nodeType": "InheritanceSpecifier",
            "src": "548:16:11"
          }
        ],
        "contractDependencies": [
          1632
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1643,
        "linearizedBaseContracts": [
          1643,
          1632
        ],
        "name": "WithParentWithSelfDestruct",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1641,
              "nodeType": "Block",
              "src": "613:46:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "57697468506172656e745769746853656c664465737472756374",
                    "id": 1639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "626:28:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_0833173257b60f10ec48eaae9ba9300579d05c0505fe51a454ef724750aca66e",
                      "typeString": "literal_string \"WithParentWithSelfDestruct\""
                    },
                    "value": "WithParentWithSelfDestruct"
                  },
                  "functionReturnParameters": 1638,
                  "id": 1640,
                  "nodeType": "Return",
                  "src": "619:35:11"
                }
              ]
            },
            "documentation": null,
            "id": 1642,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1635,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "581:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1637,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1642,
                  "src": "605:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1636,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "605:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "604:8:11"
            },
            "scope": 1643,
            "src": "569:90:11",
            "stateMutability": "pure",
            "superFunction": 1631,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "509:152:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1669,
        "linearizedBaseContracts": [
          1669
        ],
        "name": "WithDelegateCall",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1659,
              "nodeType": "Block",
              "src": "724:64:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "6b696c6c2829",
                                    "id": 1653,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "771:8:11",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_41c0e1b5eba5f1ef69db2e30c1ec7d6e0a5f3d39332543a8a99d1165e460a49e",
                                      "typeString": "literal_string \"kill()\""
                                    },
                                    "value": "kill()"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_41c0e1b5eba5f1ef69db2e30c1ec7d6e0a5f3d39332543a8a99d1165e460a49e",
                                      "typeString": "literal_string \"kill()\""
                                    }
                                  ],
                                  "id": 1652,
                                  "name": "keccak256",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3151,
                                  "src": "761:9:11",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                    "typeString": "function () pure returns (bytes32)"
                                  }
                                },
                                "id": 1654,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "761:19:11",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "id": 1651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "754:6:11",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 1655,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "754:27:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1649,
                            "name": "_e",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1645,
                            "src": "738:2:11",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "id": 1650,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "delegatecall",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "738:15:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_baredelegatecall_nonpayable$__$returns$_t_bool_$",
                            "typeString": "function () returns (bool)"
                          }
                        },
                        "id": 1656,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "738:44:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1648,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3160,
                      "src": "730:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "730:53:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1658,
                  "nodeType": "ExpressionStatement",
                  "src": "730:53:11"
                }
              ]
            },
            "documentation": null,
            "id": 1660,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1646,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1645,
                  "name": "_e",
                  "nodeType": "VariableDeclaration",
                  "scope": 1660,
                  "src": "705:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1644,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "705:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "704:12:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1647,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "724:0:11"
            },
            "scope": 1669,
            "src": "693:95:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1667,
              "nodeType": "Block",
              "src": "838:36:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "5769746844656c656761746543616c6c",
                    "id": 1665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "851:18:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_5eb8413c60a8c94fd9d5088e6adefcd78aa6bd919916905a488ee2152e303dd3",
                      "typeString": "literal_string \"WithDelegateCall\""
                    },
                    "value": "WithDelegateCall"
                  },
                  "functionReturnParameters": 1664,
                  "id": 1666,
                  "nodeType": "Return",
                  "src": "844:25:11"
                }
              ]
            },
            "documentation": null,
            "id": 1668,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1661,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "806:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1664,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1663,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1668,
                  "src": "830:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1662,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "830:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "829:8:11"
            },
            "scope": 1669,
            "src": "794:80:11",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "663:213:11"
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 1670,
              "name": "WithDelegateCall",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1669,
              "src": "917:16:11",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_WithDelegateCall_$1669",
                "typeString": "contract WithDelegateCall"
              }
            },
            "id": 1671,
            "nodeType": "InheritanceSpecifier",
            "src": "917:16:11"
          }
        ],
        "contractDependencies": [
          1669
        ],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1689,
        "linearizedBaseContracts": [
          1689,
          1669
        ],
        "name": "WithParentWithDelegateCall",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1679,
              "nodeType": "Block",
              "src": "990:5:11",
              "statements": []
            },
            "documentation": null,
            "id": 1680,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1676,
                    "name": "_e",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1673,
                    "src": "986:2:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1677,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1675,
                  "name": "WithDelegateCall",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1669,
                  "src": "969:16:11",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_WithDelegateCall_$1669_$",
                    "typeString": "type(contract WithDelegateCall)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "969:20:11"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1674,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1673,
                  "name": "_e",
                  "nodeType": "VariableDeclaration",
                  "scope": 1680,
                  "src": "950:10:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1672,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "950:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "949:12:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1678,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "990:0:11"
            },
            "scope": 1689,
            "src": "938:57:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1687,
              "nodeType": "Block",
              "src": "1043:46:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "57697468506172656e745769746844656c656761746543616c6c",
                    "id": 1685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "string",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1056:28:11",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_stringliteral_1ca91b9bd4c1d4adb60ee5fecbdb977923c853cb1a0a4dff6ef68906c4ab5107",
                      "typeString": "literal_string \"WithParentWithDelegateCall\""
                    },
                    "value": "WithParentWithDelegateCall"
                  },
                  "functionReturnParameters": 1684,
                  "id": 1686,
                  "nodeType": "Return",
                  "src": "1049:35:11"
                }
              ]
            },
            "documentation": null,
            "id": 1688,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "say",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1681,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1011:2:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1683,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1688,
                  "src": "1035:6:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1682,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1035:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1034:8:11"
            },
            "scope": 1689,
            "src": "999:90:11",
            "stateMutability": "pure",
            "superFunction": 1668,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "878:213:11"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": null,
        "fullyImplemented": true,
        "id": 1716,
        "linearizedBaseContracts": [
          1716
        ],
        "name": "WithConstructorImplementation",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": false,
            "id": 1691,
            "name": "value",
            "nodeType": "VariableDeclaration",
            "scope": 1716,
            "src": "1136:20:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 1690,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1136:7:11",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 1693,
            "name": "text",
            "nodeType": "VariableDeclaration",
            "scope": 1716,
            "src": "1160:18:11",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 1692,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1160:6:11",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1714,
              "nodeType": "Block",
              "src": "1232:68:11",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1703,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1701,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1695,
                          "src": "1246:6:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1702,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "1255:1:11",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "1246:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1700,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3160,
                        3161
                      ],
                      "referencedDeclaration": 3160,
                      "src": "1238:7:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 1704,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1238:19:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1705,
                  "nodeType": "ExpressionStatement",
                  "src": "1238:19:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1706,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1691,
                      "src": "1263:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1707,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1695,
                      "src": "1271:6:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1263:14:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1709,
                  "nodeType": "ExpressionStatement",
                  "src": "1263:14:11"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1710,
                      "name": "text",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1693,
                      "src": "1283:4:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1711,
                      "name": "_text",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1697,
                      "src": "1290:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1283:12:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 1713,
                  "nodeType": "ExpressionStatement",
                  "src": "1283:12:11"
                }
              ]
            },
            "documentation": null,
            "id": 1715,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1695,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 1715,
                  "src": "1195:14:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1694,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1195:7:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1697,
                  "name": "_text",
                  "nodeType": "VariableDeclaration",
                  "scope": 1715,
                  "src": "1211:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1696,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1211:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1194:30:11"
            },
            "payable": false,
            "returnParameters": {
              "id": 1699,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1232:0:11"
            },
            "scope": 1716,
            "src": "1183:117:11",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          }
        ],
        "scope": 1717,
        "src": "1093:209:11"
      }
    ],
    "src": "0:1303:11"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2019-02-15T10:15:15.371Z"
}