// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: c_compiler -c %s -I "common" -o %t3.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o %t3.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"
#ifdef __cplusplus

struct  S3350C4_nt  {
  int s3350c4f0[2];
  void  mf3350c4(); // _ZN10S3350C4_nt8mf3350c4Ev
};
//SIG(-1 S3350C4_nt) C1{ m Fi[2]}


void  S3350C4_nt ::mf3350c4(){}

//skip512 S3350C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C3_nt  {
  int s3350c3f0;
  __tsi64 s3350c3f1;
  void *s3350c3f2[4];
  int s3350c3f3[2];
  void *s3350c3f4;
  ::S3350C4_nt s3350c3f5;
  void *s3350c3f6[2];
  virtual  ~S3350C3_nt(); // _ZN10S3350C3_ntD1Ev
  virtual void  v6(); // _ZN10S3350C3_nt2v6Ev
  virtual void  v7(); // _ZN10S3350C3_nt2v7Ev
  virtual void  v8(); // _ZN10S3350C3_nt2v8Ev
  virtual void  v9(); // _ZN10S3350C3_nt2v9Ev
  virtual void  v10(); // _ZN10S3350C3_nt3v10Ev
  virtual void  v11(); // _ZN10S3350C3_nt3v11Ev
  virtual void  v12(); // _ZN10S3350C3_nt3v12Ev
  virtual void  v13(); // _ZN10S3350C3_nt3v13Ev
  virtual void  v14(); // _ZN10S3350C3_nt3v14Ev
  virtual void  v15(); // _ZN10S3350C3_nt3v15Ev
  virtual void  v16(); // _ZN10S3350C3_nt3v16Ev
  virtual void  v17(); // _ZN10S3350C3_nt3v17Ev
  virtual void  v18(); // _ZN10S3350C3_nt3v18Ev
  virtual void  v19(); // _ZN10S3350C3_nt3v19Ev
  virtual void  v20(); // _ZN10S3350C3_nt3v20Ev
  virtual void  v21(); // _ZN10S3350C3_nt3v21Ev
  virtual void  v22(); // _ZN10S3350C3_nt3v22Ev
  virtual void  v23(); // _ZN10S3350C3_nt3v23Ev
  virtual void  v24(); // _ZN10S3350C3_nt3v24Ev
  virtual void  v25(); // _ZN10S3350C3_nt3v25Ev
  virtual void  v26(); // _ZN10S3350C3_nt3v26Ev
  virtual void  v27(); // _ZN10S3350C3_nt3v27Ev
  virtual void  v28(); // _ZN10S3350C3_nt3v28Ev
  virtual void  v29(); // _ZN10S3350C3_nt3v29Ev
  virtual void  v30(); // _ZN10S3350C3_nt3v30Ev
  virtual void  v31(); // _ZN10S3350C3_nt3v31Ev
  virtual void  v32(); // _ZN10S3350C3_nt3v32Ev
  virtual void  v33(); // _ZN10S3350C3_nt3v33Ev
  virtual void  v34(); // _ZN10S3350C3_nt3v34Ev
  virtual void  v35(); // _ZN10S3350C3_nt3v35Ev
  virtual void  v36(); // _ZN10S3350C3_nt3v36Ev
  virtual void  v37(); // _ZN10S3350C3_nt3v37Ev
  virtual void  v38(); // _ZN10S3350C3_nt3v38Ev
  virtual void  v39(); // _ZN10S3350C3_nt3v39Ev
  virtual void  v40(); // _ZN10S3350C3_nt3v40Ev
  virtual void  v41(); // _ZN10S3350C3_nt3v41Ev
  virtual void  v42(); // _ZN10S3350C3_nt3v42Ev
  virtual void  v43(); // _ZN10S3350C3_nt3v43Ev
  virtual void  v44(); // _ZN10S3350C3_nt3v44Ev
  virtual void  v45(); // _ZN10S3350C3_nt3v45Ev
  virtual void  v46(); // _ZN10S3350C3_nt3v46Ev
  virtual void  v47(); // _ZN10S3350C3_nt3v47Ev
  virtual void  v48(); // _ZN10S3350C3_nt3v48Ev
  virtual void  v49(); // _ZN10S3350C3_nt3v49Ev
  virtual void  v50(); // _ZN10S3350C3_nt3v50Ev
  virtual void  v51(); // _ZN10S3350C3_nt3v51Ev
  virtual void  v52(); // _ZN10S3350C3_nt3v52Ev
  virtual void  v53(); // _ZN10S3350C3_nt3v53Ev
  virtual void  v54(); // _ZN10S3350C3_nt3v54Ev
  virtual void  v55(); // _ZN10S3350C3_nt3v55Ev
  virtual void  v56(); // _ZN10S3350C3_nt3v56Ev
  virtual void  v57(); // _ZN10S3350C3_nt3v57Ev
  virtual void  v58(); // _ZN10S3350C3_nt3v58Ev
  virtual void  v59(); // _ZN10S3350C3_nt3v59Ev
  virtual void  v60(); // _ZN10S3350C3_nt3v60Ev
  virtual void  v61(); // _ZN10S3350C3_nt3v61Ev
  virtual void  v62(); // _ZN10S3350C3_nt3v62Ev
  virtual void  v63(); // _ZN10S3350C3_nt3v63Ev
  virtual void  v64(); // _ZN10S3350C3_nt3v64Ev
  virtual void  v65(); // _ZN10S3350C3_nt3v65Ev
  virtual void  v66(); // _ZN10S3350C3_nt3v66Ev
  virtual void  v67(); // _ZN10S3350C3_nt3v67Ev
  virtual void  v68(); // _ZN10S3350C3_nt3v68Ev
  virtual void  v69(); // _ZN10S3350C3_nt3v69Ev
  S3350C3_nt(); // tgen
};
//SIG(-1 S3350C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3350C3_nt ::~S3350C3_nt(){ note_dtor("S3350C3_nt", this);}
void  S3350C3_nt ::v6(){vfunc_called(this, "_ZN10S3350C3_nt2v6Ev");}
void  S3350C3_nt ::v7(){vfunc_called(this, "_ZN10S3350C3_nt2v7Ev");}
void  S3350C3_nt ::v8(){vfunc_called(this, "_ZN10S3350C3_nt2v8Ev");}
void  S3350C3_nt ::v9(){vfunc_called(this, "_ZN10S3350C3_nt2v9Ev");}
void  S3350C3_nt ::v10(){vfunc_called(this, "_ZN10S3350C3_nt3v10Ev");}
void  S3350C3_nt ::v11(){vfunc_called(this, "_ZN10S3350C3_nt3v11Ev");}
void  S3350C3_nt ::v12(){vfunc_called(this, "_ZN10S3350C3_nt3v12Ev");}
void  S3350C3_nt ::v13(){vfunc_called(this, "_ZN10S3350C3_nt3v13Ev");}
void  S3350C3_nt ::v14(){vfunc_called(this, "_ZN10S3350C3_nt3v14Ev");}
void  S3350C3_nt ::v15(){vfunc_called(this, "_ZN10S3350C3_nt3v15Ev");}
void  S3350C3_nt ::v16(){vfunc_called(this, "_ZN10S3350C3_nt3v16Ev");}
void  S3350C3_nt ::v17(){vfunc_called(this, "_ZN10S3350C3_nt3v17Ev");}
void  S3350C3_nt ::v18(){vfunc_called(this, "_ZN10S3350C3_nt3v18Ev");}
void  S3350C3_nt ::v19(){vfunc_called(this, "_ZN10S3350C3_nt3v19Ev");}
void  S3350C3_nt ::v20(){vfunc_called(this, "_ZN10S3350C3_nt3v20Ev");}
void  S3350C3_nt ::v21(){vfunc_called(this, "_ZN10S3350C3_nt3v21Ev");}
void  S3350C3_nt ::v22(){vfunc_called(this, "_ZN10S3350C3_nt3v22Ev");}
void  S3350C3_nt ::v23(){vfunc_called(this, "_ZN10S3350C3_nt3v23Ev");}
void  S3350C3_nt ::v24(){vfunc_called(this, "_ZN10S3350C3_nt3v24Ev");}
void  S3350C3_nt ::v25(){vfunc_called(this, "_ZN10S3350C3_nt3v25Ev");}
void  S3350C3_nt ::v26(){vfunc_called(this, "_ZN10S3350C3_nt3v26Ev");}
void  S3350C3_nt ::v27(){vfunc_called(this, "_ZN10S3350C3_nt3v27Ev");}
void  S3350C3_nt ::v28(){vfunc_called(this, "_ZN10S3350C3_nt3v28Ev");}
void  S3350C3_nt ::v29(){vfunc_called(this, "_ZN10S3350C3_nt3v29Ev");}
void  S3350C3_nt ::v30(){vfunc_called(this, "_ZN10S3350C3_nt3v30Ev");}
void  S3350C3_nt ::v31(){vfunc_called(this, "_ZN10S3350C3_nt3v31Ev");}
void  S3350C3_nt ::v32(){vfunc_called(this, "_ZN10S3350C3_nt3v32Ev");}
void  S3350C3_nt ::v33(){vfunc_called(this, "_ZN10S3350C3_nt3v33Ev");}
void  S3350C3_nt ::v34(){vfunc_called(this, "_ZN10S3350C3_nt3v34Ev");}
void  S3350C3_nt ::v35(){vfunc_called(this, "_ZN10S3350C3_nt3v35Ev");}
void  S3350C3_nt ::v36(){vfunc_called(this, "_ZN10S3350C3_nt3v36Ev");}
void  S3350C3_nt ::v37(){vfunc_called(this, "_ZN10S3350C3_nt3v37Ev");}
void  S3350C3_nt ::v38(){vfunc_called(this, "_ZN10S3350C3_nt3v38Ev");}
void  S3350C3_nt ::v39(){vfunc_called(this, "_ZN10S3350C3_nt3v39Ev");}
void  S3350C3_nt ::v40(){vfunc_called(this, "_ZN10S3350C3_nt3v40Ev");}
void  S3350C3_nt ::v41(){vfunc_called(this, "_ZN10S3350C3_nt3v41Ev");}
void  S3350C3_nt ::v42(){vfunc_called(this, "_ZN10S3350C3_nt3v42Ev");}
void  S3350C3_nt ::v43(){vfunc_called(this, "_ZN10S3350C3_nt3v43Ev");}
void  S3350C3_nt ::v44(){vfunc_called(this, "_ZN10S3350C3_nt3v44Ev");}
void  S3350C3_nt ::v45(){vfunc_called(this, "_ZN10S3350C3_nt3v45Ev");}
void  S3350C3_nt ::v46(){vfunc_called(this, "_ZN10S3350C3_nt3v46Ev");}
void  S3350C3_nt ::v47(){vfunc_called(this, "_ZN10S3350C3_nt3v47Ev");}
void  S3350C3_nt ::v48(){vfunc_called(this, "_ZN10S3350C3_nt3v48Ev");}
void  S3350C3_nt ::v49(){vfunc_called(this, "_ZN10S3350C3_nt3v49Ev");}
void  S3350C3_nt ::v50(){vfunc_called(this, "_ZN10S3350C3_nt3v50Ev");}
void  S3350C3_nt ::v51(){vfunc_called(this, "_ZN10S3350C3_nt3v51Ev");}
void  S3350C3_nt ::v52(){vfunc_called(this, "_ZN10S3350C3_nt3v52Ev");}
void  S3350C3_nt ::v53(){vfunc_called(this, "_ZN10S3350C3_nt3v53Ev");}
void  S3350C3_nt ::v54(){vfunc_called(this, "_ZN10S3350C3_nt3v54Ev");}
void  S3350C3_nt ::v55(){vfunc_called(this, "_ZN10S3350C3_nt3v55Ev");}
void  S3350C3_nt ::v56(){vfunc_called(this, "_ZN10S3350C3_nt3v56Ev");}
void  S3350C3_nt ::v57(){vfunc_called(this, "_ZN10S3350C3_nt3v57Ev");}
void  S3350C3_nt ::v58(){vfunc_called(this, "_ZN10S3350C3_nt3v58Ev");}
void  S3350C3_nt ::v59(){vfunc_called(this, "_ZN10S3350C3_nt3v59Ev");}
void  S3350C3_nt ::v60(){vfunc_called(this, "_ZN10S3350C3_nt3v60Ev");}
void  S3350C3_nt ::v61(){vfunc_called(this, "_ZN10S3350C3_nt3v61Ev");}
void  S3350C3_nt ::v62(){vfunc_called(this, "_ZN10S3350C3_nt3v62Ev");}
void  S3350C3_nt ::v63(){vfunc_called(this, "_ZN10S3350C3_nt3v63Ev");}
void  S3350C3_nt ::v64(){vfunc_called(this, "_ZN10S3350C3_nt3v64Ev");}
void  S3350C3_nt ::v65(){vfunc_called(this, "_ZN10S3350C3_nt3v65Ev");}
void  S3350C3_nt ::v66(){vfunc_called(this, "_ZN10S3350C3_nt3v66Ev");}
void  S3350C3_nt ::v67(){vfunc_called(this, "_ZN10S3350C3_nt3v67Ev");}
void  S3350C3_nt ::v68(){vfunc_called(this, "_ZN10S3350C3_nt3v68Ev");}
void  S3350C3_nt ::v69(){vfunc_called(this, "_ZN10S3350C3_nt3v69Ev");}
S3350C3_nt ::S3350C3_nt(){ note_ctor("S3350C3_nt", this);} // tgen

//skip512 S3350C3_nt

#else // __cplusplus

extern void _ZN10S3350C3_ntC1Ev();
extern void _ZN10S3350C3_ntD1Ev();
Name_Map name_map_S3350C3_nt[] = {
  NSPAIR(_ZN10S3350C3_ntC1Ev),
  NSPAIR(_ZN10S3350C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3350C3_nt[];
extern void _ZN10S3350C3_ntD1Ev();
extern void _ZN10S3350C3_ntD0Ev();
extern void _ZN10S3350C3_nt2v6Ev();
extern void _ZN10S3350C3_nt2v7Ev();
extern void _ZN10S3350C3_nt2v8Ev();
extern void _ZN10S3350C3_nt2v9Ev();
extern void _ZN10S3350C3_nt3v10Ev();
extern void _ZN10S3350C3_nt3v11Ev();
extern void _ZN10S3350C3_nt3v12Ev();
extern void _ZN10S3350C3_nt3v13Ev();
extern void _ZN10S3350C3_nt3v14Ev();
extern void _ZN10S3350C3_nt3v15Ev();
extern void _ZN10S3350C3_nt3v16Ev();
extern void _ZN10S3350C3_nt3v17Ev();
extern void _ZN10S3350C3_nt3v18Ev();
extern void _ZN10S3350C3_nt3v19Ev();
extern void _ZN10S3350C3_nt3v20Ev();
extern void _ZN10S3350C3_nt3v21Ev();
extern void _ZN10S3350C3_nt3v22Ev();
extern void _ZN10S3350C3_nt3v23Ev();
extern void _ZN10S3350C3_nt3v24Ev();
extern void _ZN10S3350C3_nt3v25Ev();
extern void _ZN10S3350C3_nt3v26Ev();
extern void _ZN10S3350C3_nt3v27Ev();
extern void _ZN10S3350C3_nt3v28Ev();
extern void _ZN10S3350C3_nt3v29Ev();
extern void _ZN10S3350C3_nt3v30Ev();
extern void _ZN10S3350C3_nt3v31Ev();
extern void _ZN10S3350C3_nt3v32Ev();
extern void _ZN10S3350C3_nt3v33Ev();
extern void _ZN10S3350C3_nt3v34Ev();
extern void _ZN10S3350C3_nt3v35Ev();
extern void _ZN10S3350C3_nt3v36Ev();
extern void _ZN10S3350C3_nt3v37Ev();
extern void _ZN10S3350C3_nt3v38Ev();
extern void _ZN10S3350C3_nt3v39Ev();
extern void _ZN10S3350C3_nt3v40Ev();
extern void _ZN10S3350C3_nt3v41Ev();
extern void _ZN10S3350C3_nt3v42Ev();
extern void _ZN10S3350C3_nt3v43Ev();
extern void _ZN10S3350C3_nt3v44Ev();
extern void _ZN10S3350C3_nt3v45Ev();
extern void _ZN10S3350C3_nt3v46Ev();
extern void _ZN10S3350C3_nt3v47Ev();
extern void _ZN10S3350C3_nt3v48Ev();
extern void _ZN10S3350C3_nt3v49Ev();
extern void _ZN10S3350C3_nt3v50Ev();
extern void _ZN10S3350C3_nt3v51Ev();
extern void _ZN10S3350C3_nt3v52Ev();
extern void _ZN10S3350C3_nt3v53Ev();
extern void _ZN10S3350C3_nt3v54Ev();
extern void _ZN10S3350C3_nt3v55Ev();
extern void _ZN10S3350C3_nt3v56Ev();
extern void _ZN10S3350C3_nt3v57Ev();
extern void _ZN10S3350C3_nt3v58Ev();
extern void _ZN10S3350C3_nt3v59Ev();
extern void _ZN10S3350C3_nt3v60Ev();
extern void _ZN10S3350C3_nt3v61Ev();
extern void _ZN10S3350C3_nt3v62Ev();
extern void _ZN10S3350C3_nt3v63Ev();
extern void _ZN10S3350C3_nt3v64Ev();
extern void _ZN10S3350C3_nt3v65Ev();
extern void _ZN10S3350C3_nt3v66Ev();
extern void _ZN10S3350C3_nt3v67Ev();
extern void _ZN10S3350C3_nt3v68Ev();
extern void _ZN10S3350C3_nt3v69Ev();
static  VTBL_ENTRY vtc_S3350C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3350C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3350C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI10S3350C3_nt[];
VTBL_ENTRY *P__ZTI10S3350C3_nt = _ZTI10S3350C3_nt; 
extern  VTBL_ENTRY _ZTV10S3350C3_nt[];
Class_Descriptor cd_S3350C3_nt = {  "S3350C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3350C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S3350C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3350C3_nt),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C7_nt  {
  void *s3350c7f0;
  int s3350c7f1[2];
  void  mf3350c7(); // _ZN10S3350C7_nt8mf3350c7Ev
};
//SIG(-1 S3350C7_nt) C1{ m Fp Fi[2]}


void  S3350C7_nt ::mf3350c7(){}

//skip512 S3350C7_nt

#else // __cplusplus

Class_Descriptor cd_S3350C7_nt = {  "S3350C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C6_nt  : S3350C7_nt {
};
//SIG(-1 S3350C6_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S3350C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S3350C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S3350C6_nt = {  "S3350C6_nt", // class name
  bases_S3350C6_nt, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C5_nt  : S3350C6_nt {
};
//SIG(-1 S3350C5_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S3350C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S3350C6_nt;
static Base_Class bases_S3350C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3350C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C8_nt  {
  int s3350c8f0;
  void  mf3350c8(); // _ZN10S3350C8_nt8mf3350c8Ev
};
//SIG(-1 S3350C8_nt) C1{ m Fi}


void  S3350C8_nt ::mf3350c8(){}

//skip512 S3350C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3350C8_nt[];
VTBL_ENTRY *P__ZTI10S3350C8_nt = _ZTI10S3350C8_nt; 
Class_Descriptor cd_S3350C8_nt = {  "S3350C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S3350C8_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C12  : S3350C7_nt {
};
//SIG(-1 S3350C12) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3350C12()
{
  extern Class_Descriptor cd_S3350C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3350C12, buf);
    S3350C12 &lv = *(new (buf) S3350C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3350C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C12)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S3350C12");
    test_class_info(&lv, &cd_S3350C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C12(Test_S3350C12, "S3350C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S3350C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S3350C12 = {  "S3350C12", // class name
  bases_S3350C12, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C11  : S3350C12 {
};
//SIG(-1 S3350C11) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3350C11()
{
  extern Class_Descriptor cd_S3350C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3350C11, buf);
    S3350C11 &lv = *(new (buf) S3350C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3350C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C11)");
    check_base_class_offset(lv, (S3350C7_nt*)(S3350C12*), 0, "S3350C11");
    check_base_class_offset(lv, (S3350C12*), 0, "S3350C11");
    test_class_info(&lv, &cd_S3350C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C11(Test_S3350C11, "S3350C11", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S3350C12;
static Base_Class bases_S3350C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3350C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S3350C11 = {  "S3350C11", // class name
  bases_S3350C11, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C13_nt  {
  int s3350c13f0[3];
  void  mf3350c13(); // _ZN11S3350C13_nt9mf3350c13Ev
};
//SIG(-1 S3350C13_nt) C1{ m Fi[3]}


void  S3350C13_nt ::mf3350c13(){}

//skip512 S3350C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C18  : S3350C7_nt {
};
//SIG(-1 S3350C18) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3350C18()
{
  extern Class_Descriptor cd_S3350C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3350C18, buf);
    S3350C18 &lv = *(new (buf) S3350C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3350C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C18)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S3350C18");
    test_class_info(&lv, &cd_S3350C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C18(Test_S3350C18, "S3350C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S3350C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S3350C18 = {  "S3350C18", // class name
  bases_S3350C18, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C17  : S3350C18 {
};
//SIG(-1 S3350C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3350C17()
{
  extern Class_Descriptor cd_S3350C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3350C17, buf);
    S3350C17 &lv = *(new (buf) S3350C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3350C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C17)");
    check_base_class_offset(lv, (S3350C7_nt*)(S3350C18*), 0, "S3350C17");
    check_base_class_offset(lv, (S3350C18*), 0, "S3350C17");
    test_class_info(&lv, &cd_S3350C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C17(Test_S3350C17, "S3350C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S3350C18;
static Base_Class bases_S3350C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3350C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S3350C17 = {  "S3350C17", // class name
  bases_S3350C17, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C2_nt  : S3350C3_nt {
  ::S3350C5_nt s3350c2f0;
  ::S3350C5_nt s3350c2f1;
  ::S3350C8_nt s3350c2f2;
  int s3350c2f3;
  char s3350c2f4[4];
  void *s3350c2f5[2];
  ::S3350C5_nt s3350c2f6;
  unsigned int s3350c2f7:1;
  unsigned int s3350c2f8:1;
  unsigned int s3350c2f9:1;
  unsigned int s3350c2f10:1;
  unsigned int s3350c2f11:1;
  unsigned int s3350c2f12:1;
  unsigned int s3350c2f13:1;
  unsigned int s3350c2f14:1;
  unsigned int s3350c2f15:1;
  unsigned int s3350c2f16:1;
  unsigned int s3350c2f17:1;
  unsigned int s3350c2f18:1;
  unsigned int s3350c2f19:1;
  unsigned int s3350c2f20:1;
  unsigned int s3350c2f21:1;
  unsigned int s3350c2f22:1;
  unsigned int s3350c2f23:1;
  unsigned int s3350c2f24:1;
  unsigned int s3350c2f25:1;
  unsigned int s3350c2f26:1;
  unsigned int s3350c2f27:1;
  unsigned int s3350c2f28:1;
  unsigned int s3350c2f29:1;
  unsigned int s3350c2f30:1;
  unsigned int s3350c2f31:1;
  unsigned int s3350c2f32:1;
  unsigned int s3350c2f33:1;
  unsigned int s3350c2f34:1;
  unsigned int s3350c2f35:1;
  unsigned int s3350c2f36:1;
  unsigned int s3350c2f37:1;
  unsigned int s3350c2f38:1;
  unsigned int s3350c2f39:1;
  unsigned int s3350c2f40:1;
  unsigned int s3350c2f41:1;
  unsigned int s3350c2f42:1;
  unsigned int s3350c2f43:1;
  unsigned int s3350c2f44:1;
  unsigned int s3350c2f45:1;
  unsigned int s3350c2f46:1;
  unsigned int s3350c2f47:1;
  unsigned int s3350c2f48:1;
  unsigned int s3350c2f49:1;
  unsigned int s3350c2f50:1;
  unsigned int s3350c2f51:1;
  unsigned int s3350c2f52:1;
  unsigned int s3350c2f53:1;
  unsigned int s3350c2f54:1;
  unsigned int s3350c2f55:1;
  unsigned int s3350c2f56:1;
  unsigned int s3350c2f57:1;
  unsigned int s3350c2f58:1;
  unsigned int s3350c2f59:1;
  unsigned int s3350c2f60:1;
  unsigned int s3350c2f61:1;
  unsigned int s3350c2f62:1;
  unsigned int s3350c2f63:1;
  unsigned int s3350c2f64:1;
  unsigned int s3350c2f65:1;
  unsigned int s3350c2f66:1;
  unsigned int s3350c2f67:1;
  unsigned int s3350c2f68:1;
  unsigned int s3350c2f69:1;
  unsigned int s3350c2f70:1;
  unsigned int s3350c2f71:1;
  unsigned int s3350c2f72:1;
  unsigned int s3350c2f73:1;
  unsigned int s3350c2f74:1;
  unsigned int s3350c2f75:1;
  unsigned int s3350c2f76:1;
  unsigned int s3350c2f77:1;
  unsigned int s3350c2f78:1;
  unsigned int s3350c2f79:1;
  unsigned int s3350c2f80:1;
  unsigned int s3350c2f81:1;
  unsigned int s3350c2f82:1;
  unsigned int s3350c2f83:1;
  int s3350c2f84[5];
  void *s3350c2f85[2];
  int s3350c2f86[3];
  ::S3350C4_nt s3350c2f87;
  ::S3350C4_nt s3350c2f88;
  ::S3350C4_nt s3350c2f89;
  ::S3350C11 s3350c2f90;
  ::S3350C11 s3350c2f91;
  int s3350c2f92;
  void *s3350c2f93[2];
  ::S3350C13_nt s3350c2f94;
  ::S3350C13_nt s3350c2f95;
  ::S3350C13_nt s3350c2f96;
  ::S3350C13_nt s3350c2f97;
  void *s3350c2f98;
  ::S3350C4_nt s3350c2f99;
  ::S3350C11 s3350c2f100;
  ::S3350C13_nt s3350c2f101;
  ::S3350C13_nt s3350c2f102;
  int s3350c2f103;
  ::S3350C13_nt s3350c2f104;
  ::S3350C13_nt s3350c2f105;
  void *s3350c2f106;
  int s3350c2f107;
  char s3350c2f108;
  ::S3350C13_nt s3350c2f109;
  ::S3350C13_nt s3350c2f110;
  void *s3350c2f111;
  int s3350c2f112;
  void *s3350c2f113;
  ::S3350C11 s3350c2f114;
  ::S3350C17 s3350c2f115;
  ::S3350C17 s3350c2f116;
  virtual  ~S3350C2_nt(); // _ZN10S3350C2_ntD1Ev
  virtual void  v70(); // _ZN10S3350C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3350C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3350C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3350C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3350C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3350C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3350C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3350C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3350C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3350C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3350C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3350C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3350C2_nt3v82Ev
  virtual void  v83(); // _ZN10S3350C2_nt3v83Ev
  virtual void  v84(); // _ZN10S3350C2_nt3v84Ev
  virtual void  v85(); // _ZN10S3350C2_nt3v85Ev
  virtual void  v86(); // _ZN10S3350C2_nt3v86Ev
  virtual void  v87(); // _ZN10S3350C2_nt3v87Ev
  virtual void  v88(); // _ZN10S3350C2_nt3v88Ev
  virtual void  v89(); // _ZN10S3350C2_nt3v89Ev
  virtual void  v90(); // _ZN10S3350C2_nt3v90Ev
  virtual void  v91(); // _ZN10S3350C2_nt3v91Ev
  virtual void  v92(); // _ZN10S3350C2_nt3v92Ev
  virtual void  v93(); // _ZN10S3350C2_nt3v93Ev
  virtual void  v94(); // _ZN10S3350C2_nt3v94Ev
  virtual void  v95(); // _ZN10S3350C2_nt3v95Ev
  virtual void  v96(); // _ZN10S3350C2_nt3v96Ev
  virtual void  v97(); // _ZN10S3350C2_nt3v97Ev
  virtual void  v98(); // _ZN10S3350C2_nt3v98Ev
  virtual void  v99(); // _ZN10S3350C2_nt3v99Ev
  virtual void  v100(); // _ZN10S3350C2_nt4v100Ev
  virtual void  v101(); // _ZN10S3350C2_nt4v101Ev
  virtual void  v102(); // _ZN10S3350C2_nt4v102Ev
  virtual void  v103(); // _ZN10S3350C2_nt4v103Ev
  virtual void  v104(); // _ZN10S3350C2_nt4v104Ev
  virtual void  v105(); // _ZN10S3350C2_nt4v105Ev
  virtual void  v106(); // _ZN10S3350C2_nt4v106Ev
  virtual void  v107(); // _ZN10S3350C2_nt4v107Ev
  virtual void  v108(); // _ZN10S3350C2_nt4v108Ev
  virtual void  v109(); // _ZN10S3350C2_nt4v109Ev
  virtual void  v110(); // _ZN10S3350C2_nt4v110Ev
  virtual void  v111(); // _ZN10S3350C2_nt4v111Ev
  virtual void  v112(); // _ZN10S3350C2_nt4v112Ev
  virtual void  v113(); // _ZN10S3350C2_nt4v113Ev
  virtual void  v114(); // _ZN10S3350C2_nt4v114Ev
  virtual void  v115(); // _ZN10S3350C2_nt4v115Ev
  virtual void  v116(); // _ZN10S3350C2_nt4v116Ev
  virtual void  v117(); // _ZN10S3350C2_nt4v117Ev
  virtual void  v118(); // _ZN10S3350C2_nt4v118Ev
  virtual void  v119(); // _ZN10S3350C2_nt4v119Ev
  virtual void  v120(); // _ZN10S3350C2_nt4v120Ev
  virtual void  v121(); // _ZN10S3350C2_nt4v121Ev
  virtual void  v122(); // _ZN10S3350C2_nt4v122Ev
  virtual void  v123(); // _ZN10S3350C2_nt4v123Ev
  virtual void  v124(); // _ZN10S3350C2_nt4v124Ev
  virtual void  v125(); // _ZN10S3350C2_nt4v125Ev
  virtual void  v126(); // _ZN10S3350C2_nt4v126Ev
  virtual void  v127(); // _ZN10S3350C2_nt4v127Ev
  virtual void  v128(); // _ZN10S3350C2_nt4v128Ev
  virtual void  v129(); // _ZN10S3350C2_nt4v129Ev
  virtual void  v130(); // _ZN10S3350C2_nt4v130Ev
  virtual void  v131(); // _ZN10S3350C2_nt4v131Ev
  virtual void  v132(); // _ZN10S3350C2_nt4v132Ev
  virtual void  v133(); // _ZN10S3350C2_nt4v133Ev
  virtual void  v134(); // _ZN10S3350C2_nt4v134Ev
  virtual void  v135(); // _ZN10S3350C2_nt4v135Ev
  virtual void  v136(); // _ZN10S3350C2_nt4v136Ev
  virtual void  v137(); // _ZN10S3350C2_nt4v137Ev
  virtual void  v138(); // _ZN10S3350C2_nt4v138Ev
  virtual void  v139(); // _ZN10S3350C2_nt4v139Ev
  virtual void  v140(); // _ZN10S3350C2_nt4v140Ev
  virtual void  v141(); // _ZN10S3350C2_nt4v141Ev
  virtual void  v142(); // _ZN10S3350C2_nt4v142Ev
  virtual void  v143(); // _ZN10S3350C2_nt4v143Ev
  virtual void  v144(); // _ZN10S3350C2_nt4v144Ev
  virtual void  v145(); // _ZN10S3350C2_nt4v145Ev
  virtual void  v146(); // _ZN10S3350C2_nt4v146Ev
  virtual void  v147(); // _ZN10S3350C2_nt4v147Ev
  virtual void  v148(); // _ZN10S3350C2_nt4v148Ev
  virtual void  v149(); // _ZN10S3350C2_nt4v149Ev
  virtual void  v150(); // _ZN10S3350C2_nt4v150Ev
  virtual void  v151(); // _ZN10S3350C2_nt4v151Ev
  virtual void  v152(); // _ZN10S3350C2_nt4v152Ev
  virtual void  v153(); // _ZN10S3350C2_nt4v153Ev
  virtual void  v154(); // _ZN10S3350C2_nt4v154Ev
  virtual void  v155(); // _ZN10S3350C2_nt4v155Ev
  virtual void  v156(); // _ZN10S3350C2_nt4v156Ev
  virtual void  v157(); // _ZN10S3350C2_nt4v157Ev
  virtual void  v158(); // _ZN10S3350C2_nt4v158Ev
  virtual void  v159(); // _ZN10S3350C2_nt4v159Ev
  virtual void  v160(); // _ZN10S3350C2_nt4v160Ev
  virtual void  v161(); // _ZN10S3350C2_nt4v161Ev
  virtual void  v162(); // _ZN10S3350C2_nt4v162Ev
  virtual void  v163(); // _ZN10S3350C2_nt4v163Ev
  virtual void  v164(); // _ZN10S3350C2_nt4v164Ev
  virtual void  v165(); // _ZN10S3350C2_nt4v165Ev
  virtual void  v166(); // _ZN10S3350C2_nt4v166Ev
  virtual void  v167(); // _ZN10S3350C2_nt4v167Ev
  virtual void  v168(); // _ZN10S3350C2_nt4v168Ev
  virtual void  v169(); // _ZN10S3350C2_nt4v169Ev
  virtual void  v170(); // _ZN10S3350C2_nt4v170Ev
  virtual void  v171(); // _ZN10S3350C2_nt4v171Ev
  virtual void  v172(); // _ZN10S3350C2_nt4v172Ev
  virtual void  v173(); // _ZN10S3350C2_nt4v173Ev
  virtual void  v174(); // _ZN10S3350C2_nt4v174Ev
  virtual void  v175(); // _ZN10S3350C2_nt4v175Ev
  virtual void  v176(); // _ZN10S3350C2_nt4v176Ev
  virtual void  v177(); // _ZN10S3350C2_nt4v177Ev
  virtual void  v178(); // _ZN10S3350C2_nt4v178Ev
  virtual void  v179(); // _ZN10S3350C2_nt4v179Ev
  virtual void  v180(); // _ZN10S3350C2_nt4v180Ev
  virtual void  v181(); // _ZN10S3350C2_nt4v181Ev
  virtual void  v182(); // _ZN10S3350C2_nt4v182Ev
  virtual void  v183(); // _ZN10S3350C2_nt4v183Ev
  virtual void  v184(); // _ZN10S3350C2_nt4v184Ev
  virtual void  v185(); // _ZN10S3350C2_nt4v185Ev
  virtual void  v186(); // _ZN10S3350C2_nt4v186Ev
  virtual void  v187(); // _ZN10S3350C2_nt4v187Ev
  virtual void  v188(); // _ZN10S3350C2_nt4v188Ev
  virtual void  v189(); // _ZN10S3350C2_nt4v189Ev
  virtual void  v190(); // _ZN10S3350C2_nt4v190Ev
  virtual void  v191(); // _ZN10S3350C2_nt4v191Ev
  virtual void  v192(); // _ZN10S3350C2_nt4v192Ev
  virtual void  v193(); // _ZN10S3350C2_nt4v193Ev
  virtual void  v194(); // _ZN10S3350C2_nt4v194Ev
  virtual void  v195(); // _ZN10S3350C2_nt4v195Ev
  virtual void  v196(); // _ZN10S3350C2_nt4v196Ev
  virtual void  v197(); // _ZN10S3350C2_nt4v197Ev
  virtual void  v198(); // _ZN10S3350C2_nt4v198Ev
  virtual void  v199(); // _ZN10S3350C2_nt4v199Ev
  virtual void  v200(); // _ZN10S3350C2_nt4v200Ev
  virtual void  v201(); // _ZN10S3350C2_nt4v201Ev
  virtual void  v202(); // _ZN10S3350C2_nt4v202Ev
  virtual void  v203(); // _ZN10S3350C2_nt4v203Ev
  virtual void  v204(); // _ZN10S3350C2_nt4v204Ev
  virtual void  v205(); // _ZN10S3350C2_nt4v205Ev
  virtual void  v206(); // _ZN10S3350C2_nt4v206Ev
  virtual void  v207(); // _ZN10S3350C2_nt4v207Ev
  virtual void  v208(); // _ZN10S3350C2_nt4v208Ev
  virtual void  v209(); // _ZN10S3350C2_nt4v209Ev
  virtual void  v210(); // _ZN10S3350C2_nt4v210Ev
  virtual void  v211(); // _ZN10S3350C2_nt4v211Ev
  virtual void  v212(); // _ZN10S3350C2_nt4v212Ev
  S3350C2_nt(); // tgen
};
//SIG(-1 S3350C2_nt) C1{ BC2{ vd v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ m Fi} Fi Fc[4] Fp[2] FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC3 FC3 FC3 FC8{ BC9{ BC6}} FC8 Fi Fp[2] FC10{ m Fi[3]} FC10 FC10 FC10 Fp FC3 FC8 FC10 FC10 Fi FC10 FC10 Fp Fi Fc FC10 FC10 Fp Fi Fp FC8 FC11{ BC12{ BC6}} FC11}


 S3350C2_nt ::~S3350C2_nt(){ note_dtor("S3350C2_nt", this);}
void  S3350C2_nt ::v70(){vfunc_called(this, "_ZN10S3350C2_nt3v70Ev");}
void  S3350C2_nt ::v71(){vfunc_called(this, "_ZN10S3350C2_nt3v71Ev");}
void  S3350C2_nt ::v72(){vfunc_called(this, "_ZN10S3350C2_nt3v72Ev");}
void  S3350C2_nt ::v73(){vfunc_called(this, "_ZN10S3350C2_nt3v73Ev");}
void  S3350C2_nt ::v74(){vfunc_called(this, "_ZN10S3350C2_nt3v74Ev");}
void  S3350C2_nt ::v75(){vfunc_called(this, "_ZN10S3350C2_nt3v75Ev");}
void  S3350C2_nt ::v76(){vfunc_called(this, "_ZN10S3350C2_nt3v76Ev");}
void  S3350C2_nt ::v77(){vfunc_called(this, "_ZN10S3350C2_nt3v77Ev");}
void  S3350C2_nt ::v78(){vfunc_called(this, "_ZN10S3350C2_nt3v78Ev");}
void  S3350C2_nt ::v79(){vfunc_called(this, "_ZN10S3350C2_nt3v79Ev");}
void  S3350C2_nt ::v80(){vfunc_called(this, "_ZN10S3350C2_nt3v80Ev");}
void  S3350C2_nt ::v81(){vfunc_called(this, "_ZN10S3350C2_nt3v81Ev");}
void  S3350C2_nt ::v82(){vfunc_called(this, "_ZN10S3350C2_nt3v82Ev");}
void  S3350C2_nt ::v83(){vfunc_called(this, "_ZN10S3350C2_nt3v83Ev");}
void  S3350C2_nt ::v84(){vfunc_called(this, "_ZN10S3350C2_nt3v84Ev");}
void  S3350C2_nt ::v85(){vfunc_called(this, "_ZN10S3350C2_nt3v85Ev");}
void  S3350C2_nt ::v86(){vfunc_called(this, "_ZN10S3350C2_nt3v86Ev");}
void  S3350C2_nt ::v87(){vfunc_called(this, "_ZN10S3350C2_nt3v87Ev");}
void  S3350C2_nt ::v88(){vfunc_called(this, "_ZN10S3350C2_nt3v88Ev");}
void  S3350C2_nt ::v89(){vfunc_called(this, "_ZN10S3350C2_nt3v89Ev");}
void  S3350C2_nt ::v90(){vfunc_called(this, "_ZN10S3350C2_nt3v90Ev");}
void  S3350C2_nt ::v91(){vfunc_called(this, "_ZN10S3350C2_nt3v91Ev");}
void  S3350C2_nt ::v92(){vfunc_called(this, "_ZN10S3350C2_nt3v92Ev");}
void  S3350C2_nt ::v93(){vfunc_called(this, "_ZN10S3350C2_nt3v93Ev");}
void  S3350C2_nt ::v94(){vfunc_called(this, "_ZN10S3350C2_nt3v94Ev");}
void  S3350C2_nt ::v95(){vfunc_called(this, "_ZN10S3350C2_nt3v95Ev");}
void  S3350C2_nt ::v96(){vfunc_called(this, "_ZN10S3350C2_nt3v96Ev");}
void  S3350C2_nt ::v97(){vfunc_called(this, "_ZN10S3350C2_nt3v97Ev");}
void  S3350C2_nt ::v98(){vfunc_called(this, "_ZN10S3350C2_nt3v98Ev");}
void  S3350C2_nt ::v99(){vfunc_called(this, "_ZN10S3350C2_nt3v99Ev");}
void  S3350C2_nt ::v100(){vfunc_called(this, "_ZN10S3350C2_nt4v100Ev");}
void  S3350C2_nt ::v101(){vfunc_called(this, "_ZN10S3350C2_nt4v101Ev");}
void  S3350C2_nt ::v102(){vfunc_called(this, "_ZN10S3350C2_nt4v102Ev");}
void  S3350C2_nt ::v103(){vfunc_called(this, "_ZN10S3350C2_nt4v103Ev");}
void  S3350C2_nt ::v104(){vfunc_called(this, "_ZN10S3350C2_nt4v104Ev");}
void  S3350C2_nt ::v105(){vfunc_called(this, "_ZN10S3350C2_nt4v105Ev");}
void  S3350C2_nt ::v106(){vfunc_called(this, "_ZN10S3350C2_nt4v106Ev");}
void  S3350C2_nt ::v107(){vfunc_called(this, "_ZN10S3350C2_nt4v107Ev");}
void  S3350C2_nt ::v108(){vfunc_called(this, "_ZN10S3350C2_nt4v108Ev");}
void  S3350C2_nt ::v109(){vfunc_called(this, "_ZN10S3350C2_nt4v109Ev");}
void  S3350C2_nt ::v110(){vfunc_called(this, "_ZN10S3350C2_nt4v110Ev");}
void  S3350C2_nt ::v111(){vfunc_called(this, "_ZN10S3350C2_nt4v111Ev");}
void  S3350C2_nt ::v112(){vfunc_called(this, "_ZN10S3350C2_nt4v112Ev");}
void  S3350C2_nt ::v113(){vfunc_called(this, "_ZN10S3350C2_nt4v113Ev");}
void  S3350C2_nt ::v114(){vfunc_called(this, "_ZN10S3350C2_nt4v114Ev");}
void  S3350C2_nt ::v115(){vfunc_called(this, "_ZN10S3350C2_nt4v115Ev");}
void  S3350C2_nt ::v116(){vfunc_called(this, "_ZN10S3350C2_nt4v116Ev");}
void  S3350C2_nt ::v117(){vfunc_called(this, "_ZN10S3350C2_nt4v117Ev");}
void  S3350C2_nt ::v118(){vfunc_called(this, "_ZN10S3350C2_nt4v118Ev");}
void  S3350C2_nt ::v119(){vfunc_called(this, "_ZN10S3350C2_nt4v119Ev");}
void  S3350C2_nt ::v120(){vfunc_called(this, "_ZN10S3350C2_nt4v120Ev");}
void  S3350C2_nt ::v121(){vfunc_called(this, "_ZN10S3350C2_nt4v121Ev");}
void  S3350C2_nt ::v122(){vfunc_called(this, "_ZN10S3350C2_nt4v122Ev");}
void  S3350C2_nt ::v123(){vfunc_called(this, "_ZN10S3350C2_nt4v123Ev");}
void  S3350C2_nt ::v124(){vfunc_called(this, "_ZN10S3350C2_nt4v124Ev");}
void  S3350C2_nt ::v125(){vfunc_called(this, "_ZN10S3350C2_nt4v125Ev");}
void  S3350C2_nt ::v126(){vfunc_called(this, "_ZN10S3350C2_nt4v126Ev");}
void  S3350C2_nt ::v127(){vfunc_called(this, "_ZN10S3350C2_nt4v127Ev");}
void  S3350C2_nt ::v128(){vfunc_called(this, "_ZN10S3350C2_nt4v128Ev");}
void  S3350C2_nt ::v129(){vfunc_called(this, "_ZN10S3350C2_nt4v129Ev");}
void  S3350C2_nt ::v130(){vfunc_called(this, "_ZN10S3350C2_nt4v130Ev");}
void  S3350C2_nt ::v131(){vfunc_called(this, "_ZN10S3350C2_nt4v131Ev");}
void  S3350C2_nt ::v132(){vfunc_called(this, "_ZN10S3350C2_nt4v132Ev");}
void  S3350C2_nt ::v133(){vfunc_called(this, "_ZN10S3350C2_nt4v133Ev");}
void  S3350C2_nt ::v134(){vfunc_called(this, "_ZN10S3350C2_nt4v134Ev");}
void  S3350C2_nt ::v135(){vfunc_called(this, "_ZN10S3350C2_nt4v135Ev");}
void  S3350C2_nt ::v136(){vfunc_called(this, "_ZN10S3350C2_nt4v136Ev");}
void  S3350C2_nt ::v137(){vfunc_called(this, "_ZN10S3350C2_nt4v137Ev");}
void  S3350C2_nt ::v138(){vfunc_called(this, "_ZN10S3350C2_nt4v138Ev");}
void  S3350C2_nt ::v139(){vfunc_called(this, "_ZN10S3350C2_nt4v139Ev");}
void  S3350C2_nt ::v140(){vfunc_called(this, "_ZN10S3350C2_nt4v140Ev");}
void  S3350C2_nt ::v141(){vfunc_called(this, "_ZN10S3350C2_nt4v141Ev");}
void  S3350C2_nt ::v142(){vfunc_called(this, "_ZN10S3350C2_nt4v142Ev");}
void  S3350C2_nt ::v143(){vfunc_called(this, "_ZN10S3350C2_nt4v143Ev");}
void  S3350C2_nt ::v144(){vfunc_called(this, "_ZN10S3350C2_nt4v144Ev");}
void  S3350C2_nt ::v145(){vfunc_called(this, "_ZN10S3350C2_nt4v145Ev");}
void  S3350C2_nt ::v146(){vfunc_called(this, "_ZN10S3350C2_nt4v146Ev");}
void  S3350C2_nt ::v147(){vfunc_called(this, "_ZN10S3350C2_nt4v147Ev");}
void  S3350C2_nt ::v148(){vfunc_called(this, "_ZN10S3350C2_nt4v148Ev");}
void  S3350C2_nt ::v149(){vfunc_called(this, "_ZN10S3350C2_nt4v149Ev");}
void  S3350C2_nt ::v150(){vfunc_called(this, "_ZN10S3350C2_nt4v150Ev");}
void  S3350C2_nt ::v151(){vfunc_called(this, "_ZN10S3350C2_nt4v151Ev");}
void  S3350C2_nt ::v152(){vfunc_called(this, "_ZN10S3350C2_nt4v152Ev");}
void  S3350C2_nt ::v153(){vfunc_called(this, "_ZN10S3350C2_nt4v153Ev");}
void  S3350C2_nt ::v154(){vfunc_called(this, "_ZN10S3350C2_nt4v154Ev");}
void  S3350C2_nt ::v155(){vfunc_called(this, "_ZN10S3350C2_nt4v155Ev");}
void  S3350C2_nt ::v156(){vfunc_called(this, "_ZN10S3350C2_nt4v156Ev");}
void  S3350C2_nt ::v157(){vfunc_called(this, "_ZN10S3350C2_nt4v157Ev");}
void  S3350C2_nt ::v158(){vfunc_called(this, "_ZN10S3350C2_nt4v158Ev");}
void  S3350C2_nt ::v159(){vfunc_called(this, "_ZN10S3350C2_nt4v159Ev");}
void  S3350C2_nt ::v160(){vfunc_called(this, "_ZN10S3350C2_nt4v160Ev");}
void  S3350C2_nt ::v161(){vfunc_called(this, "_ZN10S3350C2_nt4v161Ev");}
void  S3350C2_nt ::v162(){vfunc_called(this, "_ZN10S3350C2_nt4v162Ev");}
void  S3350C2_nt ::v163(){vfunc_called(this, "_ZN10S3350C2_nt4v163Ev");}
void  S3350C2_nt ::v164(){vfunc_called(this, "_ZN10S3350C2_nt4v164Ev");}
void  S3350C2_nt ::v165(){vfunc_called(this, "_ZN10S3350C2_nt4v165Ev");}
void  S3350C2_nt ::v166(){vfunc_called(this, "_ZN10S3350C2_nt4v166Ev");}
void  S3350C2_nt ::v167(){vfunc_called(this, "_ZN10S3350C2_nt4v167Ev");}
void  S3350C2_nt ::v168(){vfunc_called(this, "_ZN10S3350C2_nt4v168Ev");}
void  S3350C2_nt ::v169(){vfunc_called(this, "_ZN10S3350C2_nt4v169Ev");}
void  S3350C2_nt ::v170(){vfunc_called(this, "_ZN10S3350C2_nt4v170Ev");}
void  S3350C2_nt ::v171(){vfunc_called(this, "_ZN10S3350C2_nt4v171Ev");}
void  S3350C2_nt ::v172(){vfunc_called(this, "_ZN10S3350C2_nt4v172Ev");}
void  S3350C2_nt ::v173(){vfunc_called(this, "_ZN10S3350C2_nt4v173Ev");}
void  S3350C2_nt ::v174(){vfunc_called(this, "_ZN10S3350C2_nt4v174Ev");}
void  S3350C2_nt ::v175(){vfunc_called(this, "_ZN10S3350C2_nt4v175Ev");}
void  S3350C2_nt ::v176(){vfunc_called(this, "_ZN10S3350C2_nt4v176Ev");}
void  S3350C2_nt ::v177(){vfunc_called(this, "_ZN10S3350C2_nt4v177Ev");}
void  S3350C2_nt ::v178(){vfunc_called(this, "_ZN10S3350C2_nt4v178Ev");}
void  S3350C2_nt ::v179(){vfunc_called(this, "_ZN10S3350C2_nt4v179Ev");}
void  S3350C2_nt ::v180(){vfunc_called(this, "_ZN10S3350C2_nt4v180Ev");}
void  S3350C2_nt ::v181(){vfunc_called(this, "_ZN10S3350C2_nt4v181Ev");}
void  S3350C2_nt ::v182(){vfunc_called(this, "_ZN10S3350C2_nt4v182Ev");}
void  S3350C2_nt ::v183(){vfunc_called(this, "_ZN10S3350C2_nt4v183Ev");}
void  S3350C2_nt ::v184(){vfunc_called(this, "_ZN10S3350C2_nt4v184Ev");}
void  S3350C2_nt ::v185(){vfunc_called(this, "_ZN10S3350C2_nt4v185Ev");}
void  S3350C2_nt ::v186(){vfunc_called(this, "_ZN10S3350C2_nt4v186Ev");}
void  S3350C2_nt ::v187(){vfunc_called(this, "_ZN10S3350C2_nt4v187Ev");}
void  S3350C2_nt ::v188(){vfunc_called(this, "_ZN10S3350C2_nt4v188Ev");}
void  S3350C2_nt ::v189(){vfunc_called(this, "_ZN10S3350C2_nt4v189Ev");}
void  S3350C2_nt ::v190(){vfunc_called(this, "_ZN10S3350C2_nt4v190Ev");}
void  S3350C2_nt ::v191(){vfunc_called(this, "_ZN10S3350C2_nt4v191Ev");}
void  S3350C2_nt ::v192(){vfunc_called(this, "_ZN10S3350C2_nt4v192Ev");}
void  S3350C2_nt ::v193(){vfunc_called(this, "_ZN10S3350C2_nt4v193Ev");}
void  S3350C2_nt ::v194(){vfunc_called(this, "_ZN10S3350C2_nt4v194Ev");}
void  S3350C2_nt ::v195(){vfunc_called(this, "_ZN10S3350C2_nt4v195Ev");}
void  S3350C2_nt ::v196(){vfunc_called(this, "_ZN10S3350C2_nt4v196Ev");}
void  S3350C2_nt ::v197(){vfunc_called(this, "_ZN10S3350C2_nt4v197Ev");}
void  S3350C2_nt ::v198(){vfunc_called(this, "_ZN10S3350C2_nt4v198Ev");}
void  S3350C2_nt ::v199(){vfunc_called(this, "_ZN10S3350C2_nt4v199Ev");}
void  S3350C2_nt ::v200(){vfunc_called(this, "_ZN10S3350C2_nt4v200Ev");}
void  S3350C2_nt ::v201(){vfunc_called(this, "_ZN10S3350C2_nt4v201Ev");}
void  S3350C2_nt ::v202(){vfunc_called(this, "_ZN10S3350C2_nt4v202Ev");}
void  S3350C2_nt ::v203(){vfunc_called(this, "_ZN10S3350C2_nt4v203Ev");}
void  S3350C2_nt ::v204(){vfunc_called(this, "_ZN10S3350C2_nt4v204Ev");}
void  S3350C2_nt ::v205(){vfunc_called(this, "_ZN10S3350C2_nt4v205Ev");}
void  S3350C2_nt ::v206(){vfunc_called(this, "_ZN10S3350C2_nt4v206Ev");}
void  S3350C2_nt ::v207(){vfunc_called(this, "_ZN10S3350C2_nt4v207Ev");}
void  S3350C2_nt ::v208(){vfunc_called(this, "_ZN10S3350C2_nt4v208Ev");}
void  S3350C2_nt ::v209(){vfunc_called(this, "_ZN10S3350C2_nt4v209Ev");}
void  S3350C2_nt ::v210(){vfunc_called(this, "_ZN10S3350C2_nt4v210Ev");}
void  S3350C2_nt ::v211(){vfunc_called(this, "_ZN10S3350C2_nt4v211Ev");}
void  S3350C2_nt ::v212(){vfunc_called(this, "_ZN10S3350C2_nt4v212Ev");}
S3350C2_nt ::S3350C2_nt(){ note_ctor("S3350C2_nt", this);} // tgen

//skip512 S3350C2_nt

#else // __cplusplus

extern void _ZN10S3350C2_ntC1Ev();
extern void _ZN10S3350C2_ntD1Ev();
Name_Map name_map_S3350C2_nt[] = {
  NSPAIR(_ZN10S3350C2_ntC1Ev),
  NSPAIR(_ZN10S3350C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C3_nt;
extern VTBL_ENTRY _ZTI10S3350C3_nt[];
extern  VTBL_ENTRY _ZTV10S3350C3_nt[];
static Base_Class bases_S3350C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3350C2_nt[];
extern void _ZN10S3350C2_ntD1Ev();
extern void _ZN10S3350C2_ntD0Ev();
extern void _ZN10S3350C3_nt2v6Ev();
extern void _ZN10S3350C3_nt2v7Ev();
extern void _ZN10S3350C3_nt2v8Ev();
extern void _ZN10S3350C3_nt2v9Ev();
extern void _ZN10S3350C3_nt3v10Ev();
extern void _ZN10S3350C3_nt3v11Ev();
extern void _ZN10S3350C3_nt3v12Ev();
extern void _ZN10S3350C3_nt3v13Ev();
extern void _ZN10S3350C3_nt3v14Ev();
extern void _ZN10S3350C3_nt3v15Ev();
extern void _ZN10S3350C3_nt3v16Ev();
extern void _ZN10S3350C3_nt3v17Ev();
extern void _ZN10S3350C3_nt3v18Ev();
extern void _ZN10S3350C3_nt3v19Ev();
extern void _ZN10S3350C3_nt3v20Ev();
extern void _ZN10S3350C3_nt3v21Ev();
extern void _ZN10S3350C3_nt3v22Ev();
extern void _ZN10S3350C3_nt3v23Ev();
extern void _ZN10S3350C3_nt3v24Ev();
extern void _ZN10S3350C3_nt3v25Ev();
extern void _ZN10S3350C3_nt3v26Ev();
extern void _ZN10S3350C3_nt3v27Ev();
extern void _ZN10S3350C3_nt3v28Ev();
extern void _ZN10S3350C3_nt3v29Ev();
extern void _ZN10S3350C3_nt3v30Ev();
extern void _ZN10S3350C3_nt3v31Ev();
extern void _ZN10S3350C3_nt3v32Ev();
extern void _ZN10S3350C3_nt3v33Ev();
extern void _ZN10S3350C3_nt3v34Ev();
extern void _ZN10S3350C3_nt3v35Ev();
extern void _ZN10S3350C3_nt3v36Ev();
extern void _ZN10S3350C3_nt3v37Ev();
extern void _ZN10S3350C3_nt3v38Ev();
extern void _ZN10S3350C3_nt3v39Ev();
extern void _ZN10S3350C3_nt3v40Ev();
extern void _ZN10S3350C3_nt3v41Ev();
extern void _ZN10S3350C3_nt3v42Ev();
extern void _ZN10S3350C3_nt3v43Ev();
extern void _ZN10S3350C3_nt3v44Ev();
extern void _ZN10S3350C3_nt3v45Ev();
extern void _ZN10S3350C3_nt3v46Ev();
extern void _ZN10S3350C3_nt3v47Ev();
extern void _ZN10S3350C3_nt3v48Ev();
extern void _ZN10S3350C3_nt3v49Ev();
extern void _ZN10S3350C3_nt3v50Ev();
extern void _ZN10S3350C3_nt3v51Ev();
extern void _ZN10S3350C3_nt3v52Ev();
extern void _ZN10S3350C3_nt3v53Ev();
extern void _ZN10S3350C3_nt3v54Ev();
extern void _ZN10S3350C3_nt3v55Ev();
extern void _ZN10S3350C3_nt3v56Ev();
extern void _ZN10S3350C3_nt3v57Ev();
extern void _ZN10S3350C3_nt3v58Ev();
extern void _ZN10S3350C3_nt3v59Ev();
extern void _ZN10S3350C3_nt3v60Ev();
extern void _ZN10S3350C3_nt3v61Ev();
extern void _ZN10S3350C3_nt3v62Ev();
extern void _ZN10S3350C3_nt3v63Ev();
extern void _ZN10S3350C3_nt3v64Ev();
extern void _ZN10S3350C3_nt3v65Ev();
extern void _ZN10S3350C3_nt3v66Ev();
extern void _ZN10S3350C3_nt3v67Ev();
extern void _ZN10S3350C3_nt3v68Ev();
extern void _ZN10S3350C3_nt3v69Ev();
extern void _ZN10S3350C2_nt3v70Ev();
extern void _ZN10S3350C2_nt3v71Ev();
extern void _ZN10S3350C2_nt3v72Ev();
extern void _ZN10S3350C2_nt3v73Ev();
extern void _ZN10S3350C2_nt3v74Ev();
extern void _ZN10S3350C2_nt3v75Ev();
extern void _ZN10S3350C2_nt3v76Ev();
extern void _ZN10S3350C2_nt3v77Ev();
extern void _ZN10S3350C2_nt3v78Ev();
extern void _ZN10S3350C2_nt3v79Ev();
extern void _ZN10S3350C2_nt3v80Ev();
extern void _ZN10S3350C2_nt3v81Ev();
extern void _ZN10S3350C2_nt3v82Ev();
extern void _ZN10S3350C2_nt3v83Ev();
extern void _ZN10S3350C2_nt3v84Ev();
extern void _ZN10S3350C2_nt3v85Ev();
extern void _ZN10S3350C2_nt3v86Ev();
extern void _ZN10S3350C2_nt3v87Ev();
extern void _ZN10S3350C2_nt3v88Ev();
extern void _ZN10S3350C2_nt3v89Ev();
extern void _ZN10S3350C2_nt3v90Ev();
extern void _ZN10S3350C2_nt3v91Ev();
extern void _ZN10S3350C2_nt3v92Ev();
extern void _ZN10S3350C2_nt3v93Ev();
extern void _ZN10S3350C2_nt3v94Ev();
extern void _ZN10S3350C2_nt3v95Ev();
extern void _ZN10S3350C2_nt3v96Ev();
extern void _ZN10S3350C2_nt3v97Ev();
extern void _ZN10S3350C2_nt3v98Ev();
extern void _ZN10S3350C2_nt3v99Ev();
extern void _ZN10S3350C2_nt4v100Ev();
extern void _ZN10S3350C2_nt4v101Ev();
extern void _ZN10S3350C2_nt4v102Ev();
extern void _ZN10S3350C2_nt4v103Ev();
extern void _ZN10S3350C2_nt4v104Ev();
extern void _ZN10S3350C2_nt4v105Ev();
extern void _ZN10S3350C2_nt4v106Ev();
extern void _ZN10S3350C2_nt4v107Ev();
extern void _ZN10S3350C2_nt4v108Ev();
extern void _ZN10S3350C2_nt4v109Ev();
extern void _ZN10S3350C2_nt4v110Ev();
extern void _ZN10S3350C2_nt4v111Ev();
extern void _ZN10S3350C2_nt4v112Ev();
extern void _ZN10S3350C2_nt4v113Ev();
extern void _ZN10S3350C2_nt4v114Ev();
extern void _ZN10S3350C2_nt4v115Ev();
extern void _ZN10S3350C2_nt4v116Ev();
extern void _ZN10S3350C2_nt4v117Ev();
extern void _ZN10S3350C2_nt4v118Ev();
extern void _ZN10S3350C2_nt4v119Ev();
extern void _ZN10S3350C2_nt4v120Ev();
extern void _ZN10S3350C2_nt4v121Ev();
extern void _ZN10S3350C2_nt4v122Ev();
extern void _ZN10S3350C2_nt4v123Ev();
extern void _ZN10S3350C2_nt4v124Ev();
extern void _ZN10S3350C2_nt4v125Ev();
extern void _ZN10S3350C2_nt4v126Ev();
extern void _ZN10S3350C2_nt4v127Ev();
extern void _ZN10S3350C2_nt4v128Ev();
extern void _ZN10S3350C2_nt4v129Ev();
extern void _ZN10S3350C2_nt4v130Ev();
extern void _ZN10S3350C2_nt4v131Ev();
extern void _ZN10S3350C2_nt4v132Ev();
extern void _ZN10S3350C2_nt4v133Ev();
extern void _ZN10S3350C2_nt4v134Ev();
extern void _ZN10S3350C2_nt4v135Ev();
extern void _ZN10S3350C2_nt4v136Ev();
extern void _ZN10S3350C2_nt4v137Ev();
extern void _ZN10S3350C2_nt4v138Ev();
extern void _ZN10S3350C2_nt4v139Ev();
extern void _ZN10S3350C2_nt4v140Ev();
extern void _ZN10S3350C2_nt4v141Ev();
extern void _ZN10S3350C2_nt4v142Ev();
extern void _ZN10S3350C2_nt4v143Ev();
extern void _ZN10S3350C2_nt4v144Ev();
extern void _ZN10S3350C2_nt4v145Ev();
extern void _ZN10S3350C2_nt4v146Ev();
extern void _ZN10S3350C2_nt4v147Ev();
extern void _ZN10S3350C2_nt4v148Ev();
extern void _ZN10S3350C2_nt4v149Ev();
extern void _ZN10S3350C2_nt4v150Ev();
extern void _ZN10S3350C2_nt4v151Ev();
extern void _ZN10S3350C2_nt4v152Ev();
extern void _ZN10S3350C2_nt4v153Ev();
extern void _ZN10S3350C2_nt4v154Ev();
extern void _ZN10S3350C2_nt4v155Ev();
extern void _ZN10S3350C2_nt4v156Ev();
extern void _ZN10S3350C2_nt4v157Ev();
extern void _ZN10S3350C2_nt4v158Ev();
extern void _ZN10S3350C2_nt4v159Ev();
extern void _ZN10S3350C2_nt4v160Ev();
extern void _ZN10S3350C2_nt4v161Ev();
extern void _ZN10S3350C2_nt4v162Ev();
extern void _ZN10S3350C2_nt4v163Ev();
extern void _ZN10S3350C2_nt4v164Ev();
extern void _ZN10S3350C2_nt4v165Ev();
extern void _ZN10S3350C2_nt4v166Ev();
extern void _ZN10S3350C2_nt4v167Ev();
extern void _ZN10S3350C2_nt4v168Ev();
extern void _ZN10S3350C2_nt4v169Ev();
extern void _ZN10S3350C2_nt4v170Ev();
extern void _ZN10S3350C2_nt4v171Ev();
extern void _ZN10S3350C2_nt4v172Ev();
extern void _ZN10S3350C2_nt4v173Ev();
extern void _ZN10S3350C2_nt4v174Ev();
extern void _ZN10S3350C2_nt4v175Ev();
extern void _ZN10S3350C2_nt4v176Ev();
extern void _ZN10S3350C2_nt4v177Ev();
extern void _ZN10S3350C2_nt4v178Ev();
extern void _ZN10S3350C2_nt4v179Ev();
extern void _ZN10S3350C2_nt4v180Ev();
extern void _ZN10S3350C2_nt4v181Ev();
extern void _ZN10S3350C2_nt4v182Ev();
extern void _ZN10S3350C2_nt4v183Ev();
extern void _ZN10S3350C2_nt4v184Ev();
extern void _ZN10S3350C2_nt4v185Ev();
extern void _ZN10S3350C2_nt4v186Ev();
extern void _ZN10S3350C2_nt4v187Ev();
extern void _ZN10S3350C2_nt4v188Ev();
extern void _ZN10S3350C2_nt4v189Ev();
extern void _ZN10S3350C2_nt4v190Ev();
extern void _ZN10S3350C2_nt4v191Ev();
extern void _ZN10S3350C2_nt4v192Ev();
extern void _ZN10S3350C2_nt4v193Ev();
extern void _ZN10S3350C2_nt4v194Ev();
extern void _ZN10S3350C2_nt4v195Ev();
extern void _ZN10S3350C2_nt4v196Ev();
extern void _ZN10S3350C2_nt4v197Ev();
extern void _ZN10S3350C2_nt4v198Ev();
extern void _ZN10S3350C2_nt4v199Ev();
extern void _ZN10S3350C2_nt4v200Ev();
extern void _ZN10S3350C2_nt4v201Ev();
extern void _ZN10S3350C2_nt4v202Ev();
extern void _ZN10S3350C2_nt4v203Ev();
extern void _ZN10S3350C2_nt4v204Ev();
extern void _ZN10S3350C2_nt4v205Ev();
extern void _ZN10S3350C2_nt4v206Ev();
extern void _ZN10S3350C2_nt4v207Ev();
extern void _ZN10S3350C2_nt4v208Ev();
extern void _ZN10S3350C2_nt4v209Ev();
extern void _ZN10S3350C2_nt4v210Ev();
extern void _ZN10S3350C2_nt4v211Ev();
extern void _ZN10S3350C2_nt4v212Ev();
static  VTBL_ENTRY vtc_S3350C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3350C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3350C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v212Ev,
};
extern VTBL_ENTRY _ZTI10S3350C2_nt[];
VTBL_ENTRY *P__ZTI10S3350C2_nt = _ZTI10S3350C2_nt; 
extern  VTBL_ENTRY _ZTV10S3350C2_nt[];
Class_Descriptor cd_S3350C2_nt = {  "S3350C2_nt", // class name
  bases_S3350C2_nt, 1,
  &(vtc_S3350C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S3350C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3350C2_nt),211, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C21_nt  {
  void *s3350c21f0;
  ::S3350C4_nt s3350c21f1;
  void  mf3350c21(); // _ZN11S3350C21_nt9mf3350c21Ev
};
//SIG(-1 S3350C21_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S3350C21_nt ::mf3350c21(){}

//skip512 S3350C21_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3350C1  : S3350C2_nt {
  void *s3350c1f0;
  char s3350c1f1;
  void *s3350c1f2;
  ::S3350C13_nt s3350c1f3;
  void *s3350c1f4;
  unsigned int s3350c1f5:1;
  ::S3350C21_nt s3350c1f6;
  virtual  ~S3350C1(); // _ZN7S3350C1D1Ev
  virtual void  v1(); // _ZN7S3350C12v1Ev
  virtual void  v2(); // _ZN7S3350C12v2Ev
  virtual void  v3(); // _ZN7S3350C12v3Ev
  virtual void  v4(); // _ZN7S3350C12v4Ev
  virtual void  v5(); // _ZN7S3350C12v5Ev
  S3350C1(); // tgen
};
//SIG(1 S3350C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC5 FC8{ m Fi} Fi Fc[4] Fp[2] FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[5] Fp[2] Fi[3] FC4 FC4 FC4 FC9{ BC10{ BC7}} FC9 Fi Fp[2] FC11{ m Fi[3]} FC11 FC11 FC11 Fp FC4 FC9 FC11 FC11 Fi FC11 FC11 Fp Fi Fc FC11 FC11 Fp Fi Fp FC9 FC12{ BC13{ BC7}} FC12} vd v1 v2 v3 v4 v5 Fp Fc Fp FC11 Fp Fi:1 FC14{ m Fp FC4}}


 S3350C1 ::~S3350C1(){ note_dtor("S3350C1", this);}
void  S3350C1 ::v1(){vfunc_called(this, "_ZN7S3350C12v1Ev");}
void  S3350C1 ::v2(){vfunc_called(this, "_ZN7S3350C12v2Ev");}
void  S3350C1 ::v3(){vfunc_called(this, "_ZN7S3350C12v3Ev");}
void  S3350C1 ::v4(){vfunc_called(this, "_ZN7S3350C12v4Ev");}
void  S3350C1 ::v5(){vfunc_called(this, "_ZN7S3350C12v5Ev");}
S3350C1 ::S3350C1(){ note_ctor("S3350C1", this);} // tgen

static void Test_S3350C1()
{
  extern Class_Descriptor cd_S3350C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(81,121)];
    init_test(&cd_S3350C1, buf);
    S3350C1 *dp, &lv = *(dp=new (buf) S3350C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(640,480), "sizeof(S3350C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3350C1)");
    check_base_class_offset(lv, (S3350C3_nt*)(S3350C2_nt*), 0, "S3350C1");
    check_base_class_offset(lv, (S3350C2_nt*), 0, "S3350C1");
    check_field_offset(lv, s3350c1f0, ABISELECT(568,436), "S3350C1.s3350c1f0");
    check_field_offset(lv, s3350c1f1, ABISELECT(576,440), "S3350C1.s3350c1f1");
    check_field_offset(lv, s3350c1f2, ABISELECT(584,444), "S3350C1.s3350c1f2");
    check_field_offset(lv, s3350c1f3, ABISELECT(592,448), "S3350C1.s3350c1f3");
    check_field_offset(lv, s3350c1f4, ABISELECT(608,460), "S3350C1.s3350c1f4");
    set_bf_and_test(lv, s3350c1f5, ABISELECT(616,464), 0, 1, 1, "S3350C1");
    check_field_offset(lv, s3350c1f6, ABISELECT(624,468), "S3350C1.s3350c1f6");
    test_class_info(&lv, &cd_S3350C1);
    dp->~S3350C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3350C1(Test_S3350C1, "S3350C1", ABISELECT(640,480));

#else // __cplusplus

extern void _ZN7S3350C1C1Ev();
extern void _ZN7S3350C1D1Ev();
Name_Map name_map_S3350C1[] = {
  NSPAIR(_ZN7S3350C1C1Ev),
  NSPAIR(_ZN7S3350C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C3_nt;
extern VTBL_ENTRY _ZTI10S3350C3_nt[];
extern  VTBL_ENTRY _ZTV10S3350C3_nt[];
extern Class_Descriptor cd_S3350C2_nt;
extern VTBL_ENTRY _ZTI10S3350C2_nt[];
extern  VTBL_ENTRY _ZTV10S3350C2_nt[];
static Base_Class bases_S3350C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3350C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3350C1[];
extern void _ZN7S3350C1D1Ev();
extern void _ZN7S3350C1D0Ev();
extern void _ZN10S3350C3_nt2v6Ev();
extern void _ZN10S3350C3_nt2v7Ev();
extern void _ZN10S3350C3_nt2v8Ev();
extern void _ZN10S3350C3_nt2v9Ev();
extern void _ZN10S3350C3_nt3v10Ev();
extern void _ZN10S3350C3_nt3v11Ev();
extern void _ZN10S3350C3_nt3v12Ev();
extern void _ZN10S3350C3_nt3v13Ev();
extern void _ZN10S3350C3_nt3v14Ev();
extern void _ZN10S3350C3_nt3v15Ev();
extern void _ZN10S3350C3_nt3v16Ev();
extern void _ZN10S3350C3_nt3v17Ev();
extern void _ZN10S3350C3_nt3v18Ev();
extern void _ZN10S3350C3_nt3v19Ev();
extern void _ZN10S3350C3_nt3v20Ev();
extern void _ZN10S3350C3_nt3v21Ev();
extern void _ZN10S3350C3_nt3v22Ev();
extern void _ZN10S3350C3_nt3v23Ev();
extern void _ZN10S3350C3_nt3v24Ev();
extern void _ZN10S3350C3_nt3v25Ev();
extern void _ZN10S3350C3_nt3v26Ev();
extern void _ZN10S3350C3_nt3v27Ev();
extern void _ZN10S3350C3_nt3v28Ev();
extern void _ZN10S3350C3_nt3v29Ev();
extern void _ZN10S3350C3_nt3v30Ev();
extern void _ZN10S3350C3_nt3v31Ev();
extern void _ZN10S3350C3_nt3v32Ev();
extern void _ZN10S3350C3_nt3v33Ev();
extern void _ZN10S3350C3_nt3v34Ev();
extern void _ZN10S3350C3_nt3v35Ev();
extern void _ZN10S3350C3_nt3v36Ev();
extern void _ZN10S3350C3_nt3v37Ev();
extern void _ZN10S3350C3_nt3v38Ev();
extern void _ZN10S3350C3_nt3v39Ev();
extern void _ZN10S3350C3_nt3v40Ev();
extern void _ZN10S3350C3_nt3v41Ev();
extern void _ZN10S3350C3_nt3v42Ev();
extern void _ZN10S3350C3_nt3v43Ev();
extern void _ZN10S3350C3_nt3v44Ev();
extern void _ZN10S3350C3_nt3v45Ev();
extern void _ZN10S3350C3_nt3v46Ev();
extern void _ZN10S3350C3_nt3v47Ev();
extern void _ZN10S3350C3_nt3v48Ev();
extern void _ZN10S3350C3_nt3v49Ev();
extern void _ZN10S3350C3_nt3v50Ev();
extern void _ZN10S3350C3_nt3v51Ev();
extern void _ZN10S3350C3_nt3v52Ev();
extern void _ZN10S3350C3_nt3v53Ev();
extern void _ZN10S3350C3_nt3v54Ev();
extern void _ZN10S3350C3_nt3v55Ev();
extern void _ZN10S3350C3_nt3v56Ev();
extern void _ZN10S3350C3_nt3v57Ev();
extern void _ZN10S3350C3_nt3v58Ev();
extern void _ZN10S3350C3_nt3v59Ev();
extern void _ZN10S3350C3_nt3v60Ev();
extern void _ZN10S3350C3_nt3v61Ev();
extern void _ZN10S3350C3_nt3v62Ev();
extern void _ZN10S3350C3_nt3v63Ev();
extern void _ZN10S3350C3_nt3v64Ev();
extern void _ZN10S3350C3_nt3v65Ev();
extern void _ZN10S3350C3_nt3v66Ev();
extern void _ZN10S3350C3_nt3v67Ev();
extern void _ZN10S3350C3_nt3v68Ev();
extern void _ZN10S3350C3_nt3v69Ev();
extern void _ZN10S3350C2_nt3v70Ev();
extern void _ZN10S3350C2_nt3v71Ev();
extern void _ZN10S3350C2_nt3v72Ev();
extern void _ZN10S3350C2_nt3v73Ev();
extern void _ZN10S3350C2_nt3v74Ev();
extern void _ZN10S3350C2_nt3v75Ev();
extern void _ZN10S3350C2_nt3v76Ev();
extern void _ZN10S3350C2_nt3v77Ev();
extern void _ZN10S3350C2_nt3v78Ev();
extern void _ZN10S3350C2_nt3v79Ev();
extern void _ZN10S3350C2_nt3v80Ev();
extern void _ZN10S3350C2_nt3v81Ev();
extern void _ZN10S3350C2_nt3v82Ev();
extern void _ZN10S3350C2_nt3v83Ev();
extern void _ZN10S3350C2_nt3v84Ev();
extern void _ZN10S3350C2_nt3v85Ev();
extern void _ZN10S3350C2_nt3v86Ev();
extern void _ZN10S3350C2_nt3v87Ev();
extern void _ZN10S3350C2_nt3v88Ev();
extern void _ZN10S3350C2_nt3v89Ev();
extern void _ZN10S3350C2_nt3v90Ev();
extern void _ZN10S3350C2_nt3v91Ev();
extern void _ZN10S3350C2_nt3v92Ev();
extern void _ZN10S3350C2_nt3v93Ev();
extern void _ZN10S3350C2_nt3v94Ev();
extern void _ZN10S3350C2_nt3v95Ev();
extern void _ZN10S3350C2_nt3v96Ev();
extern void _ZN10S3350C2_nt3v97Ev();
extern void _ZN10S3350C2_nt3v98Ev();
extern void _ZN10S3350C2_nt3v99Ev();
extern void _ZN10S3350C2_nt4v100Ev();
extern void _ZN10S3350C2_nt4v101Ev();
extern void _ZN10S3350C2_nt4v102Ev();
extern void _ZN10S3350C2_nt4v103Ev();
extern void _ZN10S3350C2_nt4v104Ev();
extern void _ZN10S3350C2_nt4v105Ev();
extern void _ZN10S3350C2_nt4v106Ev();
extern void _ZN10S3350C2_nt4v107Ev();
extern void _ZN10S3350C2_nt4v108Ev();
extern void _ZN10S3350C2_nt4v109Ev();
extern void _ZN10S3350C2_nt4v110Ev();
extern void _ZN10S3350C2_nt4v111Ev();
extern void _ZN10S3350C2_nt4v112Ev();
extern void _ZN10S3350C2_nt4v113Ev();
extern void _ZN10S3350C2_nt4v114Ev();
extern void _ZN10S3350C2_nt4v115Ev();
extern void _ZN10S3350C2_nt4v116Ev();
extern void _ZN10S3350C2_nt4v117Ev();
extern void _ZN10S3350C2_nt4v118Ev();
extern void _ZN10S3350C2_nt4v119Ev();
extern void _ZN10S3350C2_nt4v120Ev();
extern void _ZN10S3350C2_nt4v121Ev();
extern void _ZN10S3350C2_nt4v122Ev();
extern void _ZN10S3350C2_nt4v123Ev();
extern void _ZN10S3350C2_nt4v124Ev();
extern void _ZN10S3350C2_nt4v125Ev();
extern void _ZN10S3350C2_nt4v126Ev();
extern void _ZN10S3350C2_nt4v127Ev();
extern void _ZN10S3350C2_nt4v128Ev();
extern void _ZN10S3350C2_nt4v129Ev();
extern void _ZN10S3350C2_nt4v130Ev();
extern void _ZN10S3350C2_nt4v131Ev();
extern void _ZN10S3350C2_nt4v132Ev();
extern void _ZN10S3350C2_nt4v133Ev();
extern void _ZN10S3350C2_nt4v134Ev();
extern void _ZN10S3350C2_nt4v135Ev();
extern void _ZN10S3350C2_nt4v136Ev();
extern void _ZN10S3350C2_nt4v137Ev();
extern void _ZN10S3350C2_nt4v138Ev();
extern void _ZN10S3350C2_nt4v139Ev();
extern void _ZN10S3350C2_nt4v140Ev();
extern void _ZN10S3350C2_nt4v141Ev();
extern void _ZN10S3350C2_nt4v142Ev();
extern void _ZN10S3350C2_nt4v143Ev();
extern void _ZN10S3350C2_nt4v144Ev();
extern void _ZN10S3350C2_nt4v145Ev();
extern void _ZN10S3350C2_nt4v146Ev();
extern void _ZN10S3350C2_nt4v147Ev();
extern void _ZN10S3350C2_nt4v148Ev();
extern void _ZN10S3350C2_nt4v149Ev();
extern void _ZN10S3350C2_nt4v150Ev();
extern void _ZN10S3350C2_nt4v151Ev();
extern void _ZN10S3350C2_nt4v152Ev();
extern void _ZN10S3350C2_nt4v153Ev();
extern void _ZN10S3350C2_nt4v154Ev();
extern void _ZN10S3350C2_nt4v155Ev();
extern void _ZN10S3350C2_nt4v156Ev();
extern void _ZN10S3350C2_nt4v157Ev();
extern void _ZN10S3350C2_nt4v158Ev();
extern void _ZN10S3350C2_nt4v159Ev();
extern void _ZN10S3350C2_nt4v160Ev();
extern void _ZN10S3350C2_nt4v161Ev();
extern void _ZN10S3350C2_nt4v162Ev();
extern void _ZN10S3350C2_nt4v163Ev();
extern void _ZN10S3350C2_nt4v164Ev();
extern void _ZN10S3350C2_nt4v165Ev();
extern void _ZN10S3350C2_nt4v166Ev();
extern void _ZN10S3350C2_nt4v167Ev();
extern void _ZN10S3350C2_nt4v168Ev();
extern void _ZN10S3350C2_nt4v169Ev();
extern void _ZN10S3350C2_nt4v170Ev();
extern void _ZN10S3350C2_nt4v171Ev();
extern void _ZN10S3350C2_nt4v172Ev();
extern void _ZN10S3350C2_nt4v173Ev();
extern void _ZN10S3350C2_nt4v174Ev();
extern void _ZN10S3350C2_nt4v175Ev();
extern void _ZN10S3350C2_nt4v176Ev();
extern void _ZN10S3350C2_nt4v177Ev();
extern void _ZN10S3350C2_nt4v178Ev();
extern void _ZN10S3350C2_nt4v179Ev();
extern void _ZN10S3350C2_nt4v180Ev();
extern void _ZN10S3350C2_nt4v181Ev();
extern void _ZN10S3350C2_nt4v182Ev();
extern void _ZN10S3350C2_nt4v183Ev();
extern void _ZN10S3350C2_nt4v184Ev();
extern void _ZN10S3350C2_nt4v185Ev();
extern void _ZN10S3350C2_nt4v186Ev();
extern void _ZN10S3350C2_nt4v187Ev();
extern void _ZN10S3350C2_nt4v188Ev();
extern void _ZN10S3350C2_nt4v189Ev();
extern void _ZN10S3350C2_nt4v190Ev();
extern void _ZN10S3350C2_nt4v191Ev();
extern void _ZN10S3350C2_nt4v192Ev();
extern void _ZN10S3350C2_nt4v193Ev();
extern void _ZN10S3350C2_nt4v194Ev();
extern void _ZN10S3350C2_nt4v195Ev();
extern void _ZN10S3350C2_nt4v196Ev();
extern void _ZN10S3350C2_nt4v197Ev();
extern void _ZN10S3350C2_nt4v198Ev();
extern void _ZN10S3350C2_nt4v199Ev();
extern void _ZN10S3350C2_nt4v200Ev();
extern void _ZN10S3350C2_nt4v201Ev();
extern void _ZN10S3350C2_nt4v202Ev();
extern void _ZN10S3350C2_nt4v203Ev();
extern void _ZN10S3350C2_nt4v204Ev();
extern void _ZN10S3350C2_nt4v205Ev();
extern void _ZN10S3350C2_nt4v206Ev();
extern void _ZN10S3350C2_nt4v207Ev();
extern void _ZN10S3350C2_nt4v208Ev();
extern void _ZN10S3350C2_nt4v209Ev();
extern void _ZN10S3350C2_nt4v210Ev();
extern void _ZN10S3350C2_nt4v211Ev();
extern void _ZN10S3350C2_nt4v212Ev();
extern void _ZN7S3350C12v1Ev();
extern void _ZN7S3350C12v2Ev();
extern void _ZN7S3350C12v3Ev();
extern void _ZN7S3350C12v4Ev();
extern void _ZN7S3350C12v5Ev();
static  VTBL_ENTRY vtc_S3350C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3350C1[0]),
  (VTBL_ENTRY)&_ZN7S3350C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3350C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3350C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S3350C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3350C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3350C1[];
extern  VTBL_ENTRY _ZTV7S3350C1[];
Class_Descriptor cd_S3350C1 = {  "S3350C1", // class name
  bases_S3350C1, 2,
  &(vtc_S3350C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(640,480), // object size
  NSPAIRA(_ZTI7S3350C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3350C1),216, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C7_nt  {
  void  mf2121c7(); // _ZN10S2121C7_nt8mf2121c7Ev
};
//SIG(-1 S2121C7_nt) C1{ m}


void  S2121C7_nt ::mf2121c7(){}

//skip512 S2121C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C6_nt  {
  void *s2121c6f0;
  int s2121c6f1;
  ::S2121C7_nt s2121c6f2;
  ::S2121C7_nt s2121c6f3;
  void  mf2121c6(); // _ZN10S2121C6_nt8mf2121c6Ev
};
//SIG(-1 S2121C6_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S2121C6_nt ::mf2121c6(){}

//skip512 S2121C6_nt

#else // __cplusplus

Class_Descriptor cd_S2121C6_nt = {  "S2121C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C5_nt  : S2121C6_nt {
};
//SIG(-1 S2121C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S2121C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2121C6_nt;
static Base_Class bases_S2121C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C4_nt  {
  void *s2121c4f0;
  int s2121c4f1;
  ::S2121C5_nt s2121c4f2;
  ::S2121C5_nt s2121c4f3;
  int s2121c4f4;
  virtual  ~S2121C4_nt(); // _ZN10S2121C4_ntD1Ev
  virtual void  v2(); // _ZN10S2121C4_nt2v2Ev
  virtual void  v3(); // _ZN10S2121C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2121C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2121C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2121C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2121C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2121C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2121C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2121C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2121C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2121C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2121C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2121C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2121C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2121C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2121C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2121C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2121C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2121C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2121C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2121C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2121C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2121C4_nt3v24Ev
  S2121C4_nt(); // tgen
};
//SIG(-1 S2121C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC4}} FC2 Fi}


 S2121C4_nt ::~S2121C4_nt(){ note_dtor("S2121C4_nt", this);}
void  S2121C4_nt ::v2(){vfunc_called(this, "_ZN10S2121C4_nt2v2Ev");}
void  S2121C4_nt ::v3(){vfunc_called(this, "_ZN10S2121C4_nt2v3Ev");}
void  S2121C4_nt ::v4(){vfunc_called(this, "_ZN10S2121C4_nt2v4Ev");}
void  S2121C4_nt ::v5(){vfunc_called(this, "_ZN10S2121C4_nt2v5Ev");}
void  S2121C4_nt ::v6(){vfunc_called(this, "_ZN10S2121C4_nt2v6Ev");}
void  S2121C4_nt ::v7(){vfunc_called(this, "_ZN10S2121C4_nt2v7Ev");}
void  S2121C4_nt ::v8(){vfunc_called(this, "_ZN10S2121C4_nt2v8Ev");}
void  S2121C4_nt ::v9(){vfunc_called(this, "_ZN10S2121C4_nt2v9Ev");}
void  S2121C4_nt ::v10(){vfunc_called(this, "_ZN10S2121C4_nt3v10Ev");}
void  S2121C4_nt ::v11(){vfunc_called(this, "_ZN10S2121C4_nt3v11Ev");}
void  S2121C4_nt ::v12(){vfunc_called(this, "_ZN10S2121C4_nt3v12Ev");}
void  S2121C4_nt ::v13(){vfunc_called(this, "_ZN10S2121C4_nt3v13Ev");}
void  S2121C4_nt ::v14(){vfunc_called(this, "_ZN10S2121C4_nt3v14Ev");}
void  S2121C4_nt ::v15(){vfunc_called(this, "_ZN10S2121C4_nt3v15Ev");}
void  S2121C4_nt ::v16(){vfunc_called(this, "_ZN10S2121C4_nt3v16Ev");}
void  S2121C4_nt ::v17(){vfunc_called(this, "_ZN10S2121C4_nt3v17Ev");}
void  S2121C4_nt ::v18(){vfunc_called(this, "_ZN10S2121C4_nt3v18Ev");}
void  S2121C4_nt ::v19(){vfunc_called(this, "_ZN10S2121C4_nt3v19Ev");}
void  S2121C4_nt ::v20(){vfunc_called(this, "_ZN10S2121C4_nt3v20Ev");}
void  S2121C4_nt ::v21(){vfunc_called(this, "_ZN10S2121C4_nt3v21Ev");}
void  S2121C4_nt ::v22(){vfunc_called(this, "_ZN10S2121C4_nt3v22Ev");}
void  S2121C4_nt ::v23(){vfunc_called(this, "_ZN10S2121C4_nt3v23Ev");}
void  S2121C4_nt ::v24(){vfunc_called(this, "_ZN10S2121C4_nt3v24Ev");}
S2121C4_nt ::S2121C4_nt(){ note_ctor("S2121C4_nt", this);} // tgen

//skip512 S2121C4_nt

#else // __cplusplus

extern void _ZN10S2121C4_ntC1Ev();
extern void _ZN10S2121C4_ntD1Ev();
Name_Map name_map_S2121C4_nt[] = {
  NSPAIR(_ZN10S2121C4_ntC1Ev),
  NSPAIR(_ZN10S2121C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
extern void _ZN10S2121C4_ntD1Ev();
extern void _ZN10S2121C4_ntD0Ev();
extern void _ZN10S2121C4_nt2v2Ev();
extern void _ZN10S2121C4_nt2v3Ev();
extern void _ZN10S2121C4_nt2v4Ev();
extern void _ZN10S2121C4_nt2v5Ev();
extern void _ZN10S2121C4_nt2v6Ev();
extern void _ZN10S2121C4_nt2v7Ev();
extern void _ZN10S2121C4_nt2v8Ev();
extern void _ZN10S2121C4_nt2v9Ev();
extern void _ZN10S2121C4_nt3v10Ev();
extern void _ZN10S2121C4_nt3v11Ev();
extern void _ZN10S2121C4_nt3v12Ev();
extern void _ZN10S2121C4_nt3v13Ev();
extern void _ZN10S2121C4_nt3v14Ev();
extern void _ZN10S2121C4_nt3v15Ev();
extern void _ZN10S2121C4_nt3v16Ev();
extern void _ZN10S2121C4_nt3v17Ev();
extern void _ZN10S2121C4_nt3v18Ev();
extern void _ZN10S2121C4_nt3v19Ev();
extern void _ZN10S2121C4_nt3v20Ev();
extern void _ZN10S2121C4_nt3v21Ev();
extern void _ZN10S2121C4_nt3v22Ev();
extern void _ZN10S2121C4_nt3v23Ev();
extern void _ZN10S2121C4_nt3v24Ev();
static  VTBL_ENTRY vtc_S2121C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2121C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2121C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
VTBL_ENTRY *P__ZTI10S2121C4_nt = _ZTI10S2121C4_nt; 
extern  VTBL_ENTRY _ZTV10S2121C4_nt[];
Class_Descriptor cd_S2121C4_nt = {  "S2121C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2121C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2121C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2121C4_nt),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C14_nt  {
  __tsi64 s2121c14f0[2];
  void  mf2121c14(); // _ZN11S2121C14_nt9mf2121c14Ev
};
//SIG(-1 S2121C14_nt) C1{ m FL[2]}


void  S2121C14_nt ::mf2121c14(){}

//skip512 S2121C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C13_nt  {
  ::S2121C14_nt s2121c13f0;
  void  mf2121c13(); // _ZN11S2121C13_nt9mf2121c13Ev
};
//SIG(-1 S2121C13_nt) C1{ m FC2{ m FL[2]}}


void  S2121C13_nt ::mf2121c13(){}

//skip512 S2121C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C17_nt  {
  ::S2121C13_nt s2121c17f0;
  void  mf2121c17(); // _ZN11S2121C17_nt9mf2121c17Ev
};
//SIG(-1 S2121C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2121C17_nt ::mf2121c17(){}

//skip512 S2121C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C18_nt  {
  ::S2121C13_nt s2121c18f0;
  ::S2121C13_nt s2121c18f1;
  ::S2121C13_nt s2121c18f2;
  ::S2121C13_nt s2121c18f3;
  void  mf2121c18(); // _ZN11S2121C18_nt9mf2121c18Ev
};
//SIG(-1 S2121C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2121C18_nt ::mf2121c18(){}

//skip512 S2121C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C21  {
  void  mf2121c21(); // _ZN8S2121C219mf2121c21Ev
};
//SIG(-1 S2121C21) C1{ m}


void  S2121C21 ::mf2121c21(){}

static void Test_S2121C21()
{
  {
    init_simple_test("S2121C21");
    S2121C21 lv;
    check2(sizeof(lv), 1, "sizeof(S2121C21)");
    check2(__alignof__(lv), 1, "__alignof__(S2121C21)");
  }
}
static Arrange_To_Call_Me vS2121C21(Test_S2121C21, "S2121C21", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2121C21[];
VTBL_ENTRY *P__ZTI8S2121C21 = _ZTI8S2121C21; 
Class_Descriptor cd_S2121C21 = {  "S2121C21", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2121C21),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C20_nt  {
  void *s2121c20f0;
  int s2121c20f1;
  ::S2121C21 s2121c20f2;
  void  mf2121c20(); // _ZN11S2121C20_nt9mf2121c20Ev
};
//SIG(-1 S2121C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2121C20_nt ::mf2121c20(){}

//skip512 S2121C20_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C19_nt  {
  ::S2121C20_nt s2121c19f0;
  int s2121c19f1;
  void  mf2121c19(); // _ZN11S2121C19_nt9mf2121c19Ev
};
//SIG(-1 S2121C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2121C19_nt ::mf2121c19(){}

//skip512 S2121C19_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C24  {
  void  mf2121c24(); // _ZN8S2121C249mf2121c24Ev
};
//SIG(-1 S2121C24) C1{ m}


void  S2121C24 ::mf2121c24(){}

static void Test_S2121C24()
{
  {
    init_simple_test("S2121C24");
    S2121C24 lv;
    check2(sizeof(lv), 1, "sizeof(S2121C24)");
    check2(__alignof__(lv), 1, "__alignof__(S2121C24)");
  }
}
static Arrange_To_Call_Me vS2121C24(Test_S2121C24, "S2121C24", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2121C24[];
VTBL_ENTRY *P__ZTI8S2121C24 = _ZTI8S2121C24; 
Class_Descriptor cd_S2121C24 = {  "S2121C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2121C24),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C22  {
  void *s2121c22f0;
  int s2121c22f1;
  ::S2121C21 s2121c22f2;
  ::S2121C24 s2121c22f3;
  void  mf2121c22(); // _ZN8S2121C229mf2121c22Ev
};
//SIG(-1 S2121C22) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2121C22 ::mf2121c22(){}

static void Test_S2121C22()
{
  {
    init_simple_test("S2121C22");
    S2121C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2121C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C22)");
    check_field_offset(lv, s2121c22f0, 0, "S2121C22.s2121c22f0");
    check_field_offset(lv, s2121c22f1, ABISELECT(8,4), "S2121C22.s2121c22f1");
    check_field_offset(lv, s2121c22f2, ABISELECT(12,8), "S2121C22.s2121c22f2");
    check_field_offset(lv, s2121c22f3, ABISELECT(13,9), "S2121C22.s2121c22f3");
  }
}
static Arrange_To_Call_Me vS2121C22(Test_S2121C22, "S2121C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C28  {
  void  mf2121c28(); // _ZN8S2121C289mf2121c28Ev
};
//SIG(-1 S2121C28) C1{ m}


void  S2121C28 ::mf2121c28(){}

static void Test_S2121C28()
{
  {
    init_simple_test("S2121C28");
    S2121C28 lv;
    check2(sizeof(lv), 1, "sizeof(S2121C28)");
    check2(__alignof__(lv), 1, "__alignof__(S2121C28)");
  }
}
static Arrange_To_Call_Me vS2121C28(Test_S2121C28, "S2121C28", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2121C28[];
VTBL_ENTRY *P__ZTI8S2121C28 = _ZTI8S2121C28; 
Class_Descriptor cd_S2121C28 = {  "S2121C28", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2121C28),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C26  {
  void *s2121c26f0;
  int s2121c26f1;
  ::S2121C24 s2121c26f2;
  ::S2121C28 s2121c26f3;
  void  mf2121c26(); // _ZN8S2121C269mf2121c26Ev
};
//SIG(-1 S2121C26) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2121C26 ::mf2121c26(){}

static void Test_S2121C26()
{
  {
    init_simple_test("S2121C26");
    S2121C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2121C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C26)");
    check_field_offset(lv, s2121c26f0, 0, "S2121C26.s2121c26f0");
    check_field_offset(lv, s2121c26f1, ABISELECT(8,4), "S2121C26.s2121c26f1");
    check_field_offset(lv, s2121c26f2, ABISELECT(12,8), "S2121C26.s2121c26f2");
    check_field_offset(lv, s2121c26f3, ABISELECT(13,9), "S2121C26.s2121c26f3");
  }
}
static Arrange_To_Call_Me vS2121C26(Test_S2121C26, "S2121C26", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S2121C26 = {  "S2121C26", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C25  : S2121C26 {
};
//SIG(-1 S2121C25) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S2121C25()
{
  extern Class_Descriptor cd_S2121C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2121C25, buf);
    S2121C25 &lv = *(new (buf) S2121C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2121C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C25)");
    check_base_class_offset(lv, (S2121C26*), 0, "S2121C25");
    test_class_info(&lv, &cd_S2121C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2121C25(Test_S2121C25, "S2121C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2121C26;
static Base_Class bases_S2121C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2121C25 = {  "S2121C25", // class name
  bases_S2121C25, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C29_nt  {
  void *s2121c29f0;
  int s2121c29f1[2];
  ::S2121C28 s2121c29f2;
  void  mf2121c29(); // _ZN11S2121C29_nt9mf2121c29Ev
};
//SIG(-1 S2121C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2121C29_nt ::mf2121c29(){}

//skip512 S2121C29_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C38  {
  void  mf2121c38(); // _ZN8S2121C389mf2121c38Ev
};
//SIG(-1 S2121C38) C1{ m}


void  S2121C38 ::mf2121c38(){}

static void Test_S2121C38()
{
  {
    init_simple_test("S2121C38");
    S2121C38 lv;
    check2(sizeof(lv), 1, "sizeof(S2121C38)");
    check2(__alignof__(lv), 1, "__alignof__(S2121C38)");
  }
}
static Arrange_To_Call_Me vS2121C38(Test_S2121C38, "S2121C38", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2121C38[];
VTBL_ENTRY *P__ZTI8S2121C38 = _ZTI8S2121C38; 
Class_Descriptor cd_S2121C38 = {  "S2121C38", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2121C38),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C37  {
  void *s2121c37f0;
  int s2121c37f1[2];
  ::S2121C38 s2121c37f2;
  void  mf2121c37(); // _ZN8S2121C379mf2121c37Ev
};
//SIG(-1 S2121C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2121C37 ::mf2121c37(){}

static void Test_S2121C37()
{
  {
    init_simple_test("S2121C37");
    S2121C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2121C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C37)");
    check_field_offset(lv, s2121c37f0, 0, "S2121C37.s2121c37f0");
    check_field_offset(lv, s2121c37f1, ABISELECT(8,4), "S2121C37.s2121c37f1");
    check_field_offset(lv, s2121c37f2, ABISELECT(16,12), "S2121C37.s2121c37f2");
  }
}
static Arrange_To_Call_Me vS2121C37(Test_S2121C37, "S2121C37", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C3_nt  : S2121C4_nt {
  ::S2121C13_nt s2121c3f0;
  ::S2121C13_nt s2121c3f1;
  ::S2121C13_nt s2121c3f2;
  ::S2121C13_nt s2121c3f3;
  ::S2121C17_nt s2121c3f4;
  ::S2121C18_nt s2121c3f5;
  ::S2121C18_nt s2121c3f6;
  ::S2121C13_nt s2121c3f7;
  ::S2121C13_nt s2121c3f8;
  ::S2121C13_nt s2121c3f9;
  void *s2121c3f10;
  ::S2121C17_nt s2121c3f11;
  ::S2121C19_nt s2121c3f12;
  int s2121c3f13;
  void *s2121c3f14[7];
  ::S2121C22 s2121c3f15;
  int s2121c3f16:8;
  int s2121c3f17:8;
  int s2121c3f18:16;
  int s2121c3f19:16;
  int s2121c3f20:8;
  int s2121c3f21:8;
  int s2121c3f22:8;
  int s2121c3f23:32;
  int s2121c3f24:8;
  int s2121c3f25:4;
  int s2121c3f26:4;
  int s2121c3f27:4;
  int s2121c3f28:4;
  int s2121c3f29:4;
  int s2121c3f30:4;
  int s2121c3f31:4;
  int s2121c3f32:4;
  int s2121c3f33:4;
  int s2121c3f34:4;
  unsigned char s2121c3f35:1;
  unsigned char s2121c3f36:1;
  unsigned char s2121c3f37:1;
  unsigned char s2121c3f38:1;
  unsigned char s2121c3f39:1;
  unsigned char s2121c3f40:1;
  unsigned char s2121c3f41:1;
  unsigned char s2121c3f42:1;
  unsigned char s2121c3f43:1;
  unsigned char s2121c3f44:1;
  unsigned char s2121c3f45:1;
  unsigned char s2121c3f46:1;
  unsigned char s2121c3f47:1;
  unsigned char s2121c3f48:1;
  unsigned char s2121c3f49:1;
  unsigned char s2121c3f50:1;
  unsigned char s2121c3f51:1;
  unsigned char s2121c3f52:1;
  unsigned char s2121c3f53:1;
  unsigned char s2121c3f54:1;
  unsigned char s2121c3f55:1;
  unsigned char s2121c3f56:1;
  unsigned char s2121c3f57:1;
  unsigned char s2121c3f58:1;
  unsigned char s2121c3f59:1;
  unsigned char s2121c3f60:1;
  unsigned char s2121c3f61:1;
  unsigned char s2121c3f62:1;
  unsigned char s2121c3f63:1;
  unsigned char s2121c3f64:1;
  unsigned char s2121c3f65:1;
  unsigned char s2121c3f66:1;
  unsigned char s2121c3f67:1;
  unsigned char s2121c3f68:1;
  unsigned char s2121c3f69:1;
  unsigned char s2121c3f70:1;
  unsigned char s2121c3f71:1;
  unsigned char s2121c3f72:1;
  unsigned char s2121c3f73:1;
  unsigned char s2121c3f74:1;
  unsigned char s2121c3f75:1;
  int s2121c3f76[7];
  void *s2121c3f77[6];
  int s2121c3f78:8;
  int s2121c3f79:8;
  int s2121c3f80:8;
  int s2121c3f81:8;
  int s2121c3f82:8;
  int s2121c3f83:8;
  ::S2121C25 s2121c3f84;
  void *s2121c3f85[4];
  int s2121c3f86:8;
  int s2121c3f87:8;
  int s2121c3f88:8;
  int s2121c3f89:8;
  int s2121c3f90:8;
  int s2121c3f91:16;
  int s2121c3f92:16;
  int s2121c3f93:16;
  int s2121c3f94:4;
  int s2121c3f95:4;
  int s2121c3f96:4;
  int s2121c3f97:4;
  int s2121c3f98:4;
  int s2121c3f99:4;
  int s2121c3f100:4;
  int s2121c3f101:4;
  int s2121c3f102:4;
  int s2121c3f103:4;
  int s2121c3f104:4;
  int s2121c3f105:4;
  int s2121c3f106:8;
  int s2121c3f107:8;
  int s2121c3f108:8;
  void *s2121c3f109[7];
  ::S2121C29_nt s2121c3f110;
  void *s2121c3f111[2];
  int s2121c3f112:16;
  int s2121c3f113:16;
  ::S2121C25 s2121c3f114;
  ::S2121C29_nt s2121c3f115;
  ::S2121C37 s2121c3f116;
  void *s2121c3f117[2];
  int s2121c3f118:24;
  int s2121c3f119:8;
  void *s2121c3f120;
  virtual  ~S2121C3_nt(); // _ZN10S2121C3_ntD1Ev
  virtual void  v25(); // _ZN10S2121C3_nt3v25Ev
  virtual void  v26(); // _ZN10S2121C3_nt3v26Ev
  virtual void  v27(); // _ZN10S2121C3_nt3v27Ev
  virtual void  v28(); // _ZN10S2121C3_nt3v28Ev
  virtual void  v29(); // _ZN10S2121C3_nt3v29Ev
  virtual void  v30(); // _ZN10S2121C3_nt3v30Ev
  virtual void  v31(); // _ZN10S2121C3_nt3v31Ev
  virtual void  v32(); // _ZN10S2121C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2121C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2121C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2121C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2121C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2121C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2121C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2121C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2121C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2121C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2121C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2121C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2121C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2121C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2121C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2121C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2121C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2121C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2121C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2121C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2121C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2121C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2121C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2121C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2121C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2121C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2121C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2121C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2121C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2121C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2121C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2121C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2121C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2121C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2121C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2121C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2121C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2121C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2121C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2121C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2121C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2121C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2121C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2121C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2121C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2121C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2121C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2121C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2121C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2121C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2121C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2121C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2121C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2121C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2121C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2121C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2121C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2121C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2121C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2121C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2121C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2121C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2121C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2121C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2121C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2121C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2121C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2121C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2121C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2121C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2121C3_nt4v102Ev
  S2121C3_nt(); // tgen
};
//SIG(-1 S2121C3_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC5}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC6{ m FC7{ m FL[2]}} FC6 FC6 FC6 FC8{ m FC6} FC9{ m FC6 FC6 FC6 FC6} FC9 FC6 FC6 FC6 Fp FC8 FC10{ m FC11{ m Fp Fi FC12{ m}} Fi} Fi Fp[7] FC13{ m Fp Fi FC12 FC14{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC14 FC17{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC17} Fp[2] Fi:16 Fi:16 FC15 FC18 FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:24 Fi:8 Fp}


 S2121C3_nt ::~S2121C3_nt(){ note_dtor("S2121C3_nt", this);}
void  S2121C3_nt ::v25(){vfunc_called(this, "_ZN10S2121C3_nt3v25Ev");}
void  S2121C3_nt ::v26(){vfunc_called(this, "_ZN10S2121C3_nt3v26Ev");}
void  S2121C3_nt ::v27(){vfunc_called(this, "_ZN10S2121C3_nt3v27Ev");}
void  S2121C3_nt ::v28(){vfunc_called(this, "_ZN10S2121C3_nt3v28Ev");}
void  S2121C3_nt ::v29(){vfunc_called(this, "_ZN10S2121C3_nt3v29Ev");}
void  S2121C3_nt ::v30(){vfunc_called(this, "_ZN10S2121C3_nt3v30Ev");}
void  S2121C3_nt ::v31(){vfunc_called(this, "_ZN10S2121C3_nt3v31Ev");}
void  S2121C3_nt ::v32(){vfunc_called(this, "_ZN10S2121C3_nt3v32Ev");}
void  S2121C3_nt ::v33(){vfunc_called(this, "_ZN10S2121C3_nt3v33Ev");}
void  S2121C3_nt ::v34(){vfunc_called(this, "_ZN10S2121C3_nt3v34Ev");}
void  S2121C3_nt ::v35(){vfunc_called(this, "_ZN10S2121C3_nt3v35Ev");}
void  S2121C3_nt ::v36(){vfunc_called(this, "_ZN10S2121C3_nt3v36Ev");}
void  S2121C3_nt ::v37(){vfunc_called(this, "_ZN10S2121C3_nt3v37Ev");}
void  S2121C3_nt ::v38(){vfunc_called(this, "_ZN10S2121C3_nt3v38Ev");}
void  S2121C3_nt ::v39(){vfunc_called(this, "_ZN10S2121C3_nt3v39Ev");}
void  S2121C3_nt ::v40(){vfunc_called(this, "_ZN10S2121C3_nt3v40Ev");}
void  S2121C3_nt ::v41(){vfunc_called(this, "_ZN10S2121C3_nt3v41Ev");}
void  S2121C3_nt ::v42(){vfunc_called(this, "_ZN10S2121C3_nt3v42Ev");}
void  S2121C3_nt ::v43(){vfunc_called(this, "_ZN10S2121C3_nt3v43Ev");}
void  S2121C3_nt ::v44(){vfunc_called(this, "_ZN10S2121C3_nt3v44Ev");}
void  S2121C3_nt ::v45(){vfunc_called(this, "_ZN10S2121C3_nt3v45Ev");}
void  S2121C3_nt ::v46(){vfunc_called(this, "_ZN10S2121C3_nt3v46Ev");}
void  S2121C3_nt ::v47(){vfunc_called(this, "_ZN10S2121C3_nt3v47Ev");}
void  S2121C3_nt ::v48(){vfunc_called(this, "_ZN10S2121C3_nt3v48Ev");}
void  S2121C3_nt ::v49(){vfunc_called(this, "_ZN10S2121C3_nt3v49Ev");}
void  S2121C3_nt ::v50(){vfunc_called(this, "_ZN10S2121C3_nt3v50Ev");}
void  S2121C3_nt ::v51(){vfunc_called(this, "_ZN10S2121C3_nt3v51Ev");}
void  S2121C3_nt ::v52(){vfunc_called(this, "_ZN10S2121C3_nt3v52Ev");}
void  S2121C3_nt ::v53(){vfunc_called(this, "_ZN10S2121C3_nt3v53Ev");}
void  S2121C3_nt ::v54(){vfunc_called(this, "_ZN10S2121C3_nt3v54Ev");}
void  S2121C3_nt ::v55(){vfunc_called(this, "_ZN10S2121C3_nt3v55Ev");}
void  S2121C3_nt ::v56(){vfunc_called(this, "_ZN10S2121C3_nt3v56Ev");}
void  S2121C3_nt ::v57(){vfunc_called(this, "_ZN10S2121C3_nt3v57Ev");}
void  S2121C3_nt ::v58(){vfunc_called(this, "_ZN10S2121C3_nt3v58Ev");}
void  S2121C3_nt ::v59(){vfunc_called(this, "_ZN10S2121C3_nt3v59Ev");}
void  S2121C3_nt ::v60(){vfunc_called(this, "_ZN10S2121C3_nt3v60Ev");}
void  S2121C3_nt ::v61(){vfunc_called(this, "_ZN10S2121C3_nt3v61Ev");}
void  S2121C3_nt ::v62(){vfunc_called(this, "_ZN10S2121C3_nt3v62Ev");}
void  S2121C3_nt ::v63(){vfunc_called(this, "_ZN10S2121C3_nt3v63Ev");}
void  S2121C3_nt ::v64(){vfunc_called(this, "_ZN10S2121C3_nt3v64Ev");}
void  S2121C3_nt ::v65(){vfunc_called(this, "_ZN10S2121C3_nt3v65Ev");}
void  S2121C3_nt ::v66(){vfunc_called(this, "_ZN10S2121C3_nt3v66Ev");}
void  S2121C3_nt ::v67(){vfunc_called(this, "_ZN10S2121C3_nt3v67Ev");}
void  S2121C3_nt ::v68(){vfunc_called(this, "_ZN10S2121C3_nt3v68Ev");}
void  S2121C3_nt ::v69(){vfunc_called(this, "_ZN10S2121C3_nt3v69Ev");}
void  S2121C3_nt ::v70(){vfunc_called(this, "_ZN10S2121C3_nt3v70Ev");}
void  S2121C3_nt ::v71(){vfunc_called(this, "_ZN10S2121C3_nt3v71Ev");}
void  S2121C3_nt ::v72(){vfunc_called(this, "_ZN10S2121C3_nt3v72Ev");}
void  S2121C3_nt ::v73(){vfunc_called(this, "_ZN10S2121C3_nt3v73Ev");}
void  S2121C3_nt ::v74(){vfunc_called(this, "_ZN10S2121C3_nt3v74Ev");}
void  S2121C3_nt ::v75(){vfunc_called(this, "_ZN10S2121C3_nt3v75Ev");}
void  S2121C3_nt ::v76(){vfunc_called(this, "_ZN10S2121C3_nt3v76Ev");}
void  S2121C3_nt ::v77(){vfunc_called(this, "_ZN10S2121C3_nt3v77Ev");}
void  S2121C3_nt ::v78(){vfunc_called(this, "_ZN10S2121C3_nt3v78Ev");}
void  S2121C3_nt ::v79(){vfunc_called(this, "_ZN10S2121C3_nt3v79Ev");}
void  S2121C3_nt ::v80(){vfunc_called(this, "_ZN10S2121C3_nt3v80Ev");}
void  S2121C3_nt ::v81(){vfunc_called(this, "_ZN10S2121C3_nt3v81Ev");}
void  S2121C3_nt ::v82(){vfunc_called(this, "_ZN10S2121C3_nt3v82Ev");}
void  S2121C3_nt ::v83(){vfunc_called(this, "_ZN10S2121C3_nt3v83Ev");}
void  S2121C3_nt ::v84(){vfunc_called(this, "_ZN10S2121C3_nt3v84Ev");}
void  S2121C3_nt ::v85(){vfunc_called(this, "_ZN10S2121C3_nt3v85Ev");}
void  S2121C3_nt ::v86(){vfunc_called(this, "_ZN10S2121C3_nt3v86Ev");}
void  S2121C3_nt ::v87(){vfunc_called(this, "_ZN10S2121C3_nt3v87Ev");}
void  S2121C3_nt ::v88(){vfunc_called(this, "_ZN10S2121C3_nt3v88Ev");}
void  S2121C3_nt ::v89(){vfunc_called(this, "_ZN10S2121C3_nt3v89Ev");}
void  S2121C3_nt ::v90(){vfunc_called(this, "_ZN10S2121C3_nt3v90Ev");}
void  S2121C3_nt ::v91(){vfunc_called(this, "_ZN10S2121C3_nt3v91Ev");}
void  S2121C3_nt ::v92(){vfunc_called(this, "_ZN10S2121C3_nt3v92Ev");}
void  S2121C3_nt ::v93(){vfunc_called(this, "_ZN10S2121C3_nt3v93Ev");}
void  S2121C3_nt ::v94(){vfunc_called(this, "_ZN10S2121C3_nt3v94Ev");}
void  S2121C3_nt ::v95(){vfunc_called(this, "_ZN10S2121C3_nt3v95Ev");}
void  S2121C3_nt ::v96(){vfunc_called(this, "_ZN10S2121C3_nt3v96Ev");}
void  S2121C3_nt ::v97(){vfunc_called(this, "_ZN10S2121C3_nt3v97Ev");}
void  S2121C3_nt ::v98(){vfunc_called(this, "_ZN10S2121C3_nt3v98Ev");}
void  S2121C3_nt ::v99(){vfunc_called(this, "_ZN10S2121C3_nt3v99Ev");}
void  S2121C3_nt ::v100(){vfunc_called(this, "_ZN10S2121C3_nt4v100Ev");}
void  S2121C3_nt ::v101(){vfunc_called(this, "_ZN10S2121C3_nt4v101Ev");}
void  S2121C3_nt ::v102(){vfunc_called(this, "_ZN10S2121C3_nt4v102Ev");}
S2121C3_nt ::S2121C3_nt(){ note_ctor("S2121C3_nt", this);} // tgen

//skip512 S2121C3_nt

#else // __cplusplus

extern void _ZN10S2121C3_ntC1Ev();
extern void _ZN10S2121C3_ntD1Ev();
Name_Map name_map_S2121C3_nt[] = {
  NSPAIR(_ZN10S2121C3_ntC1Ev),
  NSPAIR(_ZN10S2121C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C4_nt;
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
extern  VTBL_ENTRY _ZTV10S2121C4_nt[];
static Base_Class bases_S2121C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2121C3_nt[];
extern void _ZN10S2121C3_ntD1Ev();
extern void _ZN10S2121C3_ntD0Ev();
extern void _ZN10S2121C4_nt2v2Ev();
extern void _ZN10S2121C4_nt2v3Ev();
extern void _ZN10S2121C4_nt2v4Ev();
extern void _ZN10S2121C4_nt2v5Ev();
extern void _ZN10S2121C4_nt2v6Ev();
extern void _ZN10S2121C4_nt2v7Ev();
extern void _ZN10S2121C4_nt2v8Ev();
extern void _ZN10S2121C4_nt2v9Ev();
extern void _ZN10S2121C4_nt3v10Ev();
extern void _ZN10S2121C4_nt3v11Ev();
extern void _ZN10S2121C4_nt3v12Ev();
extern void _ZN10S2121C4_nt3v13Ev();
extern void _ZN10S2121C4_nt3v14Ev();
extern void _ZN10S2121C4_nt3v15Ev();
extern void _ZN10S2121C4_nt3v16Ev();
extern void _ZN10S2121C4_nt3v17Ev();
extern void _ZN10S2121C4_nt3v18Ev();
extern void _ZN10S2121C4_nt3v19Ev();
extern void _ZN10S2121C4_nt3v20Ev();
extern void _ZN10S2121C4_nt3v21Ev();
extern void _ZN10S2121C4_nt3v22Ev();
extern void _ZN10S2121C4_nt3v23Ev();
extern void _ZN10S2121C4_nt3v24Ev();
extern void _ZN10S2121C3_nt3v25Ev();
extern void _ZN10S2121C3_nt3v26Ev();
extern void _ZN10S2121C3_nt3v27Ev();
extern void _ZN10S2121C3_nt3v28Ev();
extern void _ZN10S2121C3_nt3v29Ev();
extern void _ZN10S2121C3_nt3v30Ev();
extern void _ZN10S2121C3_nt3v31Ev();
extern void _ZN10S2121C3_nt3v32Ev();
extern void _ZN10S2121C3_nt3v33Ev();
extern void _ZN10S2121C3_nt3v34Ev();
extern void _ZN10S2121C3_nt3v35Ev();
extern void _ZN10S2121C3_nt3v36Ev();
extern void _ZN10S2121C3_nt3v37Ev();
extern void _ZN10S2121C3_nt3v38Ev();
extern void _ZN10S2121C3_nt3v39Ev();
extern void _ZN10S2121C3_nt3v40Ev();
extern void _ZN10S2121C3_nt3v41Ev();
extern void _ZN10S2121C3_nt3v42Ev();
extern void _ZN10S2121C3_nt3v43Ev();
extern void _ZN10S2121C3_nt3v44Ev();
extern void _ZN10S2121C3_nt3v45Ev();
extern void _ZN10S2121C3_nt3v46Ev();
extern void _ZN10S2121C3_nt3v47Ev();
extern void _ZN10S2121C3_nt3v48Ev();
extern void _ZN10S2121C3_nt3v49Ev();
extern void _ZN10S2121C3_nt3v50Ev();
extern void _ZN10S2121C3_nt3v51Ev();
extern void _ZN10S2121C3_nt3v52Ev();
extern void _ZN10S2121C3_nt3v53Ev();
extern void _ZN10S2121C3_nt3v54Ev();
extern void _ZN10S2121C3_nt3v55Ev();
extern void _ZN10S2121C3_nt3v56Ev();
extern void _ZN10S2121C3_nt3v57Ev();
extern void _ZN10S2121C3_nt3v58Ev();
extern void _ZN10S2121C3_nt3v59Ev();
extern void _ZN10S2121C3_nt3v60Ev();
extern void _ZN10S2121C3_nt3v61Ev();
extern void _ZN10S2121C3_nt3v62Ev();
extern void _ZN10S2121C3_nt3v63Ev();
extern void _ZN10S2121C3_nt3v64Ev();
extern void _ZN10S2121C3_nt3v65Ev();
extern void _ZN10S2121C3_nt3v66Ev();
extern void _ZN10S2121C3_nt3v67Ev();
extern void _ZN10S2121C3_nt3v68Ev();
extern void _ZN10S2121C3_nt3v69Ev();
extern void _ZN10S2121C3_nt3v70Ev();
extern void _ZN10S2121C3_nt3v71Ev();
extern void _ZN10S2121C3_nt3v72Ev();
extern void _ZN10S2121C3_nt3v73Ev();
extern void _ZN10S2121C3_nt3v74Ev();
extern void _ZN10S2121C3_nt3v75Ev();
extern void _ZN10S2121C3_nt3v76Ev();
extern void _ZN10S2121C3_nt3v77Ev();
extern void _ZN10S2121C3_nt3v78Ev();
extern void _ZN10S2121C3_nt3v79Ev();
extern void _ZN10S2121C3_nt3v80Ev();
extern void _ZN10S2121C3_nt3v81Ev();
extern void _ZN10S2121C3_nt3v82Ev();
extern void _ZN10S2121C3_nt3v83Ev();
extern void _ZN10S2121C3_nt3v84Ev();
extern void _ZN10S2121C3_nt3v85Ev();
extern void _ZN10S2121C3_nt3v86Ev();
extern void _ZN10S2121C3_nt3v87Ev();
extern void _ZN10S2121C3_nt3v88Ev();
extern void _ZN10S2121C3_nt3v89Ev();
extern void _ZN10S2121C3_nt3v90Ev();
extern void _ZN10S2121C3_nt3v91Ev();
extern void _ZN10S2121C3_nt3v92Ev();
extern void _ZN10S2121C3_nt3v93Ev();
extern void _ZN10S2121C3_nt3v94Ev();
extern void _ZN10S2121C3_nt3v95Ev();
extern void _ZN10S2121C3_nt3v96Ev();
extern void _ZN10S2121C3_nt3v97Ev();
extern void _ZN10S2121C3_nt3v98Ev();
extern void _ZN10S2121C3_nt3v99Ev();
extern void _ZN10S2121C3_nt4v100Ev();
extern void _ZN10S2121C3_nt4v101Ev();
extern void _ZN10S2121C3_nt4v102Ev();
static  VTBL_ENTRY vtc_S2121C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2121C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2121C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v102Ev,
};
extern VTBL_ENTRY _ZTI10S2121C3_nt[];
VTBL_ENTRY *P__ZTI10S2121C3_nt = _ZTI10S2121C3_nt; 
extern  VTBL_ENTRY _ZTV10S2121C3_nt[];
Class_Descriptor cd_S2121C3_nt = {  "S2121C3_nt", // class name
  bases_S2121C3_nt, 1,
  &(vtc_S2121C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2121C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2121C3_nt),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C2_nt  : S2121C3_nt {
  void *s2121c2f0;
  virtual  ~S2121C2_nt(); // _ZN10S2121C2_ntD1Ev
  virtual void  v103(); // _ZN10S2121C2_nt4v103Ev
  virtual void  v104(); // _ZN10S2121C2_nt4v104Ev
  virtual void  v105(); // _ZN10S2121C2_nt4v105Ev
  virtual void  v106(); // _ZN10S2121C2_nt4v106Ev
  virtual void  v107(); // _ZN10S2121C2_nt4v107Ev
  virtual void  v108(); // _ZN10S2121C2_nt4v108Ev
  virtual void  v109(); // _ZN10S2121C2_nt4v109Ev
  virtual void  v110(); // _ZN10S2121C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2121C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2121C2_nt4v112Ev
  S2121C2_nt(); // tgen
};
//SIG(-1 S2121C2_nt) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC4 Fi} vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC13{ m}} Fi} Fi Fp[7] FC14{ m Fp Fi FC13 FC15{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC15 FC18{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC18} Fp[2] Fi:16 Fi:16 FC16 FC19 FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp}


 S2121C2_nt ::~S2121C2_nt(){ note_dtor("S2121C2_nt", this);}
void  S2121C2_nt ::v103(){vfunc_called(this, "_ZN10S2121C2_nt4v103Ev");}
void  S2121C2_nt ::v104(){vfunc_called(this, "_ZN10S2121C2_nt4v104Ev");}
void  S2121C2_nt ::v105(){vfunc_called(this, "_ZN10S2121C2_nt4v105Ev");}
void  S2121C2_nt ::v106(){vfunc_called(this, "_ZN10S2121C2_nt4v106Ev");}
void  S2121C2_nt ::v107(){vfunc_called(this, "_ZN10S2121C2_nt4v107Ev");}
void  S2121C2_nt ::v108(){vfunc_called(this, "_ZN10S2121C2_nt4v108Ev");}
void  S2121C2_nt ::v109(){vfunc_called(this, "_ZN10S2121C2_nt4v109Ev");}
void  S2121C2_nt ::v110(){vfunc_called(this, "_ZN10S2121C2_nt4v110Ev");}
void  S2121C2_nt ::v111(){vfunc_called(this, "_ZN10S2121C2_nt4v111Ev");}
void  S2121C2_nt ::v112(){vfunc_called(this, "_ZN10S2121C2_nt4v112Ev");}
S2121C2_nt ::S2121C2_nt(){ note_ctor("S2121C2_nt", this);} // tgen

//skip512 S2121C2_nt

#else // __cplusplus

extern void _ZN10S2121C2_ntC1Ev();
extern void _ZN10S2121C2_ntD1Ev();
Name_Map name_map_S2121C2_nt[] = {
  NSPAIR(_ZN10S2121C2_ntC1Ev),
  NSPAIR(_ZN10S2121C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C4_nt;
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
extern  VTBL_ENTRY _ZTV10S2121C4_nt[];
extern Class_Descriptor cd_S2121C3_nt;
extern VTBL_ENTRY _ZTI10S2121C3_nt[];
extern  VTBL_ENTRY _ZTV10S2121C3_nt[];
static Base_Class bases_S2121C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2121C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2121C2_nt[];
extern void _ZN10S2121C2_ntD1Ev();
extern void _ZN10S2121C2_ntD0Ev();
extern void _ZN10S2121C4_nt2v2Ev();
extern void _ZN10S2121C4_nt2v3Ev();
extern void _ZN10S2121C4_nt2v4Ev();
extern void _ZN10S2121C4_nt2v5Ev();
extern void _ZN10S2121C4_nt2v6Ev();
extern void _ZN10S2121C4_nt2v7Ev();
extern void _ZN10S2121C4_nt2v8Ev();
extern void _ZN10S2121C4_nt2v9Ev();
extern void _ZN10S2121C4_nt3v10Ev();
extern void _ZN10S2121C4_nt3v11Ev();
extern void _ZN10S2121C4_nt3v12Ev();
extern void _ZN10S2121C4_nt3v13Ev();
extern void _ZN10S2121C4_nt3v14Ev();
extern void _ZN10S2121C4_nt3v15Ev();
extern void _ZN10S2121C4_nt3v16Ev();
extern void _ZN10S2121C4_nt3v17Ev();
extern void _ZN10S2121C4_nt3v18Ev();
extern void _ZN10S2121C4_nt3v19Ev();
extern void _ZN10S2121C4_nt3v20Ev();
extern void _ZN10S2121C4_nt3v21Ev();
extern void _ZN10S2121C4_nt3v22Ev();
extern void _ZN10S2121C4_nt3v23Ev();
extern void _ZN10S2121C4_nt3v24Ev();
extern void _ZN10S2121C3_nt3v25Ev();
extern void _ZN10S2121C3_nt3v26Ev();
extern void _ZN10S2121C3_nt3v27Ev();
extern void _ZN10S2121C3_nt3v28Ev();
extern void _ZN10S2121C3_nt3v29Ev();
extern void _ZN10S2121C3_nt3v30Ev();
extern void _ZN10S2121C3_nt3v31Ev();
extern void _ZN10S2121C3_nt3v32Ev();
extern void _ZN10S2121C3_nt3v33Ev();
extern void _ZN10S2121C3_nt3v34Ev();
extern void _ZN10S2121C3_nt3v35Ev();
extern void _ZN10S2121C3_nt3v36Ev();
extern void _ZN10S2121C3_nt3v37Ev();
extern void _ZN10S2121C3_nt3v38Ev();
extern void _ZN10S2121C3_nt3v39Ev();
extern void _ZN10S2121C3_nt3v40Ev();
extern void _ZN10S2121C3_nt3v41Ev();
extern void _ZN10S2121C3_nt3v42Ev();
extern void _ZN10S2121C3_nt3v43Ev();
extern void _ZN10S2121C3_nt3v44Ev();
extern void _ZN10S2121C3_nt3v45Ev();
extern void _ZN10S2121C3_nt3v46Ev();
extern void _ZN10S2121C3_nt3v47Ev();
extern void _ZN10S2121C3_nt3v48Ev();
extern void _ZN10S2121C3_nt3v49Ev();
extern void _ZN10S2121C3_nt3v50Ev();
extern void _ZN10S2121C3_nt3v51Ev();
extern void _ZN10S2121C3_nt3v52Ev();
extern void _ZN10S2121C3_nt3v53Ev();
extern void _ZN10S2121C3_nt3v54Ev();
extern void _ZN10S2121C3_nt3v55Ev();
extern void _ZN10S2121C3_nt3v56Ev();
extern void _ZN10S2121C3_nt3v57Ev();
extern void _ZN10S2121C3_nt3v58Ev();
extern void _ZN10S2121C3_nt3v59Ev();
extern void _ZN10S2121C3_nt3v60Ev();
extern void _ZN10S2121C3_nt3v61Ev();
extern void _ZN10S2121C3_nt3v62Ev();
extern void _ZN10S2121C3_nt3v63Ev();
extern void _ZN10S2121C3_nt3v64Ev();
extern void _ZN10S2121C3_nt3v65Ev();
extern void _ZN10S2121C3_nt3v66Ev();
extern void _ZN10S2121C3_nt3v67Ev();
extern void _ZN10S2121C3_nt3v68Ev();
extern void _ZN10S2121C3_nt3v69Ev();
extern void _ZN10S2121C3_nt3v70Ev();
extern void _ZN10S2121C3_nt3v71Ev();
extern void _ZN10S2121C3_nt3v72Ev();
extern void _ZN10S2121C3_nt3v73Ev();
extern void _ZN10S2121C3_nt3v74Ev();
extern void _ZN10S2121C3_nt3v75Ev();
extern void _ZN10S2121C3_nt3v76Ev();
extern void _ZN10S2121C3_nt3v77Ev();
extern void _ZN10S2121C3_nt3v78Ev();
extern void _ZN10S2121C3_nt3v79Ev();
extern void _ZN10S2121C3_nt3v80Ev();
extern void _ZN10S2121C3_nt3v81Ev();
extern void _ZN10S2121C3_nt3v82Ev();
extern void _ZN10S2121C3_nt3v83Ev();
extern void _ZN10S2121C3_nt3v84Ev();
extern void _ZN10S2121C3_nt3v85Ev();
extern void _ZN10S2121C3_nt3v86Ev();
extern void _ZN10S2121C3_nt3v87Ev();
extern void _ZN10S2121C3_nt3v88Ev();
extern void _ZN10S2121C3_nt3v89Ev();
extern void _ZN10S2121C3_nt3v90Ev();
extern void _ZN10S2121C3_nt3v91Ev();
extern void _ZN10S2121C3_nt3v92Ev();
extern void _ZN10S2121C3_nt3v93Ev();
extern void _ZN10S2121C3_nt3v94Ev();
extern void _ZN10S2121C3_nt3v95Ev();
extern void _ZN10S2121C3_nt3v96Ev();
extern void _ZN10S2121C3_nt3v97Ev();
extern void _ZN10S2121C3_nt3v98Ev();
extern void _ZN10S2121C3_nt3v99Ev();
extern void _ZN10S2121C3_nt4v100Ev();
extern void _ZN10S2121C3_nt4v101Ev();
extern void _ZN10S2121C3_nt4v102Ev();
extern void _ZN10S2121C2_nt4v103Ev();
extern void _ZN10S2121C2_nt4v104Ev();
extern void _ZN10S2121C2_nt4v105Ev();
extern void _ZN10S2121C2_nt4v106Ev();
extern void _ZN10S2121C2_nt4v107Ev();
extern void _ZN10S2121C2_nt4v108Ev();
extern void _ZN10S2121C2_nt4v109Ev();
extern void _ZN10S2121C2_nt4v110Ev();
extern void _ZN10S2121C2_nt4v111Ev();
extern void _ZN10S2121C2_nt4v112Ev();
static  VTBL_ENTRY vtc_S2121C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2121C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2121C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v112Ev,
};
extern VTBL_ENTRY _ZTI10S2121C2_nt[];
VTBL_ENTRY *P__ZTI10S2121C2_nt = _ZTI10S2121C2_nt; 
extern  VTBL_ENTRY _ZTV10S2121C2_nt[];
Class_Descriptor cd_S2121C2_nt = {  "S2121C2_nt", // class name
  bases_S2121C2_nt, 2,
  &(vtc_S2121C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI10S2121C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2121C2_nt),115, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C39_nt  {
  long s2121c39f0;
  void  mf2121c39(); // _ZN11S2121C39_nt9mf2121c39Ev
};
//SIG(-1 S2121C39_nt) C1{ m Fl}


void  S2121C39_nt ::mf2121c39(){}

//skip512 S2121C39_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2121C1  : S2121C2_nt {
  int s2121c1f0[3];
  ::S2121C39_nt s2121c1f1;
  int s2121c1f2[4];
  char s2121c1f3;
  int s2121c1f4[38];
  char s2121c1f5[12];
  void *s2121c1f6[3];
  ::S2121C13_nt s2121c1f7;
  ::S2121C13_nt s2121c1f8;
  ::S2121C13_nt s2121c1f9;
  virtual  ~S2121C1(); // _ZN7S2121C1D1Ev
  virtual void  v1(); // _ZN7S2121C12v1Ev
  S2121C1(); // tgen
};
//SIG(1 S2121C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC7}} FC5 Fi} vd v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC14{ m}} Fi} Fi Fp[7] FC15{ m Fp Fi FC14 FC16{ m}} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC16 FC19{ m}}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC19} Fp[2] Fi:16 Fi:16 FC17 FC20 FC21{ m Fp Fi[2] FC22{ m}} Fp[2] Fi:24 Fi:8 Fp} vd v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fp} vd v1 Fi[3] FC23{ m Fl} Fi[4] Fc Fi[38] Fc[12] Fp[3] FC8 FC8 FC8}


 S2121C1 ::~S2121C1(){ note_dtor("S2121C1", this);}
void  S2121C1 ::v1(){vfunc_called(this, "_ZN7S2121C12v1Ev");}
S2121C1 ::S2121C1(){ note_ctor("S2121C1", this);} // tgen

static void Test_S2121C1()
{
  extern Class_Descriptor cd_S2121C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(141,225)];
    init_test(&cd_S2121C1, buf);
    S2121C1 *dp, &lv = *(dp=new (buf) S2121C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1120,896), "sizeof(S2121C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2121C1)");
    check_base_class_offset(lv, (S2121C4_nt*)(S2121C3_nt*)(S2121C2_nt*), 0, "S2121C1");
    check_base_class_offset(lv, (S2121C3_nt*)(S2121C2_nt*), 0, "S2121C1");
    check_base_class_offset(lv, (S2121C2_nt*), 0, "S2121C1");
    check_field_offset(lv, s2121c1f0, ABISELECT(840,636), "S2121C1.s2121c1f0");
    check_field_offset(lv, s2121c1f1, ABISELECT(856,648), "S2121C1.s2121c1f1");
    check_field_offset(lv, s2121c1f2, ABISELECT(864,652), "S2121C1.s2121c1f2");
    check_field_offset(lv, s2121c1f3, ABISELECT(880,668), "S2121C1.s2121c1f3");
    check_field_offset(lv, s2121c1f4, ABISELECT(884,672), "S2121C1.s2121c1f4");
    check_field_offset(lv, s2121c1f5, ABISELECT(1036,824), "S2121C1.s2121c1f5");
    check_field_offset(lv, s2121c1f6, ABISELECT(1048,836), "S2121C1.s2121c1f6");
    check_field_offset(lv, s2121c1f7, ABISELECT(1072,848), "S2121C1.s2121c1f7");
    check_field_offset(lv, s2121c1f8, ABISELECT(1088,864), "S2121C1.s2121c1f8");
    check_field_offset(lv, s2121c1f9, ABISELECT(1104,880), "S2121C1.s2121c1f9");
    test_class_info(&lv, &cd_S2121C1);
    dp->~S2121C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2121C1(Test_S2121C1, "S2121C1", ABISELECT(1120,896));

#else // __cplusplus

extern void _ZN7S2121C1C1Ev();
extern void _ZN7S2121C1D1Ev();
Name_Map name_map_S2121C1[] = {
  NSPAIR(_ZN7S2121C1C1Ev),
  NSPAIR(_ZN7S2121C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C4_nt;
extern VTBL_ENTRY _ZTI10S2121C4_nt[];
extern  VTBL_ENTRY _ZTV10S2121C4_nt[];
extern Class_Descriptor cd_S2121C3_nt;
extern VTBL_ENTRY _ZTI10S2121C3_nt[];
extern  VTBL_ENTRY _ZTV10S2121C3_nt[];
extern Class_Descriptor cd_S2121C2_nt;
extern VTBL_ENTRY _ZTI10S2121C2_nt[];
extern  VTBL_ENTRY _ZTV10S2121C2_nt[];
static Base_Class bases_S2121C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2121C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2121C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2121C1[];
extern void _ZN7S2121C1D1Ev();
extern void _ZN7S2121C1D0Ev();
extern void _ZN10S2121C4_nt2v2Ev();
extern void _ZN10S2121C4_nt2v3Ev();
extern void _ZN10S2121C4_nt2v4Ev();
extern void _ZN10S2121C4_nt2v5Ev();
extern void _ZN10S2121C4_nt2v6Ev();
extern void _ZN10S2121C4_nt2v7Ev();
extern void _ZN10S2121C4_nt2v8Ev();
extern void _ZN10S2121C4_nt2v9Ev();
extern void _ZN10S2121C4_nt3v10Ev();
extern void _ZN10S2121C4_nt3v11Ev();
extern void _ZN10S2121C4_nt3v12Ev();
extern void _ZN10S2121C4_nt3v13Ev();
extern void _ZN10S2121C4_nt3v14Ev();
extern void _ZN10S2121C4_nt3v15Ev();
extern void _ZN10S2121C4_nt3v16Ev();
extern void _ZN10S2121C4_nt3v17Ev();
extern void _ZN10S2121C4_nt3v18Ev();
extern void _ZN10S2121C4_nt3v19Ev();
extern void _ZN10S2121C4_nt3v20Ev();
extern void _ZN10S2121C4_nt3v21Ev();
extern void _ZN10S2121C4_nt3v22Ev();
extern void _ZN10S2121C4_nt3v23Ev();
extern void _ZN10S2121C4_nt3v24Ev();
extern void _ZN10S2121C3_nt3v25Ev();
extern void _ZN10S2121C3_nt3v26Ev();
extern void _ZN10S2121C3_nt3v27Ev();
extern void _ZN10S2121C3_nt3v28Ev();
extern void _ZN10S2121C3_nt3v29Ev();
extern void _ZN10S2121C3_nt3v30Ev();
extern void _ZN10S2121C3_nt3v31Ev();
extern void _ZN10S2121C3_nt3v32Ev();
extern void _ZN10S2121C3_nt3v33Ev();
extern void _ZN10S2121C3_nt3v34Ev();
extern void _ZN10S2121C3_nt3v35Ev();
extern void _ZN10S2121C3_nt3v36Ev();
extern void _ZN10S2121C3_nt3v37Ev();
extern void _ZN10S2121C3_nt3v38Ev();
extern void _ZN10S2121C3_nt3v39Ev();
extern void _ZN10S2121C3_nt3v40Ev();
extern void _ZN10S2121C3_nt3v41Ev();
extern void _ZN10S2121C3_nt3v42Ev();
extern void _ZN10S2121C3_nt3v43Ev();
extern void _ZN10S2121C3_nt3v44Ev();
extern void _ZN10S2121C3_nt3v45Ev();
extern void _ZN10S2121C3_nt3v46Ev();
extern void _ZN10S2121C3_nt3v47Ev();
extern void _ZN10S2121C3_nt3v48Ev();
extern void _ZN10S2121C3_nt3v49Ev();
extern void _ZN10S2121C3_nt3v50Ev();
extern void _ZN10S2121C3_nt3v51Ev();
extern void _ZN10S2121C3_nt3v52Ev();
extern void _ZN10S2121C3_nt3v53Ev();
extern void _ZN10S2121C3_nt3v54Ev();
extern void _ZN10S2121C3_nt3v55Ev();
extern void _ZN10S2121C3_nt3v56Ev();
extern void _ZN10S2121C3_nt3v57Ev();
extern void _ZN10S2121C3_nt3v58Ev();
extern void _ZN10S2121C3_nt3v59Ev();
extern void _ZN10S2121C3_nt3v60Ev();
extern void _ZN10S2121C3_nt3v61Ev();
extern void _ZN10S2121C3_nt3v62Ev();
extern void _ZN10S2121C3_nt3v63Ev();
extern void _ZN10S2121C3_nt3v64Ev();
extern void _ZN10S2121C3_nt3v65Ev();
extern void _ZN10S2121C3_nt3v66Ev();
extern void _ZN10S2121C3_nt3v67Ev();
extern void _ZN10S2121C3_nt3v68Ev();
extern void _ZN10S2121C3_nt3v69Ev();
extern void _ZN10S2121C3_nt3v70Ev();
extern void _ZN10S2121C3_nt3v71Ev();
extern void _ZN10S2121C3_nt3v72Ev();
extern void _ZN10S2121C3_nt3v73Ev();
extern void _ZN10S2121C3_nt3v74Ev();
extern void _ZN10S2121C3_nt3v75Ev();
extern void _ZN10S2121C3_nt3v76Ev();
extern void _ZN10S2121C3_nt3v77Ev();
extern void _ZN10S2121C3_nt3v78Ev();
extern void _ZN10S2121C3_nt3v79Ev();
extern void _ZN10S2121C3_nt3v80Ev();
extern void _ZN10S2121C3_nt3v81Ev();
extern void _ZN10S2121C3_nt3v82Ev();
extern void _ZN10S2121C3_nt3v83Ev();
extern void _ZN10S2121C3_nt3v84Ev();
extern void _ZN10S2121C3_nt3v85Ev();
extern void _ZN10S2121C3_nt3v86Ev();
extern void _ZN10S2121C3_nt3v87Ev();
extern void _ZN10S2121C3_nt3v88Ev();
extern void _ZN10S2121C3_nt3v89Ev();
extern void _ZN10S2121C3_nt3v90Ev();
extern void _ZN10S2121C3_nt3v91Ev();
extern void _ZN10S2121C3_nt3v92Ev();
extern void _ZN10S2121C3_nt3v93Ev();
extern void _ZN10S2121C3_nt3v94Ev();
extern void _ZN10S2121C3_nt3v95Ev();
extern void _ZN10S2121C3_nt3v96Ev();
extern void _ZN10S2121C3_nt3v97Ev();
extern void _ZN10S2121C3_nt3v98Ev();
extern void _ZN10S2121C3_nt3v99Ev();
extern void _ZN10S2121C3_nt4v100Ev();
extern void _ZN10S2121C3_nt4v101Ev();
extern void _ZN10S2121C3_nt4v102Ev();
extern void _ZN10S2121C2_nt4v103Ev();
extern void _ZN10S2121C2_nt4v104Ev();
extern void _ZN10S2121C2_nt4v105Ev();
extern void _ZN10S2121C2_nt4v106Ev();
extern void _ZN10S2121C2_nt4v107Ev();
extern void _ZN10S2121C2_nt4v108Ev();
extern void _ZN10S2121C2_nt4v109Ev();
extern void _ZN10S2121C2_nt4v110Ev();
extern void _ZN10S2121C2_nt4v111Ev();
extern void _ZN10S2121C2_nt4v112Ev();
extern void _ZN7S2121C12v1Ev();
static  VTBL_ENTRY vtc_S2121C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2121C1[0]),
  (VTBL_ENTRY)&_ZN7S2121C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2121C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2121C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2121C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2121C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN7S2121C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2121C1[];
extern  VTBL_ENTRY _ZTV7S2121C1[];
Class_Descriptor cd_S2121C1 = {  "S2121C1", // class name
  bases_S2121C1, 3,
  &(vtc_S2121C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1120,896), // object size
  NSPAIRA(_ZTI7S2121C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2121C1),116, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C6  {
  int s287c6f0;
  __tsi64 s287c6f1;
  void *s287c6f2[4];
  int s287c6f3[2];
  void *s287c6f4;
  ::S3350C4_nt s287c6f5;
  void *s287c6f6[2];
  virtual  ~S287C6(); // _ZN6S287C6D1Ev
  virtual void  v9(); // _ZN6S287C62v9Ev
  virtual void  v10(); // _ZN6S287C63v10Ev
  virtual void  v11(); // _ZN6S287C63v11Ev
  virtual void  v12(); // _ZN6S287C63v12Ev
  virtual void  v13(); // _ZN6S287C63v13Ev
  virtual void  v14(); // _ZN6S287C63v14Ev
  virtual void  v15(); // _ZN6S287C63v15Ev
  virtual void  v16(); // _ZN6S287C63v16Ev
  virtual void  v17(); // _ZN6S287C63v17Ev
  virtual void  v18(); // _ZN6S287C63v18Ev
  virtual void  v19(); // _ZN6S287C63v19Ev
  virtual void  v20(); // _ZN6S287C63v20Ev
  virtual void  v21(); // _ZN6S287C63v21Ev
  virtual void  v22(); // _ZN6S287C63v22Ev
  virtual void  v23(); // _ZN6S287C63v23Ev
  virtual void  v24(); // _ZN6S287C63v24Ev
  virtual void  v25(); // _ZN6S287C63v25Ev
  virtual void  v26(); // _ZN6S287C63v26Ev
  virtual void  v27(); // _ZN6S287C63v27Ev
  virtual void  v28(); // _ZN6S287C63v28Ev
  virtual void  v29(); // _ZN6S287C63v29Ev
  virtual void  v30(); // _ZN6S287C63v30Ev
  virtual void  v31(); // _ZN6S287C63v31Ev
  virtual void  v32(); // _ZN6S287C63v32Ev
  virtual void  v33(); // _ZN6S287C63v33Ev
  virtual void  v34(); // _ZN6S287C63v34Ev
  virtual void  v35(); // _ZN6S287C63v35Ev
  virtual void  v36(); // _ZN6S287C63v36Ev
  virtual void  v37(); // _ZN6S287C63v37Ev
  virtual void  v38(); // _ZN6S287C63v38Ev
  virtual void  v39(); // _ZN6S287C63v39Ev
  virtual void  v40(); // _ZN6S287C63v40Ev
  virtual void  v41(); // _ZN6S287C63v41Ev
  virtual void  v42(); // _ZN6S287C63v42Ev
  virtual void  v43(); // _ZN6S287C63v43Ev
  virtual void  v44(); // _ZN6S287C63v44Ev
  virtual void  v45(); // _ZN6S287C63v45Ev
  virtual void  v46(); // _ZN6S287C63v46Ev
  virtual void  v47(); // _ZN6S287C63v47Ev
  virtual void  v48(); // _ZN6S287C63v48Ev
  virtual void  v49(); // _ZN6S287C63v49Ev
  virtual void  v50(); // _ZN6S287C63v50Ev
  virtual void  v51(); // _ZN6S287C63v51Ev
  virtual void  v52(); // _ZN6S287C63v52Ev
  virtual void  v53(); // _ZN6S287C63v53Ev
  virtual void  v54(); // _ZN6S287C63v54Ev
  virtual void  v55(); // _ZN6S287C63v55Ev
  virtual void  v56(); // _ZN6S287C63v56Ev
  virtual void  v57(); // _ZN6S287C63v57Ev
  virtual void  v58(); // _ZN6S287C63v58Ev
  virtual void  v59(); // _ZN6S287C63v59Ev
  virtual void  v60(); // _ZN6S287C63v60Ev
  virtual void  v61(); // _ZN6S287C63v61Ev
  virtual void  v62(); // _ZN6S287C63v62Ev
  virtual void  v63(); // _ZN6S287C63v63Ev
  virtual void  v64(); // _ZN6S287C63v64Ev
  virtual void  v65(); // _ZN6S287C63v65Ev
  virtual void  v66(); // _ZN6S287C63v66Ev
  virtual void  v67(); // _ZN6S287C63v67Ev
  virtual void  v68(); // _ZN6S287C63v68Ev
  virtual void  v69(); // _ZN6S287C63v69Ev
  virtual void  v70(); // _ZN6S287C63v70Ev
  virtual void  v71(); // _ZN6S287C63v71Ev
  virtual void  v72(); // _ZN6S287C63v72Ev
  S287C6(); // tgen
};
//SIG(-1 S287C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S287C6 ::~S287C6(){ note_dtor("S287C6", this);}
void  S287C6 ::v9(){vfunc_called(this, "_ZN6S287C62v9Ev");}
void  S287C6 ::v10(){vfunc_called(this, "_ZN6S287C63v10Ev");}
void  S287C6 ::v11(){vfunc_called(this, "_ZN6S287C63v11Ev");}
void  S287C6 ::v12(){vfunc_called(this, "_ZN6S287C63v12Ev");}
void  S287C6 ::v13(){vfunc_called(this, "_ZN6S287C63v13Ev");}
void  S287C6 ::v14(){vfunc_called(this, "_ZN6S287C63v14Ev");}
void  S287C6 ::v15(){vfunc_called(this, "_ZN6S287C63v15Ev");}
void  S287C6 ::v16(){vfunc_called(this, "_ZN6S287C63v16Ev");}
void  S287C6 ::v17(){vfunc_called(this, "_ZN6S287C63v17Ev");}
void  S287C6 ::v18(){vfunc_called(this, "_ZN6S287C63v18Ev");}
void  S287C6 ::v19(){vfunc_called(this, "_ZN6S287C63v19Ev");}
void  S287C6 ::v20(){vfunc_called(this, "_ZN6S287C63v20Ev");}
void  S287C6 ::v21(){vfunc_called(this, "_ZN6S287C63v21Ev");}
void  S287C6 ::v22(){vfunc_called(this, "_ZN6S287C63v22Ev");}
void  S287C6 ::v23(){vfunc_called(this, "_ZN6S287C63v23Ev");}
void  S287C6 ::v24(){vfunc_called(this, "_ZN6S287C63v24Ev");}
void  S287C6 ::v25(){vfunc_called(this, "_ZN6S287C63v25Ev");}
void  S287C6 ::v26(){vfunc_called(this, "_ZN6S287C63v26Ev");}
void  S287C6 ::v27(){vfunc_called(this, "_ZN6S287C63v27Ev");}
void  S287C6 ::v28(){vfunc_called(this, "_ZN6S287C63v28Ev");}
void  S287C6 ::v29(){vfunc_called(this, "_ZN6S287C63v29Ev");}
void  S287C6 ::v30(){vfunc_called(this, "_ZN6S287C63v30Ev");}
void  S287C6 ::v31(){vfunc_called(this, "_ZN6S287C63v31Ev");}
void  S287C6 ::v32(){vfunc_called(this, "_ZN6S287C63v32Ev");}
void  S287C6 ::v33(){vfunc_called(this, "_ZN6S287C63v33Ev");}
void  S287C6 ::v34(){vfunc_called(this, "_ZN6S287C63v34Ev");}
void  S287C6 ::v35(){vfunc_called(this, "_ZN6S287C63v35Ev");}
void  S287C6 ::v36(){vfunc_called(this, "_ZN6S287C63v36Ev");}
void  S287C6 ::v37(){vfunc_called(this, "_ZN6S287C63v37Ev");}
void  S287C6 ::v38(){vfunc_called(this, "_ZN6S287C63v38Ev");}
void  S287C6 ::v39(){vfunc_called(this, "_ZN6S287C63v39Ev");}
void  S287C6 ::v40(){vfunc_called(this, "_ZN6S287C63v40Ev");}
void  S287C6 ::v41(){vfunc_called(this, "_ZN6S287C63v41Ev");}
void  S287C6 ::v42(){vfunc_called(this, "_ZN6S287C63v42Ev");}
void  S287C6 ::v43(){vfunc_called(this, "_ZN6S287C63v43Ev");}
void  S287C6 ::v44(){vfunc_called(this, "_ZN6S287C63v44Ev");}
void  S287C6 ::v45(){vfunc_called(this, "_ZN6S287C63v45Ev");}
void  S287C6 ::v46(){vfunc_called(this, "_ZN6S287C63v46Ev");}
void  S287C6 ::v47(){vfunc_called(this, "_ZN6S287C63v47Ev");}
void  S287C6 ::v48(){vfunc_called(this, "_ZN6S287C63v48Ev");}
void  S287C6 ::v49(){vfunc_called(this, "_ZN6S287C63v49Ev");}
void  S287C6 ::v50(){vfunc_called(this, "_ZN6S287C63v50Ev");}
void  S287C6 ::v51(){vfunc_called(this, "_ZN6S287C63v51Ev");}
void  S287C6 ::v52(){vfunc_called(this, "_ZN6S287C63v52Ev");}
void  S287C6 ::v53(){vfunc_called(this, "_ZN6S287C63v53Ev");}
void  S287C6 ::v54(){vfunc_called(this, "_ZN6S287C63v54Ev");}
void  S287C6 ::v55(){vfunc_called(this, "_ZN6S287C63v55Ev");}
void  S287C6 ::v56(){vfunc_called(this, "_ZN6S287C63v56Ev");}
void  S287C6 ::v57(){vfunc_called(this, "_ZN6S287C63v57Ev");}
void  S287C6 ::v58(){vfunc_called(this, "_ZN6S287C63v58Ev");}
void  S287C6 ::v59(){vfunc_called(this, "_ZN6S287C63v59Ev");}
void  S287C6 ::v60(){vfunc_called(this, "_ZN6S287C63v60Ev");}
void  S287C6 ::v61(){vfunc_called(this, "_ZN6S287C63v61Ev");}
void  S287C6 ::v62(){vfunc_called(this, "_ZN6S287C63v62Ev");}
void  S287C6 ::v63(){vfunc_called(this, "_ZN6S287C63v63Ev");}
void  S287C6 ::v64(){vfunc_called(this, "_ZN6S287C63v64Ev");}
void  S287C6 ::v65(){vfunc_called(this, "_ZN6S287C63v65Ev");}
void  S287C6 ::v66(){vfunc_called(this, "_ZN6S287C63v66Ev");}
void  S287C6 ::v67(){vfunc_called(this, "_ZN6S287C63v67Ev");}
void  S287C6 ::v68(){vfunc_called(this, "_ZN6S287C63v68Ev");}
void  S287C6 ::v69(){vfunc_called(this, "_ZN6S287C63v69Ev");}
void  S287C6 ::v70(){vfunc_called(this, "_ZN6S287C63v70Ev");}
void  S287C6 ::v71(){vfunc_called(this, "_ZN6S287C63v71Ev");}
void  S287C6 ::v72(){vfunc_called(this, "_ZN6S287C63v72Ev");}
S287C6 ::S287C6(){ note_ctor("S287C6", this);} // tgen

static void Test_S287C6()
{
  extern Class_Descriptor cd_S287C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S287C6, buf);
    S287C6 *dp, &lv = *(dp=new (buf) S287C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S287C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C6)");
    check_field_offset(lv, s287c6f0, ABISELECT(8,4), "S287C6.s287c6f0");
    check_field_offset(lv, s287c6f1, ABISELECT(16,8), "S287C6.s287c6f1");
    check_field_offset(lv, s287c6f2, ABISELECT(24,16), "S287C6.s287c6f2");
    check_field_offset(lv, s287c6f3, ABISELECT(56,32), "S287C6.s287c6f3");
    check_field_offset(lv, s287c6f4, ABISELECT(64,40), "S287C6.s287c6f4");
    check_field_offset(lv, s287c6f5, ABISELECT(72,44), "S287C6.s287c6f5");
    check_field_offset(lv, s287c6f6, ABISELECT(80,52), "S287C6.s287c6f6");
    test_class_info(&lv, &cd_S287C6);
    dp->~S287C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C6(Test_S287C6, "S287C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S287C6C1Ev();
extern void _ZN6S287C6D1Ev();
Name_Map name_map_S287C6[] = {
  NSPAIR(_ZN6S287C6C1Ev),
  NSPAIR(_ZN6S287C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S287C6[];
extern void _ZN6S287C6D1Ev();
extern void _ZN6S287C6D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
static  VTBL_ENTRY vtc_S287C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C6[0]),
  (VTBL_ENTRY)&_ZN6S287C6D1Ev,
  (VTBL_ENTRY)&_ZN6S287C6D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
};
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
Class_Descriptor cd_S287C6 = {  "S287C6", // class name
  0,0,//no base classes
  &(vtc_S287C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S287C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S287C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C10  : S3350C7_nt {
};
//SIG(-1 S287C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S287C10()
{
  extern Class_Descriptor cd_S287C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C10, buf);
    S287C10 &lv = *(new (buf) S287C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C10)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S287C10");
    test_class_info(&lv, &cd_S287C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C10(Test_S287C10, "S287C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S287C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S287C10 = {  "S287C10", // class name
  bases_S287C10, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C9  : S287C10 {
};
//SIG(-1 S287C9) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S287C9()
{
  extern Class_Descriptor cd_S287C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C9, buf);
    S287C9 &lv = *(new (buf) S287C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C9)");
    check_base_class_offset(lv, (S3350C7_nt*)(S287C10*), 0, "S287C9");
    check_base_class_offset(lv, (S287C10*), 0, "S287C9");
    test_class_info(&lv, &cd_S287C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C9(Test_S287C9, "S287C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C10;
static Base_Class bases_S287C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S287C9 = {  "S287C9", // class name
  bases_S287C9, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C8_nt  : S287C9 {
};
//SIG(-1 S287C8_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S287C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C10;
extern Class_Descriptor cd_S287C9;
static Base_Class bases_S287C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S287C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C5  : S287C6 {
  int s287c5f0[2];
  void *s287c5f1;
  int s287c5f2[2];
  ::S287C8_nt s287c5f3;
  ::S287C8_nt s287c5f4;
  ::S2121C38 s287c5f5;
  ::S287C8_nt s287c5f6;
  unsigned int s287c5f7:1;
  unsigned int s287c5f8:1;
  unsigned int s287c5f9:1;
  unsigned int s287c5f10:1;
  unsigned int s287c5f11:1;
  int s287c5f12[2];
  virtual  ~S287C5(); // _ZN6S287C5D1Ev
  virtual void  v73(); // _ZN6S287C53v73Ev
  virtual void  v74(); // _ZN6S287C53v74Ev
  virtual void  v75(); // _ZN6S287C53v75Ev
  virtual void  v76(); // _ZN6S287C53v76Ev
  virtual void  v77(); // _ZN6S287C53v77Ev
  virtual void  v78(); // _ZN6S287C53v78Ev
  virtual void  v79(); // _ZN6S287C53v79Ev
  virtual void  v80(); // _ZN6S287C53v80Ev
  virtual void  v81(); // _ZN6S287C53v81Ev
  virtual void  v82(); // _ZN6S287C53v82Ev
  virtual void  v83(); // _ZN6S287C53v83Ev
  virtual void  v84(); // _ZN6S287C53v84Ev
  virtual void  v85(); // _ZN6S287C53v85Ev
  virtual void  v86(); // _ZN6S287C53v86Ev
  virtual void  v87(); // _ZN6S287C53v87Ev
  virtual void  v88(); // _ZN6S287C53v88Ev
  virtual void  v89(); // _ZN6S287C53v89Ev
  virtual void  v90(); // _ZN6S287C53v90Ev
  virtual void  v91(); // _ZN6S287C53v91Ev
  virtual void  v92(); // _ZN6S287C53v92Ev
  virtual void  v93(); // _ZN6S287C53v93Ev
  virtual void  v94(); // _ZN6S287C53v94Ev
  S287C5(); // tgen
};
//SIG(-1 S287C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S287C5 ::~S287C5(){ note_dtor("S287C5", this);}
void  S287C5 ::v73(){vfunc_called(this, "_ZN6S287C53v73Ev");}
void  S287C5 ::v74(){vfunc_called(this, "_ZN6S287C53v74Ev");}
void  S287C5 ::v75(){vfunc_called(this, "_ZN6S287C53v75Ev");}
void  S287C5 ::v76(){vfunc_called(this, "_ZN6S287C53v76Ev");}
void  S287C5 ::v77(){vfunc_called(this, "_ZN6S287C53v77Ev");}
void  S287C5 ::v78(){vfunc_called(this, "_ZN6S287C53v78Ev");}
void  S287C5 ::v79(){vfunc_called(this, "_ZN6S287C53v79Ev");}
void  S287C5 ::v80(){vfunc_called(this, "_ZN6S287C53v80Ev");}
void  S287C5 ::v81(){vfunc_called(this, "_ZN6S287C53v81Ev");}
void  S287C5 ::v82(){vfunc_called(this, "_ZN6S287C53v82Ev");}
void  S287C5 ::v83(){vfunc_called(this, "_ZN6S287C53v83Ev");}
void  S287C5 ::v84(){vfunc_called(this, "_ZN6S287C53v84Ev");}
void  S287C5 ::v85(){vfunc_called(this, "_ZN6S287C53v85Ev");}
void  S287C5 ::v86(){vfunc_called(this, "_ZN6S287C53v86Ev");}
void  S287C5 ::v87(){vfunc_called(this, "_ZN6S287C53v87Ev");}
void  S287C5 ::v88(){vfunc_called(this, "_ZN6S287C53v88Ev");}
void  S287C5 ::v89(){vfunc_called(this, "_ZN6S287C53v89Ev");}
void  S287C5 ::v90(){vfunc_called(this, "_ZN6S287C53v90Ev");}
void  S287C5 ::v91(){vfunc_called(this, "_ZN6S287C53v91Ev");}
void  S287C5 ::v92(){vfunc_called(this, "_ZN6S287C53v92Ev");}
void  S287C5 ::v93(){vfunc_called(this, "_ZN6S287C53v93Ev");}
void  S287C5 ::v94(){vfunc_called(this, "_ZN6S287C53v94Ev");}
S287C5 ::S287C5(){ note_ctor("S287C5", this);} // tgen

static void Test_S287C5()
{
  extern Class_Descriptor cd_S287C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S287C5, buf);
    S287C5 *dp, &lv = *(dp=new (buf) S287C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S287C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C5)");
    check_base_class_offset(lv, (S287C6*), 0, "S287C5");
    check_field_offset(lv, s287c5f0, ABISELECT(96,60), "S287C5.s287c5f0");
    check_field_offset(lv, s287c5f1, ABISELECT(104,68), "S287C5.s287c5f1");
    check_field_offset(lv, s287c5f2, ABISELECT(112,72), "S287C5.s287c5f2");
    check_field_offset(lv, s287c5f3, ABISELECT(120,80), "S287C5.s287c5f3");
    check_field_offset(lv, s287c5f4, ABISELECT(136,92), "S287C5.s287c5f4");
    check_field_offset(lv, s287c5f5, ABISELECT(152,104), "S287C5.s287c5f5");
    check_field_offset(lv, s287c5f6, ABISELECT(160,108), "S287C5.s287c5f6");
    set_bf_and_test(lv, s287c5f7, ABISELECT(176,120), 0, 1, 1, "S287C5");
    set_bf_and_test(lv, s287c5f8, ABISELECT(176,120), 1, 1, 1, "S287C5");
    set_bf_and_test(lv, s287c5f9, ABISELECT(176,120), 2, 1, 1, "S287C5");
    set_bf_and_test(lv, s287c5f10, ABISELECT(176,120), 3, 1, 1, "S287C5");
    set_bf_and_test(lv, s287c5f11, ABISELECT(176,120), 4, 1, 1, "S287C5");
    check_field_offset(lv, s287c5f12, ABISELECT(180,124), "S287C5.s287c5f12");
    test_class_info(&lv, &cd_S287C5);
    dp->~S287C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C5(Test_S287C5, "S287C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S287C5C1Ev();
extern void _ZN6S287C5D1Ev();
Name_Map name_map_S287C5[] = {
  NSPAIR(_ZN6S287C5C1Ev),
  NSPAIR(_ZN6S287C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
static Base_Class bases_S287C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S287C5[];
extern void _ZN6S287C5D1Ev();
extern void _ZN6S287C5D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
static  VTBL_ENTRY vtc_S287C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C5[0]),
  (VTBL_ENTRY)&_ZN6S287C5D1Ev,
  (VTBL_ENTRY)&_ZN6S287C5D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
};
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
Class_Descriptor cd_S287C5 = {  "S287C5", // class name
  bases_S287C5, 1,
  &(vtc_S287C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S287C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S287C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C20  : S3350C7_nt {
};
//SIG(-1 S287C20) C1{ BC2{ m Fp Fi[2]}}



static void Test_S287C20()
{
  extern Class_Descriptor cd_S287C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C20, buf);
    S287C20 &lv = *(new (buf) S287C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C20)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S287C20");
    test_class_info(&lv, &cd_S287C20);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C20(Test_S287C20, "S287C20", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S287C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S287C20 = {  "S287C20", // class name
  bases_S287C20, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C19  : S287C20 {
};
//SIG(-1 S287C19) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S287C19()
{
  extern Class_Descriptor cd_S287C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C19, buf);
    S287C19 &lv = *(new (buf) S287C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C19)");
    check_base_class_offset(lv, (S3350C7_nt*)(S287C20*), 0, "S287C19");
    check_base_class_offset(lv, (S287C20*), 0, "S287C19");
    test_class_info(&lv, &cd_S287C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C19(Test_S287C19, "S287C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C20;
static Base_Class bases_S287C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S287C19 = {  "S287C19", // class name
  bases_S287C19, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C4  : S287C5 {
  unsigned int s287c4f0:1;
  unsigned int s287c4f1:1;
  unsigned int s287c4f2:1;
  ::S3350C17 s287c4f3;
  ::S3350C11 s287c4f4;
  ::S3350C5_nt s287c4f5;
  ::S287C19 s287c4f6;
  int s287c4f7[3];
  virtual  ~S287C4(); // _ZN6S287C4D1Ev
  virtual void  v95(); // _ZN6S287C43v95Ev
  virtual void  v96(); // _ZN6S287C43v96Ev
  virtual void  v97(); // _ZN6S287C43v97Ev
  virtual void  v98(); // _ZN6S287C43v98Ev
  virtual void  v99(); // _ZN6S287C43v99Ev
  virtual void  v100(); // _ZN6S287C44v100Ev
  virtual void  v101(); // _ZN6S287C44v101Ev
  virtual void  v102(); // _ZN6S287C44v102Ev
  virtual void  v103(); // _ZN6S287C44v103Ev
  virtual void  v104(); // _ZN6S287C44v104Ev
  virtual void  v105(); // _ZN6S287C44v105Ev
  virtual void  v106(); // _ZN6S287C44v106Ev
  virtual void  v107(); // _ZN6S287C44v107Ev
  virtual void  v108(); // _ZN6S287C44v108Ev
  virtual void  v109(); // _ZN6S287C44v109Ev
  virtual void  v110(); // _ZN6S287C44v110Ev
  virtual void  v111(); // _ZN6S287C44v111Ev
  virtual void  v112(); // _ZN6S287C44v112Ev
  virtual void  v113(); // _ZN6S287C44v113Ev
  virtual void  v114(); // _ZN6S287C44v114Ev
  S287C4(); // tgen
};
//SIG(-1 S287C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S287C4 ::~S287C4(){ note_dtor("S287C4", this);}
void  S287C4 ::v95(){vfunc_called(this, "_ZN6S287C43v95Ev");}
void  S287C4 ::v96(){vfunc_called(this, "_ZN6S287C43v96Ev");}
void  S287C4 ::v97(){vfunc_called(this, "_ZN6S287C43v97Ev");}
void  S287C4 ::v98(){vfunc_called(this, "_ZN6S287C43v98Ev");}
void  S287C4 ::v99(){vfunc_called(this, "_ZN6S287C43v99Ev");}
void  S287C4 ::v100(){vfunc_called(this, "_ZN6S287C44v100Ev");}
void  S287C4 ::v101(){vfunc_called(this, "_ZN6S287C44v101Ev");}
void  S287C4 ::v102(){vfunc_called(this, "_ZN6S287C44v102Ev");}
void  S287C4 ::v103(){vfunc_called(this, "_ZN6S287C44v103Ev");}
void  S287C4 ::v104(){vfunc_called(this, "_ZN6S287C44v104Ev");}
void  S287C4 ::v105(){vfunc_called(this, "_ZN6S287C44v105Ev");}
void  S287C4 ::v106(){vfunc_called(this, "_ZN6S287C44v106Ev");}
void  S287C4 ::v107(){vfunc_called(this, "_ZN6S287C44v107Ev");}
void  S287C4 ::v108(){vfunc_called(this, "_ZN6S287C44v108Ev");}
void  S287C4 ::v109(){vfunc_called(this, "_ZN6S287C44v109Ev");}
void  S287C4 ::v110(){vfunc_called(this, "_ZN6S287C44v110Ev");}
void  S287C4 ::v111(){vfunc_called(this, "_ZN6S287C44v111Ev");}
void  S287C4 ::v112(){vfunc_called(this, "_ZN6S287C44v112Ev");}
void  S287C4 ::v113(){vfunc_called(this, "_ZN6S287C44v113Ev");}
void  S287C4 ::v114(){vfunc_called(this, "_ZN6S287C44v114Ev");}
S287C4 ::S287C4(){ note_ctor("S287C4", this);} // tgen

static void Test_S287C4()
{
  extern Class_Descriptor cd_S287C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S287C4, buf);
    S287C4 *dp, &lv = *(dp=new (buf) S287C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S287C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C4)");
    check_base_class_offset(lv, (S287C6*)(S287C5*), 0, "S287C4");
    check_base_class_offset(lv, (S287C5*), 0, "S287C4");
    set_bf_and_test(lv, s287c4f0, ABISELECT(188,132), 0, 1, 1, "S287C4");
    set_bf_and_test(lv, s287c4f1, ABISELECT(188,132), 1, 1, 1, "S287C4");
    set_bf_and_test(lv, s287c4f2, ABISELECT(188,132), 2, 1, 1, "S287C4");
    check_field_offset(lv, s287c4f3, ABISELECT(192,136), "S287C4.s287c4f3");
    check_field_offset(lv, s287c4f4, ABISELECT(208,148), "S287C4.s287c4f4");
    check_field_offset(lv, s287c4f5, ABISELECT(224,160), "S287C4.s287c4f5");
    check_field_offset(lv, s287c4f6, ABISELECT(240,172), "S287C4.s287c4f6");
    check_field_offset(lv, s287c4f7, ABISELECT(256,184), "S287C4.s287c4f7");
    test_class_info(&lv, &cd_S287C4);
    dp->~S287C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C4(Test_S287C4, "S287C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S287C4C1Ev();
extern void _ZN6S287C4D1Ev();
Name_Map name_map_S287C4[] = {
  NSPAIR(_ZN6S287C4C1Ev),
  NSPAIR(_ZN6S287C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
extern Class_Descriptor cd_S287C5;
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
static Base_Class bases_S287C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S287C4[];
extern void _ZN6S287C4D1Ev();
extern void _ZN6S287C4D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
extern void _ZN6S287C43v95Ev();
extern void _ZN6S287C43v96Ev();
extern void _ZN6S287C43v97Ev();
extern void _ZN6S287C43v98Ev();
extern void _ZN6S287C43v99Ev();
extern void _ZN6S287C44v100Ev();
extern void _ZN6S287C44v101Ev();
extern void _ZN6S287C44v102Ev();
extern void _ZN6S287C44v103Ev();
extern void _ZN6S287C44v104Ev();
extern void _ZN6S287C44v105Ev();
extern void _ZN6S287C44v106Ev();
extern void _ZN6S287C44v107Ev();
extern void _ZN6S287C44v108Ev();
extern void _ZN6S287C44v109Ev();
extern void _ZN6S287C44v110Ev();
extern void _ZN6S287C44v111Ev();
extern void _ZN6S287C44v112Ev();
extern void _ZN6S287C44v113Ev();
extern void _ZN6S287C44v114Ev();
static  VTBL_ENTRY vtc_S287C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C4[0]),
  (VTBL_ENTRY)&_ZN6S287C4D1Ev,
  (VTBL_ENTRY)&_ZN6S287C4D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
  (VTBL_ENTRY)&_ZN6S287C43v95Ev,
  (VTBL_ENTRY)&_ZN6S287C43v96Ev,
  (VTBL_ENTRY)&_ZN6S287C43v97Ev,
  (VTBL_ENTRY)&_ZN6S287C43v98Ev,
  (VTBL_ENTRY)&_ZN6S287C43v99Ev,
  (VTBL_ENTRY)&_ZN6S287C44v100Ev,
  (VTBL_ENTRY)&_ZN6S287C44v101Ev,
  (VTBL_ENTRY)&_ZN6S287C44v102Ev,
  (VTBL_ENTRY)&_ZN6S287C44v103Ev,
  (VTBL_ENTRY)&_ZN6S287C44v104Ev,
  (VTBL_ENTRY)&_ZN6S287C44v105Ev,
  (VTBL_ENTRY)&_ZN6S287C44v106Ev,
  (VTBL_ENTRY)&_ZN6S287C44v107Ev,
  (VTBL_ENTRY)&_ZN6S287C44v108Ev,
  (VTBL_ENTRY)&_ZN6S287C44v109Ev,
  (VTBL_ENTRY)&_ZN6S287C44v110Ev,
  (VTBL_ENTRY)&_ZN6S287C44v111Ev,
  (VTBL_ENTRY)&_ZN6S287C44v112Ev,
  (VTBL_ENTRY)&_ZN6S287C44v113Ev,
  (VTBL_ENTRY)&_ZN6S287C44v114Ev,
};
extern VTBL_ENTRY _ZTI6S287C4[];
extern  VTBL_ENTRY _ZTV6S287C4[];
Class_Descriptor cd_S287C4 = {  "S287C4", // class name
  bases_S287C4, 2,
  &(vtc_S287C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S287C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S287C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C24  : S3350C7_nt {
};
//SIG(-1 S287C24) C1{ BC2{ m Fp Fi[2]}}



static void Test_S287C24()
{
  extern Class_Descriptor cd_S287C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C24, buf);
    S287C24 &lv = *(new (buf) S287C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C24)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S287C24");
    test_class_info(&lv, &cd_S287C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C24(Test_S287C24, "S287C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S287C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S287C24 = {  "S287C24", // class name
  bases_S287C24, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C23  : S287C24 {
};
//SIG(-1 S287C23) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S287C23()
{
  extern Class_Descriptor cd_S287C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C23, buf);
    S287C23 &lv = *(new (buf) S287C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C23)");
    check_base_class_offset(lv, (S3350C7_nt*)(S287C24*), 0, "S287C23");
    check_base_class_offset(lv, (S287C24*), 0, "S287C23");
    test_class_info(&lv, &cd_S287C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C23(Test_S287C23, "S287C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C24;
static Base_Class bases_S287C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S287C23 = {  "S287C23", // class name
  bases_S287C23, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C28  : S3350C7_nt {
};
//SIG(-1 S287C28) C1{ BC2{ m Fp Fi[2]}}



static void Test_S287C28()
{
  extern Class_Descriptor cd_S287C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C28, buf);
    S287C28 &lv = *(new (buf) S287C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C28)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S287C28");
    test_class_info(&lv, &cd_S287C28);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C28(Test_S287C28, "S287C28", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S287C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S287C28 = {  "S287C28", // class name
  bases_S287C28, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C27  : S287C28 {
};
//SIG(-1 S287C27) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S287C27()
{
  extern Class_Descriptor cd_S287C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S287C27, buf);
    S287C27 &lv = *(new (buf) S287C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S287C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C27)");
    check_base_class_offset(lv, (S3350C7_nt*)(S287C28*), 0, "S287C27");
    check_base_class_offset(lv, (S287C28*), 0, "S287C27");
    test_class_info(&lv, &cd_S287C27);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C27(Test_S287C27, "S287C27", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S287C28;
static Base_Class bases_S287C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S287C27 = {  "S287C27", // class name
  bases_S287C27, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C3  : S287C4 {
  void *s287c3f0;
  ::S287C19 s287c3f1;
  ::S287C23 s287c3f2;
  ::S287C23 s287c3f3;
  ::S287C27 s287c3f4;
  ::S287C27 s287c3f5;
  unsigned int s287c3f6:1;
  int s287c3f7[3];
  virtual  ~S287C3(); // _ZN6S287C3D1Ev
  virtual void  v115(); // _ZN6S287C34v115Ev
  virtual void  v116(); // _ZN6S287C34v116Ev
  virtual void  v117(); // _ZN6S287C34v117Ev
  virtual void  v118(); // _ZN6S287C34v118Ev
  virtual void  v119(); // _ZN6S287C34v119Ev
  virtual void  v120(); // _ZN6S287C34v120Ev
  virtual void  v121(); // _ZN6S287C34v121Ev
  virtual void  v122(); // _ZN6S287C34v122Ev
  virtual void  v123(); // _ZN6S287C34v123Ev
  virtual void  v124(); // _ZN6S287C34v124Ev
  virtual void  v125(); // _ZN6S287C34v125Ev
  virtual void  v126(); // _ZN6S287C34v126Ev
  virtual void  v127(); // _ZN6S287C34v127Ev
  virtual void  v128(); // _ZN6S287C34v128Ev
  virtual void  v129(); // _ZN6S287C34v129Ev
  virtual void  v130(); // _ZN6S287C34v130Ev
  virtual void  v131(); // _ZN6S287C34v131Ev
  virtual void  v132(); // _ZN6S287C34v132Ev
  virtual void  v133(); // _ZN6S287C34v133Ev
  virtual void  v134(); // _ZN6S287C34v134Ev
  virtual void  v135(); // _ZN6S287C34v135Ev
  virtual void  v136(); // _ZN6S287C34v136Ev
  S287C3(); // tgen
};
//SIG(-1 S287C3) C1{ BC2{ BC3{ BC4{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp FC17 FC19{ BC20{ BC9}} FC19 FC21{ BC22{ BC9}} FC21 Fi:1 Fi[3]}


 S287C3 ::~S287C3(){ note_dtor("S287C3", this);}
void  S287C3 ::v115(){vfunc_called(this, "_ZN6S287C34v115Ev");}
void  S287C3 ::v116(){vfunc_called(this, "_ZN6S287C34v116Ev");}
void  S287C3 ::v117(){vfunc_called(this, "_ZN6S287C34v117Ev");}
void  S287C3 ::v118(){vfunc_called(this, "_ZN6S287C34v118Ev");}
void  S287C3 ::v119(){vfunc_called(this, "_ZN6S287C34v119Ev");}
void  S287C3 ::v120(){vfunc_called(this, "_ZN6S287C34v120Ev");}
void  S287C3 ::v121(){vfunc_called(this, "_ZN6S287C34v121Ev");}
void  S287C3 ::v122(){vfunc_called(this, "_ZN6S287C34v122Ev");}
void  S287C3 ::v123(){vfunc_called(this, "_ZN6S287C34v123Ev");}
void  S287C3 ::v124(){vfunc_called(this, "_ZN6S287C34v124Ev");}
void  S287C3 ::v125(){vfunc_called(this, "_ZN6S287C34v125Ev");}
void  S287C3 ::v126(){vfunc_called(this, "_ZN6S287C34v126Ev");}
void  S287C3 ::v127(){vfunc_called(this, "_ZN6S287C34v127Ev");}
void  S287C3 ::v128(){vfunc_called(this, "_ZN6S287C34v128Ev");}
void  S287C3 ::v129(){vfunc_called(this, "_ZN6S287C34v129Ev");}
void  S287C3 ::v130(){vfunc_called(this, "_ZN6S287C34v130Ev");}
void  S287C3 ::v131(){vfunc_called(this, "_ZN6S287C34v131Ev");}
void  S287C3 ::v132(){vfunc_called(this, "_ZN6S287C34v132Ev");}
void  S287C3 ::v133(){vfunc_called(this, "_ZN6S287C34v133Ev");}
void  S287C3 ::v134(){vfunc_called(this, "_ZN6S287C34v134Ev");}
void  S287C3 ::v135(){vfunc_called(this, "_ZN6S287C34v135Ev");}
void  S287C3 ::v136(){vfunc_called(this, "_ZN6S287C34v136Ev");}
S287C3 ::S287C3(){ note_ctor("S287C3", this);} // tgen

static void Test_S287C3()
{
  extern Class_Descriptor cd_S287C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,70)];
    init_test(&cd_S287C3, buf);
    S287C3 *dp, &lv = *(dp=new (buf) S287C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,276), "sizeof(S287C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C3)");
    check_base_class_offset(lv, (S287C6*)(S287C5*)(S287C4*), 0, "S287C3");
    check_base_class_offset(lv, (S287C5*)(S287C4*), 0, "S287C3");
    check_base_class_offset(lv, (S287C4*), 0, "S287C3");
    check_field_offset(lv, s287c3f0, ABISELECT(272,196), "S287C3.s287c3f0");
    check_field_offset(lv, s287c3f1, ABISELECT(280,200), "S287C3.s287c3f1");
    check_field_offset(lv, s287c3f2, ABISELECT(296,212), "S287C3.s287c3f2");
    check_field_offset(lv, s287c3f3, ABISELECT(312,224), "S287C3.s287c3f3");
    check_field_offset(lv, s287c3f4, ABISELECT(328,236), "S287C3.s287c3f4");
    check_field_offset(lv, s287c3f5, ABISELECT(344,248), "S287C3.s287c3f5");
    set_bf_and_test(lv, s287c3f6, ABISELECT(360,260), 0, 1, 1, "S287C3");
    check_field_offset(lv, s287c3f7, ABISELECT(364,264), "S287C3.s287c3f7");
    test_class_info(&lv, &cd_S287C3);
    dp->~S287C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C3(Test_S287C3, "S287C3", ABISELECT(376,276));

#else // __cplusplus

extern void _ZN6S287C3C1Ev();
extern void _ZN6S287C3D1Ev();
Name_Map name_map_S287C3[] = {
  NSPAIR(_ZN6S287C3C1Ev),
  NSPAIR(_ZN6S287C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
extern Class_Descriptor cd_S287C5;
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
extern Class_Descriptor cd_S287C4;
extern VTBL_ENTRY _ZTI6S287C4[];
extern  VTBL_ENTRY _ZTV6S287C4[];
static Base_Class bases_S287C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S287C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S287C3[];
extern void _ZN6S287C3D1Ev();
extern void _ZN6S287C3D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
extern void _ZN6S287C43v95Ev();
extern void _ZN6S287C43v96Ev();
extern void _ZN6S287C43v97Ev();
extern void _ZN6S287C43v98Ev();
extern void _ZN6S287C43v99Ev();
extern void _ZN6S287C44v100Ev();
extern void _ZN6S287C44v101Ev();
extern void _ZN6S287C44v102Ev();
extern void _ZN6S287C44v103Ev();
extern void _ZN6S287C44v104Ev();
extern void _ZN6S287C44v105Ev();
extern void _ZN6S287C44v106Ev();
extern void _ZN6S287C44v107Ev();
extern void _ZN6S287C44v108Ev();
extern void _ZN6S287C44v109Ev();
extern void _ZN6S287C44v110Ev();
extern void _ZN6S287C44v111Ev();
extern void _ZN6S287C44v112Ev();
extern void _ZN6S287C44v113Ev();
extern void _ZN6S287C44v114Ev();
extern void _ZN6S287C34v115Ev();
extern void _ZN6S287C34v116Ev();
extern void _ZN6S287C34v117Ev();
extern void _ZN6S287C34v118Ev();
extern void _ZN6S287C34v119Ev();
extern void _ZN6S287C34v120Ev();
extern void _ZN6S287C34v121Ev();
extern void _ZN6S287C34v122Ev();
extern void _ZN6S287C34v123Ev();
extern void _ZN6S287C34v124Ev();
extern void _ZN6S287C34v125Ev();
extern void _ZN6S287C34v126Ev();
extern void _ZN6S287C34v127Ev();
extern void _ZN6S287C34v128Ev();
extern void _ZN6S287C34v129Ev();
extern void _ZN6S287C34v130Ev();
extern void _ZN6S287C34v131Ev();
extern void _ZN6S287C34v132Ev();
extern void _ZN6S287C34v133Ev();
extern void _ZN6S287C34v134Ev();
extern void _ZN6S287C34v135Ev();
extern void _ZN6S287C34v136Ev();
static  VTBL_ENTRY vtc_S287C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C3[0]),
  (VTBL_ENTRY)&_ZN6S287C3D1Ev,
  (VTBL_ENTRY)&_ZN6S287C3D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
  (VTBL_ENTRY)&_ZN6S287C43v95Ev,
  (VTBL_ENTRY)&_ZN6S287C43v96Ev,
  (VTBL_ENTRY)&_ZN6S287C43v97Ev,
  (VTBL_ENTRY)&_ZN6S287C43v98Ev,
  (VTBL_ENTRY)&_ZN6S287C43v99Ev,
  (VTBL_ENTRY)&_ZN6S287C44v100Ev,
  (VTBL_ENTRY)&_ZN6S287C44v101Ev,
  (VTBL_ENTRY)&_ZN6S287C44v102Ev,
  (VTBL_ENTRY)&_ZN6S287C44v103Ev,
  (VTBL_ENTRY)&_ZN6S287C44v104Ev,
  (VTBL_ENTRY)&_ZN6S287C44v105Ev,
  (VTBL_ENTRY)&_ZN6S287C44v106Ev,
  (VTBL_ENTRY)&_ZN6S287C44v107Ev,
  (VTBL_ENTRY)&_ZN6S287C44v108Ev,
  (VTBL_ENTRY)&_ZN6S287C44v109Ev,
  (VTBL_ENTRY)&_ZN6S287C44v110Ev,
  (VTBL_ENTRY)&_ZN6S287C44v111Ev,
  (VTBL_ENTRY)&_ZN6S287C44v112Ev,
  (VTBL_ENTRY)&_ZN6S287C44v113Ev,
  (VTBL_ENTRY)&_ZN6S287C44v114Ev,
  (VTBL_ENTRY)&_ZN6S287C34v115Ev,
  (VTBL_ENTRY)&_ZN6S287C34v116Ev,
  (VTBL_ENTRY)&_ZN6S287C34v117Ev,
  (VTBL_ENTRY)&_ZN6S287C34v118Ev,
  (VTBL_ENTRY)&_ZN6S287C34v119Ev,
  (VTBL_ENTRY)&_ZN6S287C34v120Ev,
  (VTBL_ENTRY)&_ZN6S287C34v121Ev,
  (VTBL_ENTRY)&_ZN6S287C34v122Ev,
  (VTBL_ENTRY)&_ZN6S287C34v123Ev,
  (VTBL_ENTRY)&_ZN6S287C34v124Ev,
  (VTBL_ENTRY)&_ZN6S287C34v125Ev,
  (VTBL_ENTRY)&_ZN6S287C34v126Ev,
  (VTBL_ENTRY)&_ZN6S287C34v127Ev,
  (VTBL_ENTRY)&_ZN6S287C34v128Ev,
  (VTBL_ENTRY)&_ZN6S287C34v129Ev,
  (VTBL_ENTRY)&_ZN6S287C34v130Ev,
  (VTBL_ENTRY)&_ZN6S287C34v131Ev,
  (VTBL_ENTRY)&_ZN6S287C34v132Ev,
  (VTBL_ENTRY)&_ZN6S287C34v133Ev,
  (VTBL_ENTRY)&_ZN6S287C34v134Ev,
  (VTBL_ENTRY)&_ZN6S287C34v135Ev,
  (VTBL_ENTRY)&_ZN6S287C34v136Ev,
};
extern VTBL_ENTRY _ZTI6S287C3[];
extern  VTBL_ENTRY _ZTV6S287C3[];
Class_Descriptor cd_S287C3 = {  "S287C3", // class name
  bases_S287C3, 3,
  &(vtc_S287C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,276), // object size
  NSPAIRA(_ZTI6S287C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S287C3),132, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C31_nt  {
  virtual  ~S287C31_nt(); // _ZN10S287C31_ntD1Ev
  virtual void  v137(); // _ZN10S287C31_nt4v137Ev
  virtual void  v138(); // _ZN10S287C31_nt4v138Ev
  virtual void  v139(); // _ZN10S287C31_nt4v139Ev
  virtual void  v140(); // _ZN10S287C31_nt4v140Ev
  virtual void  v141(); // _ZN10S287C31_nt4v141Ev
  S287C31_nt(); // tgen
};
//SIG(-1 S287C31_nt) C1{ vd v1 v2 v3 v4 v5}


 S287C31_nt ::~S287C31_nt(){ note_dtor("S287C31_nt", this);}
void  S287C31_nt ::v137(){vfunc_called(this, "_ZN10S287C31_nt4v137Ev");}
void  S287C31_nt ::v138(){vfunc_called(this, "_ZN10S287C31_nt4v138Ev");}
void  S287C31_nt ::v139(){vfunc_called(this, "_ZN10S287C31_nt4v139Ev");}
void  S287C31_nt ::v140(){vfunc_called(this, "_ZN10S287C31_nt4v140Ev");}
void  S287C31_nt ::v141(){vfunc_called(this, "_ZN10S287C31_nt4v141Ev");}
S287C31_nt ::S287C31_nt(){ note_ctor("S287C31_nt", this);} // tgen

//skip512 S287C31_nt

#else // __cplusplus

extern void _ZN10S287C31_ntC1Ev();
extern void _ZN10S287C31_ntD1Ev();
Name_Map name_map_S287C31_nt[] = {
  NSPAIR(_ZN10S287C31_ntC1Ev),
  NSPAIR(_ZN10S287C31_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S287C31_nt[];
extern void _ZN10S287C31_ntD1Ev();
extern void _ZN10S287C31_ntD0Ev();
extern void _ZN10S287C31_nt4v137Ev();
extern void _ZN10S287C31_nt4v138Ev();
extern void _ZN10S287C31_nt4v139Ev();
extern void _ZN10S287C31_nt4v140Ev();
extern void _ZN10S287C31_nt4v141Ev();
static  VTBL_ENTRY vtc_S287C31_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S287C31_nt[0]),
  (VTBL_ENTRY)&_ZN10S287C31_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S287C31_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v141Ev,
};
extern VTBL_ENTRY _ZTI10S287C31_nt[];
VTBL_ENTRY *P__ZTI10S287C31_nt = _ZTI10S287C31_nt; 
extern  VTBL_ENTRY _ZTV10S287C31_nt[];
Class_Descriptor cd_S287C31_nt = {  "S287C31_nt", // class name
  0,0,//no base classes
  &(vtc_S287C31_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S287C31_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S287C31_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C2  : S287C3 , S287C31_nt {
  ::S3350C18 s287c2f0;
  virtual  ~S287C2(); // _ZN6S287C2D1Ev
  virtual void  v142(); // _ZN6S287C24v142Ev
  virtual void  v143(); // _ZN6S287C24v143Ev
  virtual void  v144(); // _ZN6S287C24v144Ev
  virtual void  v145(); // _ZN6S287C24v145Ev
  virtual void  v146(); // _ZN6S287C24v146Ev
  virtual void  v147(); // _ZN6S287C24v147Ev
  virtual void  v148(); // _ZN6S287C24v148Ev
  virtual void  v149(); // _ZN6S287C24v149Ev
  virtual void  v150(); // _ZN6S287C24v150Ev
  virtual void  v151(); // _ZN6S287C24v151Ev
  virtual void  v152(); // _ZN6S287C24v152Ev
  virtual void  v153(); // _ZN6S287C24v153Ev
  virtual void  v154(); // _ZN6S287C24v154Ev
  virtual void  v155(); // _ZN6S287C24v155Ev
  virtual void  v156(); // _ZN6S287C24v156Ev
  virtual void  v157(); // _ZN6S287C24v157Ev
  virtual void  v158(); // _ZN6S287C24v158Ev
  virtual void  v159(); // _ZN6S287C24v159Ev
  virtual void  v160(); // _ZN6S287C24v160Ev
  S287C2(); // tgen
};
//SIG(-1 S287C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 Fp FC18 FC20{ BC21{ BC10}} FC20 FC22{ BC23{ BC10}} FC22 Fi:1 Fi[3]} BC24{ vd v148 v149 v150 v151 v152} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC13}


 S287C2 ::~S287C2(){ note_dtor("S287C2", this);}
void  S287C2 ::v142(){vfunc_called(this, "_ZN6S287C24v142Ev");}
void  S287C2 ::v143(){vfunc_called(this, "_ZN6S287C24v143Ev");}
void  S287C2 ::v144(){vfunc_called(this, "_ZN6S287C24v144Ev");}
void  S287C2 ::v145(){vfunc_called(this, "_ZN6S287C24v145Ev");}
void  S287C2 ::v146(){vfunc_called(this, "_ZN6S287C24v146Ev");}
void  S287C2 ::v147(){vfunc_called(this, "_ZN6S287C24v147Ev");}
void  S287C2 ::v148(){vfunc_called(this, "_ZN6S287C24v148Ev");}
void  S287C2 ::v149(){vfunc_called(this, "_ZN6S287C24v149Ev");}
void  S287C2 ::v150(){vfunc_called(this, "_ZN6S287C24v150Ev");}
void  S287C2 ::v151(){vfunc_called(this, "_ZN6S287C24v151Ev");}
void  S287C2 ::v152(){vfunc_called(this, "_ZN6S287C24v152Ev");}
void  S287C2 ::v153(){vfunc_called(this, "_ZN6S287C24v153Ev");}
void  S287C2 ::v154(){vfunc_called(this, "_ZN6S287C24v154Ev");}
void  S287C2 ::v155(){vfunc_called(this, "_ZN6S287C24v155Ev");}
void  S287C2 ::v156(){vfunc_called(this, "_ZN6S287C24v156Ev");}
void  S287C2 ::v157(){vfunc_called(this, "_ZN6S287C24v157Ev");}
void  S287C2 ::v158(){vfunc_called(this, "_ZN6S287C24v158Ev");}
void  S287C2 ::v159(){vfunc_called(this, "_ZN6S287C24v159Ev");}
void  S287C2 ::v160(){vfunc_called(this, "_ZN6S287C24v160Ev");}
S287C2 ::S287C2(){ note_ctor("S287C2", this);} // tgen

static void Test_S287C2()
{
  extern Class_Descriptor cd_S287C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,74)];
    init_test(&cd_S287C2, buf);
    S287C2 *dp, &lv = *(dp=new (buf) S287C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,292), "sizeof(S287C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C2)");
    check_base_class_offset(lv, (S287C6*)(S287C5*)(S287C4*)(S287C3*), 0, "S287C2");
    check_base_class_offset(lv, (S287C5*)(S287C4*)(S287C3*), 0, "S287C2");
    check_base_class_offset(lv, (S287C4*)(S287C3*), 0, "S287C2");
    check_base_class_offset(lv, (S287C3*), 0, "S287C2");
    check_base_class_offset(lv, (S287C31_nt*), ABISELECT(376,276), "S287C2");
    check_field_offset(lv, s287c2f0, ABISELECT(384,280), "S287C2.s287c2f0");
    test_class_info(&lv, &cd_S287C2);
    dp->~S287C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C2(Test_S287C2, "S287C2", ABISELECT(400,292));

#else // __cplusplus

extern void _ZN6S287C2C1Ev();
extern void _ZN6S287C2D1Ev();
Name_Map name_map_S287C2[] = {
  NSPAIR(_ZN6S287C2C1Ev),
  NSPAIR(_ZN6S287C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
extern Class_Descriptor cd_S287C5;
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
extern Class_Descriptor cd_S287C4;
extern VTBL_ENTRY _ZTI6S287C4[];
extern  VTBL_ENTRY _ZTV6S287C4[];
extern Class_Descriptor cd_S287C3;
extern VTBL_ENTRY _ZTI6S287C3[];
extern  VTBL_ENTRY _ZTV6S287C3[];
extern Class_Descriptor cd_S287C31_nt;
extern VTBL_ENTRY _ZTI10S287C31_nt[];
extern  VTBL_ENTRY _ZTV10S287C31_nt[];
static Base_Class bases_S287C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S287C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S287C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S287C31_nt,    ABISELECT(376,276), //bcp->offset
    151, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S287C2[];
extern void _ZN6S287C2D1Ev();
extern void _ZN6S287C2D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
extern void _ZN6S287C43v95Ev();
extern void _ZN6S287C43v96Ev();
extern void _ZN6S287C43v97Ev();
extern void _ZN6S287C43v98Ev();
extern void _ZN6S287C43v99Ev();
extern void _ZN6S287C44v100Ev();
extern void _ZN6S287C44v101Ev();
extern void _ZN6S287C44v102Ev();
extern void _ZN6S287C44v103Ev();
extern void _ZN6S287C44v104Ev();
extern void _ZN6S287C44v105Ev();
extern void _ZN6S287C44v106Ev();
extern void _ZN6S287C44v107Ev();
extern void _ZN6S287C44v108Ev();
extern void _ZN6S287C44v109Ev();
extern void _ZN6S287C44v110Ev();
extern void _ZN6S287C44v111Ev();
extern void _ZN6S287C44v112Ev();
extern void _ZN6S287C44v113Ev();
extern void _ZN6S287C44v114Ev();
extern void _ZN6S287C34v115Ev();
extern void _ZN6S287C34v116Ev();
extern void _ZN6S287C34v117Ev();
extern void _ZN6S287C34v118Ev();
extern void _ZN6S287C34v119Ev();
extern void _ZN6S287C34v120Ev();
extern void _ZN6S287C34v121Ev();
extern void _ZN6S287C34v122Ev();
extern void _ZN6S287C34v123Ev();
extern void _ZN6S287C34v124Ev();
extern void _ZN6S287C34v125Ev();
extern void _ZN6S287C34v126Ev();
extern void _ZN6S287C34v127Ev();
extern void _ZN6S287C34v128Ev();
extern void _ZN6S287C34v129Ev();
extern void _ZN6S287C34v130Ev();
extern void _ZN6S287C34v131Ev();
extern void _ZN6S287C34v132Ev();
extern void _ZN6S287C34v133Ev();
extern void _ZN6S287C34v134Ev();
extern void _ZN6S287C34v135Ev();
extern void _ZN6S287C34v136Ev();
extern void _ZN6S287C24v142Ev();
extern void _ZN6S287C24v143Ev();
extern void _ZN6S287C24v144Ev();
extern void _ZN6S287C24v145Ev();
extern void _ZN6S287C24v146Ev();
extern void _ZN6S287C24v147Ev();
extern void _ZN6S287C24v148Ev();
extern void _ZN6S287C24v149Ev();
extern void _ZN6S287C24v150Ev();
extern void _ZN6S287C24v151Ev();
extern void _ZN6S287C24v152Ev();
extern void _ZN6S287C24v153Ev();
extern void _ZN6S287C24v154Ev();
extern void _ZN6S287C24v155Ev();
extern void _ZN6S287C24v156Ev();
extern void _ZN6S287C24v157Ev();
extern void _ZN6S287C24v158Ev();
extern void _ZN6S287C24v159Ev();
extern void _ZN6S287C24v160Ev();
extern void ABISELECT(_ZThn376_N6S287C2D1Ev,_ZThn276_N6S287C2D1Ev)();
extern void ABISELECT(_ZThn376_N6S287C2D0Ev,_ZThn276_N6S287C2D0Ev)();
extern void _ZN10S287C31_nt4v137Ev();
extern void _ZN10S287C31_nt4v138Ev();
extern void _ZN10S287C31_nt4v139Ev();
extern void _ZN10S287C31_nt4v140Ev();
extern void _ZN10S287C31_nt4v141Ev();
static  VTBL_ENTRY vtc_S287C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C2[0]),
  (VTBL_ENTRY)&_ZN6S287C2D1Ev,
  (VTBL_ENTRY)&_ZN6S287C2D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
  (VTBL_ENTRY)&_ZN6S287C43v95Ev,
  (VTBL_ENTRY)&_ZN6S287C43v96Ev,
  (VTBL_ENTRY)&_ZN6S287C43v97Ev,
  (VTBL_ENTRY)&_ZN6S287C43v98Ev,
  (VTBL_ENTRY)&_ZN6S287C43v99Ev,
  (VTBL_ENTRY)&_ZN6S287C44v100Ev,
  (VTBL_ENTRY)&_ZN6S287C44v101Ev,
  (VTBL_ENTRY)&_ZN6S287C44v102Ev,
  (VTBL_ENTRY)&_ZN6S287C44v103Ev,
  (VTBL_ENTRY)&_ZN6S287C44v104Ev,
  (VTBL_ENTRY)&_ZN6S287C44v105Ev,
  (VTBL_ENTRY)&_ZN6S287C44v106Ev,
  (VTBL_ENTRY)&_ZN6S287C44v107Ev,
  (VTBL_ENTRY)&_ZN6S287C44v108Ev,
  (VTBL_ENTRY)&_ZN6S287C44v109Ev,
  (VTBL_ENTRY)&_ZN6S287C44v110Ev,
  (VTBL_ENTRY)&_ZN6S287C44v111Ev,
  (VTBL_ENTRY)&_ZN6S287C44v112Ev,
  (VTBL_ENTRY)&_ZN6S287C44v113Ev,
  (VTBL_ENTRY)&_ZN6S287C44v114Ev,
  (VTBL_ENTRY)&_ZN6S287C34v115Ev,
  (VTBL_ENTRY)&_ZN6S287C34v116Ev,
  (VTBL_ENTRY)&_ZN6S287C34v117Ev,
  (VTBL_ENTRY)&_ZN6S287C34v118Ev,
  (VTBL_ENTRY)&_ZN6S287C34v119Ev,
  (VTBL_ENTRY)&_ZN6S287C34v120Ev,
  (VTBL_ENTRY)&_ZN6S287C34v121Ev,
  (VTBL_ENTRY)&_ZN6S287C34v122Ev,
  (VTBL_ENTRY)&_ZN6S287C34v123Ev,
  (VTBL_ENTRY)&_ZN6S287C34v124Ev,
  (VTBL_ENTRY)&_ZN6S287C34v125Ev,
  (VTBL_ENTRY)&_ZN6S287C34v126Ev,
  (VTBL_ENTRY)&_ZN6S287C34v127Ev,
  (VTBL_ENTRY)&_ZN6S287C34v128Ev,
  (VTBL_ENTRY)&_ZN6S287C34v129Ev,
  (VTBL_ENTRY)&_ZN6S287C34v130Ev,
  (VTBL_ENTRY)&_ZN6S287C34v131Ev,
  (VTBL_ENTRY)&_ZN6S287C34v132Ev,
  (VTBL_ENTRY)&_ZN6S287C34v133Ev,
  (VTBL_ENTRY)&_ZN6S287C34v134Ev,
  (VTBL_ENTRY)&_ZN6S287C34v135Ev,
  (VTBL_ENTRY)&_ZN6S287C34v136Ev,
  (VTBL_ENTRY)&_ZN6S287C24v142Ev,
  (VTBL_ENTRY)&_ZN6S287C24v143Ev,
  (VTBL_ENTRY)&_ZN6S287C24v144Ev,
  (VTBL_ENTRY)&_ZN6S287C24v145Ev,
  (VTBL_ENTRY)&_ZN6S287C24v146Ev,
  (VTBL_ENTRY)&_ZN6S287C24v147Ev,
  (VTBL_ENTRY)&_ZN6S287C24v148Ev,
  (VTBL_ENTRY)&_ZN6S287C24v149Ev,
  (VTBL_ENTRY)&_ZN6S287C24v150Ev,
  (VTBL_ENTRY)&_ZN6S287C24v151Ev,
  (VTBL_ENTRY)&_ZN6S287C24v152Ev,
  (VTBL_ENTRY)&_ZN6S287C24v153Ev,
  (VTBL_ENTRY)&_ZN6S287C24v154Ev,
  (VTBL_ENTRY)&_ZN6S287C24v155Ev,
  (VTBL_ENTRY)&_ZN6S287C24v156Ev,
  (VTBL_ENTRY)&_ZN6S287C24v157Ev,
  (VTBL_ENTRY)&_ZN6S287C24v158Ev,
  (VTBL_ENTRY)&_ZN6S287C24v159Ev,
  (VTBL_ENTRY)&_ZN6S287C24v160Ev,
  ABISELECT(-376,-276),
  (VTBL_ENTRY)&(_ZTI6S287C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn376_N6S287C2D1Ev,_ZThn276_N6S287C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn376_N6S287C2D0Ev,_ZThn276_N6S287C2D0Ev),
  (VTBL_ENTRY)&_ZN10S287C31_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v141Ev,
};
extern VTBL_ENTRY _ZTI6S287C2[];
extern  VTBL_ENTRY _ZTV6S287C2[];
Class_Descriptor cd_S287C2 = {  "S287C2", // class name
  bases_S287C2, 5,
  &(vtc_S287C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,292), // object size
  NSPAIRA(_ZTI6S287C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S287C2),160, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S287C1  : S287C2 {
  virtual  ~S287C1(); // _ZN6S287C1D1Ev
  virtual void  v1(); // _ZN6S287C12v1Ev
  virtual void  v2(); // _ZN6S287C12v2Ev
  virtual void  v3(); // _ZN6S287C12v3Ev
  virtual void  v4(); // _ZN6S287C12v4Ev
  virtual void  v5(); // _ZN6S287C12v5Ev
  virtual void  v6(); // _ZN6S287C12v6Ev
  virtual void  v7(); // _ZN6S287C12v7Ev
  virtual void  v8(); // _ZN6S287C12v8Ev
  S287C1(); // tgen
};
//SIG(1 S287C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 Fp FC19 FC21{ BC22{ BC11}} FC21 FC23{ BC24{ BC11}} FC23 Fi:1 Fi[3]} BC25{ vd v137 v138 v139 v140 v141} vd v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 FC14} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S287C1 ::~S287C1(){ note_dtor("S287C1", this);}
void  S287C1 ::v1(){vfunc_called(this, "_ZN6S287C12v1Ev");}
void  S287C1 ::v2(){vfunc_called(this, "_ZN6S287C12v2Ev");}
void  S287C1 ::v3(){vfunc_called(this, "_ZN6S287C12v3Ev");}
void  S287C1 ::v4(){vfunc_called(this, "_ZN6S287C12v4Ev");}
void  S287C1 ::v5(){vfunc_called(this, "_ZN6S287C12v5Ev");}
void  S287C1 ::v6(){vfunc_called(this, "_ZN6S287C12v6Ev");}
void  S287C1 ::v7(){vfunc_called(this, "_ZN6S287C12v7Ev");}
void  S287C1 ::v8(){vfunc_called(this, "_ZN6S287C12v8Ev");}
S287C1 ::S287C1(){ note_ctor("S287C1", this);} // tgen

static void Test_S287C1()
{
  extern Class_Descriptor cd_S287C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,74)];
    init_test(&cd_S287C1, buf);
    S287C1 *dp, &lv = *(dp=new (buf) S287C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,292), "sizeof(S287C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S287C1)");
    check_base_class_offset(lv, (S287C6*)(S287C5*)(S287C4*)(S287C3*)(S287C2*), 0, "S287C1");
    check_base_class_offset(lv, (S287C5*)(S287C4*)(S287C3*)(S287C2*), 0, "S287C1");
    check_base_class_offset(lv, (S287C4*)(S287C3*)(S287C2*), 0, "S287C1");
    check_base_class_offset(lv, (S287C3*)(S287C2*), 0, "S287C1");
    check_base_class_offset(lv, (S287C31_nt*)(S287C2*), ABISELECT(376,276), "S287C1");
    check_base_class_offset(lv, (S287C2*), 0, "S287C1");
    test_class_info(&lv, &cd_S287C1);
    dp->~S287C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS287C1(Test_S287C1, "S287C1", ABISELECT(400,292));

#else // __cplusplus

extern void _ZN6S287C1C1Ev();
extern void _ZN6S287C1D1Ev();
Name_Map name_map_S287C1[] = {
  NSPAIR(_ZN6S287C1C1Ev),
  NSPAIR(_ZN6S287C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S287C6;
extern VTBL_ENTRY _ZTI6S287C6[];
extern  VTBL_ENTRY _ZTV6S287C6[];
extern Class_Descriptor cd_S287C5;
extern VTBL_ENTRY _ZTI6S287C5[];
extern  VTBL_ENTRY _ZTV6S287C5[];
extern Class_Descriptor cd_S287C4;
extern VTBL_ENTRY _ZTI6S287C4[];
extern  VTBL_ENTRY _ZTV6S287C4[];
extern Class_Descriptor cd_S287C3;
extern VTBL_ENTRY _ZTI6S287C3[];
extern  VTBL_ENTRY _ZTV6S287C3[];
extern Class_Descriptor cd_S287C31_nt;
extern VTBL_ENTRY _ZTI10S287C31_nt[];
extern  VTBL_ENTRY _ZTV10S287C31_nt[];
extern Class_Descriptor cd_S287C2;
extern VTBL_ENTRY _ZTI6S287C2[];
extern  VTBL_ENTRY _ZTV6S287C2[];
static Base_Class bases_S287C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S287C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S287C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S287C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S287C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S287C31_nt,    ABISELECT(376,276), //bcp->offset
    159, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S287C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S287C1[];
extern void _ZN6S287C1D1Ev();
extern void _ZN6S287C1D0Ev();
extern void _ZN6S287C62v9Ev();
extern void _ZN6S287C63v10Ev();
extern void _ZN6S287C63v11Ev();
extern void _ZN6S287C63v12Ev();
extern void _ZN6S287C63v13Ev();
extern void _ZN6S287C63v14Ev();
extern void _ZN6S287C63v15Ev();
extern void _ZN6S287C63v16Ev();
extern void _ZN6S287C63v17Ev();
extern void _ZN6S287C63v18Ev();
extern void _ZN6S287C63v19Ev();
extern void _ZN6S287C63v20Ev();
extern void _ZN6S287C63v21Ev();
extern void _ZN6S287C63v22Ev();
extern void _ZN6S287C63v23Ev();
extern void _ZN6S287C63v24Ev();
extern void _ZN6S287C63v25Ev();
extern void _ZN6S287C63v26Ev();
extern void _ZN6S287C63v27Ev();
extern void _ZN6S287C63v28Ev();
extern void _ZN6S287C63v29Ev();
extern void _ZN6S287C63v30Ev();
extern void _ZN6S287C63v31Ev();
extern void _ZN6S287C63v32Ev();
extern void _ZN6S287C63v33Ev();
extern void _ZN6S287C63v34Ev();
extern void _ZN6S287C63v35Ev();
extern void _ZN6S287C63v36Ev();
extern void _ZN6S287C63v37Ev();
extern void _ZN6S287C63v38Ev();
extern void _ZN6S287C63v39Ev();
extern void _ZN6S287C63v40Ev();
extern void _ZN6S287C63v41Ev();
extern void _ZN6S287C63v42Ev();
extern void _ZN6S287C63v43Ev();
extern void _ZN6S287C63v44Ev();
extern void _ZN6S287C63v45Ev();
extern void _ZN6S287C63v46Ev();
extern void _ZN6S287C63v47Ev();
extern void _ZN6S287C63v48Ev();
extern void _ZN6S287C63v49Ev();
extern void _ZN6S287C63v50Ev();
extern void _ZN6S287C63v51Ev();
extern void _ZN6S287C63v52Ev();
extern void _ZN6S287C63v53Ev();
extern void _ZN6S287C63v54Ev();
extern void _ZN6S287C63v55Ev();
extern void _ZN6S287C63v56Ev();
extern void _ZN6S287C63v57Ev();
extern void _ZN6S287C63v58Ev();
extern void _ZN6S287C63v59Ev();
extern void _ZN6S287C63v60Ev();
extern void _ZN6S287C63v61Ev();
extern void _ZN6S287C63v62Ev();
extern void _ZN6S287C63v63Ev();
extern void _ZN6S287C63v64Ev();
extern void _ZN6S287C63v65Ev();
extern void _ZN6S287C63v66Ev();
extern void _ZN6S287C63v67Ev();
extern void _ZN6S287C63v68Ev();
extern void _ZN6S287C63v69Ev();
extern void _ZN6S287C63v70Ev();
extern void _ZN6S287C63v71Ev();
extern void _ZN6S287C63v72Ev();
extern void _ZN6S287C53v73Ev();
extern void _ZN6S287C53v74Ev();
extern void _ZN6S287C53v75Ev();
extern void _ZN6S287C53v76Ev();
extern void _ZN6S287C53v77Ev();
extern void _ZN6S287C53v78Ev();
extern void _ZN6S287C53v79Ev();
extern void _ZN6S287C53v80Ev();
extern void _ZN6S287C53v81Ev();
extern void _ZN6S287C53v82Ev();
extern void _ZN6S287C53v83Ev();
extern void _ZN6S287C53v84Ev();
extern void _ZN6S287C53v85Ev();
extern void _ZN6S287C53v86Ev();
extern void _ZN6S287C53v87Ev();
extern void _ZN6S287C53v88Ev();
extern void _ZN6S287C53v89Ev();
extern void _ZN6S287C53v90Ev();
extern void _ZN6S287C53v91Ev();
extern void _ZN6S287C53v92Ev();
extern void _ZN6S287C53v93Ev();
extern void _ZN6S287C53v94Ev();
extern void _ZN6S287C43v95Ev();
extern void _ZN6S287C43v96Ev();
extern void _ZN6S287C43v97Ev();
extern void _ZN6S287C43v98Ev();
extern void _ZN6S287C43v99Ev();
extern void _ZN6S287C44v100Ev();
extern void _ZN6S287C44v101Ev();
extern void _ZN6S287C44v102Ev();
extern void _ZN6S287C44v103Ev();
extern void _ZN6S287C44v104Ev();
extern void _ZN6S287C44v105Ev();
extern void _ZN6S287C44v106Ev();
extern void _ZN6S287C44v107Ev();
extern void _ZN6S287C44v108Ev();
extern void _ZN6S287C44v109Ev();
extern void _ZN6S287C44v110Ev();
extern void _ZN6S287C44v111Ev();
extern void _ZN6S287C44v112Ev();
extern void _ZN6S287C44v113Ev();
extern void _ZN6S287C44v114Ev();
extern void _ZN6S287C34v115Ev();
extern void _ZN6S287C34v116Ev();
extern void _ZN6S287C34v117Ev();
extern void _ZN6S287C34v118Ev();
extern void _ZN6S287C34v119Ev();
extern void _ZN6S287C34v120Ev();
extern void _ZN6S287C34v121Ev();
extern void _ZN6S287C34v122Ev();
extern void _ZN6S287C34v123Ev();
extern void _ZN6S287C34v124Ev();
extern void _ZN6S287C34v125Ev();
extern void _ZN6S287C34v126Ev();
extern void _ZN6S287C34v127Ev();
extern void _ZN6S287C34v128Ev();
extern void _ZN6S287C34v129Ev();
extern void _ZN6S287C34v130Ev();
extern void _ZN6S287C34v131Ev();
extern void _ZN6S287C34v132Ev();
extern void _ZN6S287C34v133Ev();
extern void _ZN6S287C34v134Ev();
extern void _ZN6S287C34v135Ev();
extern void _ZN6S287C34v136Ev();
extern void _ZN6S287C24v142Ev();
extern void _ZN6S287C24v143Ev();
extern void _ZN6S287C24v144Ev();
extern void _ZN6S287C24v145Ev();
extern void _ZN6S287C24v146Ev();
extern void _ZN6S287C24v147Ev();
extern void _ZN6S287C24v148Ev();
extern void _ZN6S287C24v149Ev();
extern void _ZN6S287C24v150Ev();
extern void _ZN6S287C24v151Ev();
extern void _ZN6S287C24v152Ev();
extern void _ZN6S287C24v153Ev();
extern void _ZN6S287C24v154Ev();
extern void _ZN6S287C24v155Ev();
extern void _ZN6S287C24v156Ev();
extern void _ZN6S287C24v157Ev();
extern void _ZN6S287C24v158Ev();
extern void _ZN6S287C24v159Ev();
extern void _ZN6S287C24v160Ev();
extern void _ZN6S287C12v1Ev();
extern void _ZN6S287C12v2Ev();
extern void _ZN6S287C12v3Ev();
extern void _ZN6S287C12v4Ev();
extern void _ZN6S287C12v5Ev();
extern void _ZN6S287C12v6Ev();
extern void _ZN6S287C12v7Ev();
extern void _ZN6S287C12v8Ev();
extern void ABISELECT(_ZThn376_N6S287C1D1Ev,_ZThn276_N6S287C1D1Ev)();
extern void ABISELECT(_ZThn376_N6S287C1D0Ev,_ZThn276_N6S287C1D0Ev)();
extern void _ZN10S287C31_nt4v137Ev();
extern void _ZN10S287C31_nt4v138Ev();
extern void _ZN10S287C31_nt4v139Ev();
extern void _ZN10S287C31_nt4v140Ev();
extern void _ZN10S287C31_nt4v141Ev();
static  VTBL_ENTRY vtc_S287C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S287C1[0]),
  (VTBL_ENTRY)&_ZN6S287C1D1Ev,
  (VTBL_ENTRY)&_ZN6S287C1D0Ev,
  (VTBL_ENTRY)&_ZN6S287C62v9Ev,
  (VTBL_ENTRY)&_ZN6S287C63v10Ev,
  (VTBL_ENTRY)&_ZN6S287C63v11Ev,
  (VTBL_ENTRY)&_ZN6S287C63v12Ev,
  (VTBL_ENTRY)&_ZN6S287C63v13Ev,
  (VTBL_ENTRY)&_ZN6S287C63v14Ev,
  (VTBL_ENTRY)&_ZN6S287C63v15Ev,
  (VTBL_ENTRY)&_ZN6S287C63v16Ev,
  (VTBL_ENTRY)&_ZN6S287C63v17Ev,
  (VTBL_ENTRY)&_ZN6S287C63v18Ev,
  (VTBL_ENTRY)&_ZN6S287C63v19Ev,
  (VTBL_ENTRY)&_ZN6S287C63v20Ev,
  (VTBL_ENTRY)&_ZN6S287C63v21Ev,
  (VTBL_ENTRY)&_ZN6S287C63v22Ev,
  (VTBL_ENTRY)&_ZN6S287C63v23Ev,
  (VTBL_ENTRY)&_ZN6S287C63v24Ev,
  (VTBL_ENTRY)&_ZN6S287C63v25Ev,
  (VTBL_ENTRY)&_ZN6S287C63v26Ev,
  (VTBL_ENTRY)&_ZN6S287C63v27Ev,
  (VTBL_ENTRY)&_ZN6S287C63v28Ev,
  (VTBL_ENTRY)&_ZN6S287C63v29Ev,
  (VTBL_ENTRY)&_ZN6S287C63v30Ev,
  (VTBL_ENTRY)&_ZN6S287C63v31Ev,
  (VTBL_ENTRY)&_ZN6S287C63v32Ev,
  (VTBL_ENTRY)&_ZN6S287C63v33Ev,
  (VTBL_ENTRY)&_ZN6S287C63v34Ev,
  (VTBL_ENTRY)&_ZN6S287C63v35Ev,
  (VTBL_ENTRY)&_ZN6S287C63v36Ev,
  (VTBL_ENTRY)&_ZN6S287C63v37Ev,
  (VTBL_ENTRY)&_ZN6S287C63v38Ev,
  (VTBL_ENTRY)&_ZN6S287C63v39Ev,
  (VTBL_ENTRY)&_ZN6S287C63v40Ev,
  (VTBL_ENTRY)&_ZN6S287C63v41Ev,
  (VTBL_ENTRY)&_ZN6S287C63v42Ev,
  (VTBL_ENTRY)&_ZN6S287C63v43Ev,
  (VTBL_ENTRY)&_ZN6S287C63v44Ev,
  (VTBL_ENTRY)&_ZN6S287C63v45Ev,
  (VTBL_ENTRY)&_ZN6S287C63v46Ev,
  (VTBL_ENTRY)&_ZN6S287C63v47Ev,
  (VTBL_ENTRY)&_ZN6S287C63v48Ev,
  (VTBL_ENTRY)&_ZN6S287C63v49Ev,
  (VTBL_ENTRY)&_ZN6S287C63v50Ev,
  (VTBL_ENTRY)&_ZN6S287C63v51Ev,
  (VTBL_ENTRY)&_ZN6S287C63v52Ev,
  (VTBL_ENTRY)&_ZN6S287C63v53Ev,
  (VTBL_ENTRY)&_ZN6S287C63v54Ev,
  (VTBL_ENTRY)&_ZN6S287C63v55Ev,
  (VTBL_ENTRY)&_ZN6S287C63v56Ev,
  (VTBL_ENTRY)&_ZN6S287C63v57Ev,
  (VTBL_ENTRY)&_ZN6S287C63v58Ev,
  (VTBL_ENTRY)&_ZN6S287C63v59Ev,
  (VTBL_ENTRY)&_ZN6S287C63v60Ev,
  (VTBL_ENTRY)&_ZN6S287C63v61Ev,
  (VTBL_ENTRY)&_ZN6S287C63v62Ev,
  (VTBL_ENTRY)&_ZN6S287C63v63Ev,
  (VTBL_ENTRY)&_ZN6S287C63v64Ev,
  (VTBL_ENTRY)&_ZN6S287C63v65Ev,
  (VTBL_ENTRY)&_ZN6S287C63v66Ev,
  (VTBL_ENTRY)&_ZN6S287C63v67Ev,
  (VTBL_ENTRY)&_ZN6S287C63v68Ev,
  (VTBL_ENTRY)&_ZN6S287C63v69Ev,
  (VTBL_ENTRY)&_ZN6S287C63v70Ev,
  (VTBL_ENTRY)&_ZN6S287C63v71Ev,
  (VTBL_ENTRY)&_ZN6S287C63v72Ev,
  (VTBL_ENTRY)&_ZN6S287C53v73Ev,
  (VTBL_ENTRY)&_ZN6S287C53v74Ev,
  (VTBL_ENTRY)&_ZN6S287C53v75Ev,
  (VTBL_ENTRY)&_ZN6S287C53v76Ev,
  (VTBL_ENTRY)&_ZN6S287C53v77Ev,
  (VTBL_ENTRY)&_ZN6S287C53v78Ev,
  (VTBL_ENTRY)&_ZN6S287C53v79Ev,
  (VTBL_ENTRY)&_ZN6S287C53v80Ev,
  (VTBL_ENTRY)&_ZN6S287C53v81Ev,
  (VTBL_ENTRY)&_ZN6S287C53v82Ev,
  (VTBL_ENTRY)&_ZN6S287C53v83Ev,
  (VTBL_ENTRY)&_ZN6S287C53v84Ev,
  (VTBL_ENTRY)&_ZN6S287C53v85Ev,
  (VTBL_ENTRY)&_ZN6S287C53v86Ev,
  (VTBL_ENTRY)&_ZN6S287C53v87Ev,
  (VTBL_ENTRY)&_ZN6S287C53v88Ev,
  (VTBL_ENTRY)&_ZN6S287C53v89Ev,
  (VTBL_ENTRY)&_ZN6S287C53v90Ev,
  (VTBL_ENTRY)&_ZN6S287C53v91Ev,
  (VTBL_ENTRY)&_ZN6S287C53v92Ev,
  (VTBL_ENTRY)&_ZN6S287C53v93Ev,
  (VTBL_ENTRY)&_ZN6S287C53v94Ev,
  (VTBL_ENTRY)&_ZN6S287C43v95Ev,
  (VTBL_ENTRY)&_ZN6S287C43v96Ev,
  (VTBL_ENTRY)&_ZN6S287C43v97Ev,
  (VTBL_ENTRY)&_ZN6S287C43v98Ev,
  (VTBL_ENTRY)&_ZN6S287C43v99Ev,
  (VTBL_ENTRY)&_ZN6S287C44v100Ev,
  (VTBL_ENTRY)&_ZN6S287C44v101Ev,
  (VTBL_ENTRY)&_ZN6S287C44v102Ev,
  (VTBL_ENTRY)&_ZN6S287C44v103Ev,
  (VTBL_ENTRY)&_ZN6S287C44v104Ev,
  (VTBL_ENTRY)&_ZN6S287C44v105Ev,
  (VTBL_ENTRY)&_ZN6S287C44v106Ev,
  (VTBL_ENTRY)&_ZN6S287C44v107Ev,
  (VTBL_ENTRY)&_ZN6S287C44v108Ev,
  (VTBL_ENTRY)&_ZN6S287C44v109Ev,
  (VTBL_ENTRY)&_ZN6S287C44v110Ev,
  (VTBL_ENTRY)&_ZN6S287C44v111Ev,
  (VTBL_ENTRY)&_ZN6S287C44v112Ev,
  (VTBL_ENTRY)&_ZN6S287C44v113Ev,
  (VTBL_ENTRY)&_ZN6S287C44v114Ev,
  (VTBL_ENTRY)&_ZN6S287C34v115Ev,
  (VTBL_ENTRY)&_ZN6S287C34v116Ev,
  (VTBL_ENTRY)&_ZN6S287C34v117Ev,
  (VTBL_ENTRY)&_ZN6S287C34v118Ev,
  (VTBL_ENTRY)&_ZN6S287C34v119Ev,
  (VTBL_ENTRY)&_ZN6S287C34v120Ev,
  (VTBL_ENTRY)&_ZN6S287C34v121Ev,
  (VTBL_ENTRY)&_ZN6S287C34v122Ev,
  (VTBL_ENTRY)&_ZN6S287C34v123Ev,
  (VTBL_ENTRY)&_ZN6S287C34v124Ev,
  (VTBL_ENTRY)&_ZN6S287C34v125Ev,
  (VTBL_ENTRY)&_ZN6S287C34v126Ev,
  (VTBL_ENTRY)&_ZN6S287C34v127Ev,
  (VTBL_ENTRY)&_ZN6S287C34v128Ev,
  (VTBL_ENTRY)&_ZN6S287C34v129Ev,
  (VTBL_ENTRY)&_ZN6S287C34v130Ev,
  (VTBL_ENTRY)&_ZN6S287C34v131Ev,
  (VTBL_ENTRY)&_ZN6S287C34v132Ev,
  (VTBL_ENTRY)&_ZN6S287C34v133Ev,
  (VTBL_ENTRY)&_ZN6S287C34v134Ev,
  (VTBL_ENTRY)&_ZN6S287C34v135Ev,
  (VTBL_ENTRY)&_ZN6S287C34v136Ev,
  (VTBL_ENTRY)&_ZN6S287C24v142Ev,
  (VTBL_ENTRY)&_ZN6S287C24v143Ev,
  (VTBL_ENTRY)&_ZN6S287C24v144Ev,
  (VTBL_ENTRY)&_ZN6S287C24v145Ev,
  (VTBL_ENTRY)&_ZN6S287C24v146Ev,
  (VTBL_ENTRY)&_ZN6S287C24v147Ev,
  (VTBL_ENTRY)&_ZN6S287C24v148Ev,
  (VTBL_ENTRY)&_ZN6S287C24v149Ev,
  (VTBL_ENTRY)&_ZN6S287C24v150Ev,
  (VTBL_ENTRY)&_ZN6S287C24v151Ev,
  (VTBL_ENTRY)&_ZN6S287C24v152Ev,
  (VTBL_ENTRY)&_ZN6S287C24v153Ev,
  (VTBL_ENTRY)&_ZN6S287C24v154Ev,
  (VTBL_ENTRY)&_ZN6S287C24v155Ev,
  (VTBL_ENTRY)&_ZN6S287C24v156Ev,
  (VTBL_ENTRY)&_ZN6S287C24v157Ev,
  (VTBL_ENTRY)&_ZN6S287C24v158Ev,
  (VTBL_ENTRY)&_ZN6S287C24v159Ev,
  (VTBL_ENTRY)&_ZN6S287C24v160Ev,
  (VTBL_ENTRY)&_ZN6S287C12v1Ev,
  (VTBL_ENTRY)&_ZN6S287C12v2Ev,
  (VTBL_ENTRY)&_ZN6S287C12v3Ev,
  (VTBL_ENTRY)&_ZN6S287C12v4Ev,
  (VTBL_ENTRY)&_ZN6S287C12v5Ev,
  (VTBL_ENTRY)&_ZN6S287C12v6Ev,
  (VTBL_ENTRY)&_ZN6S287C12v7Ev,
  (VTBL_ENTRY)&_ZN6S287C12v8Ev,
  ABISELECT(-376,-276),
  (VTBL_ENTRY)&(_ZTI6S287C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn376_N6S287C1D1Ev,_ZThn276_N6S287C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn376_N6S287C1D0Ev,_ZThn276_N6S287C1D0Ev),
  (VTBL_ENTRY)&_ZN10S287C31_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S287C31_nt4v141Ev,
};
extern VTBL_ENTRY _ZTI6S287C1[];
extern  VTBL_ENTRY _ZTV6S287C1[];
Class_Descriptor cd_S287C1 = {  "S287C1", // class name
  bases_S287C1, 6,
  &(vtc_S287C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,292), // object size
  NSPAIRA(_ZTI6S287C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S287C1),168, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C7  {
  int s113c7f0;
  __tsi64 s113c7f1;
  void *s113c7f2[4];
  int s113c7f3[2];
  void *s113c7f4;
  ::S3350C4_nt s113c7f5;
  void *s113c7f6[2];
  virtual  ~S113C7(); // _ZN6S113C7D1Ev
  virtual void  v7(); // _ZN6S113C72v7Ev
  virtual void  v8(); // _ZN6S113C72v8Ev
  virtual void  v9(); // _ZN6S113C72v9Ev
  virtual void  v10(); // _ZN6S113C73v10Ev
  virtual void  v11(); // _ZN6S113C73v11Ev
  virtual void  v12(); // _ZN6S113C73v12Ev
  virtual void  v13(); // _ZN6S113C73v13Ev
  virtual void  v14(); // _ZN6S113C73v14Ev
  virtual void  v15(); // _ZN6S113C73v15Ev
  virtual void  v16(); // _ZN6S113C73v16Ev
  virtual void  v17(); // _ZN6S113C73v17Ev
  virtual void  v18(); // _ZN6S113C73v18Ev
  virtual void  v19(); // _ZN6S113C73v19Ev
  virtual void  v20(); // _ZN6S113C73v20Ev
  virtual void  v21(); // _ZN6S113C73v21Ev
  virtual void  v22(); // _ZN6S113C73v22Ev
  virtual void  v23(); // _ZN6S113C73v23Ev
  virtual void  v24(); // _ZN6S113C73v24Ev
  virtual void  v25(); // _ZN6S113C73v25Ev
  virtual void  v26(); // _ZN6S113C73v26Ev
  virtual void  v27(); // _ZN6S113C73v27Ev
  virtual void  v28(); // _ZN6S113C73v28Ev
  virtual void  v29(); // _ZN6S113C73v29Ev
  virtual void  v30(); // _ZN6S113C73v30Ev
  virtual void  v31(); // _ZN6S113C73v31Ev
  virtual void  v32(); // _ZN6S113C73v32Ev
  virtual void  v33(); // _ZN6S113C73v33Ev
  virtual void  v34(); // _ZN6S113C73v34Ev
  virtual void  v35(); // _ZN6S113C73v35Ev
  virtual void  v36(); // _ZN6S113C73v36Ev
  virtual void  v37(); // _ZN6S113C73v37Ev
  virtual void  v38(); // _ZN6S113C73v38Ev
  virtual void  v39(); // _ZN6S113C73v39Ev
  virtual void  v40(); // _ZN6S113C73v40Ev
  virtual void  v41(); // _ZN6S113C73v41Ev
  virtual void  v42(); // _ZN6S113C73v42Ev
  virtual void  v43(); // _ZN6S113C73v43Ev
  virtual void  v44(); // _ZN6S113C73v44Ev
  virtual void  v45(); // _ZN6S113C73v45Ev
  virtual void  v46(); // _ZN6S113C73v46Ev
  virtual void  v47(); // _ZN6S113C73v47Ev
  virtual void  v48(); // _ZN6S113C73v48Ev
  virtual void  v49(); // _ZN6S113C73v49Ev
  virtual void  v50(); // _ZN6S113C73v50Ev
  virtual void  v51(); // _ZN6S113C73v51Ev
  virtual void  v52(); // _ZN6S113C73v52Ev
  virtual void  v53(); // _ZN6S113C73v53Ev
  virtual void  v54(); // _ZN6S113C73v54Ev
  virtual void  v55(); // _ZN6S113C73v55Ev
  virtual void  v56(); // _ZN6S113C73v56Ev
  virtual void  v57(); // _ZN6S113C73v57Ev
  virtual void  v58(); // _ZN6S113C73v58Ev
  virtual void  v59(); // _ZN6S113C73v59Ev
  virtual void  v60(); // _ZN6S113C73v60Ev
  virtual void  v61(); // _ZN6S113C73v61Ev
  virtual void  v62(); // _ZN6S113C73v62Ev
  virtual void  v63(); // _ZN6S113C73v63Ev
  virtual void  v64(); // _ZN6S113C73v64Ev
  virtual void  v65(); // _ZN6S113C73v65Ev
  virtual void  v66(); // _ZN6S113C73v66Ev
  virtual void  v67(); // _ZN6S113C73v67Ev
  virtual void  v68(); // _ZN6S113C73v68Ev
  virtual void  v69(); // _ZN6S113C73v69Ev
  virtual void  v70(); // _ZN6S113C73v70Ev
  S113C7(); // tgen
};
//SIG(-1 S113C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S113C7 ::~S113C7(){ note_dtor("S113C7", this);}
void  S113C7 ::v7(){vfunc_called(this, "_ZN6S113C72v7Ev");}
void  S113C7 ::v8(){vfunc_called(this, "_ZN6S113C72v8Ev");}
void  S113C7 ::v9(){vfunc_called(this, "_ZN6S113C72v9Ev");}
void  S113C7 ::v10(){vfunc_called(this, "_ZN6S113C73v10Ev");}
void  S113C7 ::v11(){vfunc_called(this, "_ZN6S113C73v11Ev");}
void  S113C7 ::v12(){vfunc_called(this, "_ZN6S113C73v12Ev");}
void  S113C7 ::v13(){vfunc_called(this, "_ZN6S113C73v13Ev");}
void  S113C7 ::v14(){vfunc_called(this, "_ZN6S113C73v14Ev");}
void  S113C7 ::v15(){vfunc_called(this, "_ZN6S113C73v15Ev");}
void  S113C7 ::v16(){vfunc_called(this, "_ZN6S113C73v16Ev");}
void  S113C7 ::v17(){vfunc_called(this, "_ZN6S113C73v17Ev");}
void  S113C7 ::v18(){vfunc_called(this, "_ZN6S113C73v18Ev");}
void  S113C7 ::v19(){vfunc_called(this, "_ZN6S113C73v19Ev");}
void  S113C7 ::v20(){vfunc_called(this, "_ZN6S113C73v20Ev");}
void  S113C7 ::v21(){vfunc_called(this, "_ZN6S113C73v21Ev");}
void  S113C7 ::v22(){vfunc_called(this, "_ZN6S113C73v22Ev");}
void  S113C7 ::v23(){vfunc_called(this, "_ZN6S113C73v23Ev");}
void  S113C7 ::v24(){vfunc_called(this, "_ZN6S113C73v24Ev");}
void  S113C7 ::v25(){vfunc_called(this, "_ZN6S113C73v25Ev");}
void  S113C7 ::v26(){vfunc_called(this, "_ZN6S113C73v26Ev");}
void  S113C7 ::v27(){vfunc_called(this, "_ZN6S113C73v27Ev");}
void  S113C7 ::v28(){vfunc_called(this, "_ZN6S113C73v28Ev");}
void  S113C7 ::v29(){vfunc_called(this, "_ZN6S113C73v29Ev");}
void  S113C7 ::v30(){vfunc_called(this, "_ZN6S113C73v30Ev");}
void  S113C7 ::v31(){vfunc_called(this, "_ZN6S113C73v31Ev");}
void  S113C7 ::v32(){vfunc_called(this, "_ZN6S113C73v32Ev");}
void  S113C7 ::v33(){vfunc_called(this, "_ZN6S113C73v33Ev");}
void  S113C7 ::v34(){vfunc_called(this, "_ZN6S113C73v34Ev");}
void  S113C7 ::v35(){vfunc_called(this, "_ZN6S113C73v35Ev");}
void  S113C7 ::v36(){vfunc_called(this, "_ZN6S113C73v36Ev");}
void  S113C7 ::v37(){vfunc_called(this, "_ZN6S113C73v37Ev");}
void  S113C7 ::v38(){vfunc_called(this, "_ZN6S113C73v38Ev");}
void  S113C7 ::v39(){vfunc_called(this, "_ZN6S113C73v39Ev");}
void  S113C7 ::v40(){vfunc_called(this, "_ZN6S113C73v40Ev");}
void  S113C7 ::v41(){vfunc_called(this, "_ZN6S113C73v41Ev");}
void  S113C7 ::v42(){vfunc_called(this, "_ZN6S113C73v42Ev");}
void  S113C7 ::v43(){vfunc_called(this, "_ZN6S113C73v43Ev");}
void  S113C7 ::v44(){vfunc_called(this, "_ZN6S113C73v44Ev");}
void  S113C7 ::v45(){vfunc_called(this, "_ZN6S113C73v45Ev");}
void  S113C7 ::v46(){vfunc_called(this, "_ZN6S113C73v46Ev");}
void  S113C7 ::v47(){vfunc_called(this, "_ZN6S113C73v47Ev");}
void  S113C7 ::v48(){vfunc_called(this, "_ZN6S113C73v48Ev");}
void  S113C7 ::v49(){vfunc_called(this, "_ZN6S113C73v49Ev");}
void  S113C7 ::v50(){vfunc_called(this, "_ZN6S113C73v50Ev");}
void  S113C7 ::v51(){vfunc_called(this, "_ZN6S113C73v51Ev");}
void  S113C7 ::v52(){vfunc_called(this, "_ZN6S113C73v52Ev");}
void  S113C7 ::v53(){vfunc_called(this, "_ZN6S113C73v53Ev");}
void  S113C7 ::v54(){vfunc_called(this, "_ZN6S113C73v54Ev");}
void  S113C7 ::v55(){vfunc_called(this, "_ZN6S113C73v55Ev");}
void  S113C7 ::v56(){vfunc_called(this, "_ZN6S113C73v56Ev");}
void  S113C7 ::v57(){vfunc_called(this, "_ZN6S113C73v57Ev");}
void  S113C7 ::v58(){vfunc_called(this, "_ZN6S113C73v58Ev");}
void  S113C7 ::v59(){vfunc_called(this, "_ZN6S113C73v59Ev");}
void  S113C7 ::v60(){vfunc_called(this, "_ZN6S113C73v60Ev");}
void  S113C7 ::v61(){vfunc_called(this, "_ZN6S113C73v61Ev");}
void  S113C7 ::v62(){vfunc_called(this, "_ZN6S113C73v62Ev");}
void  S113C7 ::v63(){vfunc_called(this, "_ZN6S113C73v63Ev");}
void  S113C7 ::v64(){vfunc_called(this, "_ZN6S113C73v64Ev");}
void  S113C7 ::v65(){vfunc_called(this, "_ZN6S113C73v65Ev");}
void  S113C7 ::v66(){vfunc_called(this, "_ZN6S113C73v66Ev");}
void  S113C7 ::v67(){vfunc_called(this, "_ZN6S113C73v67Ev");}
void  S113C7 ::v68(){vfunc_called(this, "_ZN6S113C73v68Ev");}
void  S113C7 ::v69(){vfunc_called(this, "_ZN6S113C73v69Ev");}
void  S113C7 ::v70(){vfunc_called(this, "_ZN6S113C73v70Ev");}
S113C7 ::S113C7(){ note_ctor("S113C7", this);} // tgen

static void Test_S113C7()
{
  extern Class_Descriptor cd_S113C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S113C7, buf);
    S113C7 *dp, &lv = *(dp=new (buf) S113C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S113C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C7)");
    check_field_offset(lv, s113c7f0, ABISELECT(8,4), "S113C7.s113c7f0");
    check_field_offset(lv, s113c7f1, ABISELECT(16,8), "S113C7.s113c7f1");
    check_field_offset(lv, s113c7f2, ABISELECT(24,16), "S113C7.s113c7f2");
    check_field_offset(lv, s113c7f3, ABISELECT(56,32), "S113C7.s113c7f3");
    check_field_offset(lv, s113c7f4, ABISELECT(64,40), "S113C7.s113c7f4");
    check_field_offset(lv, s113c7f5, ABISELECT(72,44), "S113C7.s113c7f5");
    check_field_offset(lv, s113c7f6, ABISELECT(80,52), "S113C7.s113c7f6");
    test_class_info(&lv, &cd_S113C7);
    dp->~S113C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C7(Test_S113C7, "S113C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S113C7C1Ev();
extern void _ZN6S113C7D1Ev();
Name_Map name_map_S113C7[] = {
  NSPAIR(_ZN6S113C7C1Ev),
  NSPAIR(_ZN6S113C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S113C7[];
extern void _ZN6S113C7D1Ev();
extern void _ZN6S113C7D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
static  VTBL_ENTRY vtc_S113C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C7[0]),
  (VTBL_ENTRY)&_ZN6S113C7D1Ev,
  (VTBL_ENTRY)&_ZN6S113C7D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
};
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
Class_Descriptor cd_S113C7 = {  "S113C7", // class name
  0,0,//no base classes
  &(vtc_S113C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S113C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S113C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C6  : S113C7 {
  int s113c6f0[2];
  void *s113c6f1;
  int s113c6f2[2];
  ::S287C8_nt s113c6f3;
  ::S287C8_nt s113c6f4;
  ::S2121C38 s113c6f5;
  ::S287C8_nt s113c6f6;
  unsigned int s113c6f7:1;
  unsigned int s113c6f8:1;
  unsigned int s113c6f9:1;
  unsigned int s113c6f10:1;
  unsigned int s113c6f11:1;
  int s113c6f12[2];
  virtual  ~S113C6(); // _ZN6S113C6D1Ev
  virtual void  v71(); // _ZN6S113C63v71Ev
  virtual void  v72(); // _ZN6S113C63v72Ev
  virtual void  v73(); // _ZN6S113C63v73Ev
  virtual void  v74(); // _ZN6S113C63v74Ev
  virtual void  v75(); // _ZN6S113C63v75Ev
  virtual void  v76(); // _ZN6S113C63v76Ev
  virtual void  v77(); // _ZN6S113C63v77Ev
  virtual void  v78(); // _ZN6S113C63v78Ev
  virtual void  v79(); // _ZN6S113C63v79Ev
  virtual void  v80(); // _ZN6S113C63v80Ev
  virtual void  v81(); // _ZN6S113C63v81Ev
  virtual void  v82(); // _ZN6S113C63v82Ev
  virtual void  v83(); // _ZN6S113C63v83Ev
  virtual void  v84(); // _ZN6S113C63v84Ev
  virtual void  v85(); // _ZN6S113C63v85Ev
  virtual void  v86(); // _ZN6S113C63v86Ev
  virtual void  v87(); // _ZN6S113C63v87Ev
  virtual void  v88(); // _ZN6S113C63v88Ev
  virtual void  v89(); // _ZN6S113C63v89Ev
  virtual void  v90(); // _ZN6S113C63v90Ev
  virtual void  v91(); // _ZN6S113C63v91Ev
  virtual void  v92(); // _ZN6S113C63v92Ev
  S113C6(); // tgen
};
//SIG(-1 S113C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S113C6 ::~S113C6(){ note_dtor("S113C6", this);}
void  S113C6 ::v71(){vfunc_called(this, "_ZN6S113C63v71Ev");}
void  S113C6 ::v72(){vfunc_called(this, "_ZN6S113C63v72Ev");}
void  S113C6 ::v73(){vfunc_called(this, "_ZN6S113C63v73Ev");}
void  S113C6 ::v74(){vfunc_called(this, "_ZN6S113C63v74Ev");}
void  S113C6 ::v75(){vfunc_called(this, "_ZN6S113C63v75Ev");}
void  S113C6 ::v76(){vfunc_called(this, "_ZN6S113C63v76Ev");}
void  S113C6 ::v77(){vfunc_called(this, "_ZN6S113C63v77Ev");}
void  S113C6 ::v78(){vfunc_called(this, "_ZN6S113C63v78Ev");}
void  S113C6 ::v79(){vfunc_called(this, "_ZN6S113C63v79Ev");}
void  S113C6 ::v80(){vfunc_called(this, "_ZN6S113C63v80Ev");}
void  S113C6 ::v81(){vfunc_called(this, "_ZN6S113C63v81Ev");}
void  S113C6 ::v82(){vfunc_called(this, "_ZN6S113C63v82Ev");}
void  S113C6 ::v83(){vfunc_called(this, "_ZN6S113C63v83Ev");}
void  S113C6 ::v84(){vfunc_called(this, "_ZN6S113C63v84Ev");}
void  S113C6 ::v85(){vfunc_called(this, "_ZN6S113C63v85Ev");}
void  S113C6 ::v86(){vfunc_called(this, "_ZN6S113C63v86Ev");}
void  S113C6 ::v87(){vfunc_called(this, "_ZN6S113C63v87Ev");}
void  S113C6 ::v88(){vfunc_called(this, "_ZN6S113C63v88Ev");}
void  S113C6 ::v89(){vfunc_called(this, "_ZN6S113C63v89Ev");}
void  S113C6 ::v90(){vfunc_called(this, "_ZN6S113C63v90Ev");}
void  S113C6 ::v91(){vfunc_called(this, "_ZN6S113C63v91Ev");}
void  S113C6 ::v92(){vfunc_called(this, "_ZN6S113C63v92Ev");}
S113C6 ::S113C6(){ note_ctor("S113C6", this);} // tgen

static void Test_S113C6()
{
  extern Class_Descriptor cd_S113C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S113C6, buf);
    S113C6 *dp, &lv = *(dp=new (buf) S113C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S113C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C6)");
    check_base_class_offset(lv, (S113C7*), 0, "S113C6");
    check_field_offset(lv, s113c6f0, ABISELECT(96,60), "S113C6.s113c6f0");
    check_field_offset(lv, s113c6f1, ABISELECT(104,68), "S113C6.s113c6f1");
    check_field_offset(lv, s113c6f2, ABISELECT(112,72), "S113C6.s113c6f2");
    check_field_offset(lv, s113c6f3, ABISELECT(120,80), "S113C6.s113c6f3");
    check_field_offset(lv, s113c6f4, ABISELECT(136,92), "S113C6.s113c6f4");
    check_field_offset(lv, s113c6f5, ABISELECT(152,104), "S113C6.s113c6f5");
    check_field_offset(lv, s113c6f6, ABISELECT(160,108), "S113C6.s113c6f6");
    set_bf_and_test(lv, s113c6f7, ABISELECT(176,120), 0, 1, 1, "S113C6");
    set_bf_and_test(lv, s113c6f8, ABISELECT(176,120), 1, 1, 1, "S113C6");
    set_bf_and_test(lv, s113c6f9, ABISELECT(176,120), 2, 1, 1, "S113C6");
    set_bf_and_test(lv, s113c6f10, ABISELECT(176,120), 3, 1, 1, "S113C6");
    set_bf_and_test(lv, s113c6f11, ABISELECT(176,120), 4, 1, 1, "S113C6");
    check_field_offset(lv, s113c6f12, ABISELECT(180,124), "S113C6.s113c6f12");
    test_class_info(&lv, &cd_S113C6);
    dp->~S113C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C6(Test_S113C6, "S113C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S113C6C1Ev();
extern void _ZN6S113C6D1Ev();
Name_Map name_map_S113C6[] = {
  NSPAIR(_ZN6S113C6C1Ev),
  NSPAIR(_ZN6S113C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
static Base_Class bases_S113C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S113C6[];
extern void _ZN6S113C6D1Ev();
extern void _ZN6S113C6D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
static  VTBL_ENTRY vtc_S113C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C6[0]),
  (VTBL_ENTRY)&_ZN6S113C6D1Ev,
  (VTBL_ENTRY)&_ZN6S113C6D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
};
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
Class_Descriptor cd_S113C6 = {  "S113C6", // class name
  bases_S113C6, 1,
  &(vtc_S113C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S113C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C5  : S113C6 {
  unsigned int s113c5f0:1;
  unsigned int s113c5f1:1;
  unsigned int s113c5f2:1;
  ::S3350C17 s113c5f3;
  ::S3350C11 s113c5f4;
  ::S3350C5_nt s113c5f5;
  ::S287C27 s113c5f6;
  int s113c5f7[3];
  virtual  ~S113C5(); // _ZN6S113C5D1Ev
  virtual void  v93(); // _ZN6S113C53v93Ev
  virtual void  v94(); // _ZN6S113C53v94Ev
  virtual void  v95(); // _ZN6S113C53v95Ev
  virtual void  v96(); // _ZN6S113C53v96Ev
  virtual void  v97(); // _ZN6S113C53v97Ev
  virtual void  v98(); // _ZN6S113C53v98Ev
  virtual void  v99(); // _ZN6S113C53v99Ev
  virtual void  v100(); // _ZN6S113C54v100Ev
  virtual void  v101(); // _ZN6S113C54v101Ev
  virtual void  v102(); // _ZN6S113C54v102Ev
  virtual void  v103(); // _ZN6S113C54v103Ev
  virtual void  v104(); // _ZN6S113C54v104Ev
  virtual void  v105(); // _ZN6S113C54v105Ev
  virtual void  v106(); // _ZN6S113C54v106Ev
  virtual void  v107(); // _ZN6S113C54v107Ev
  virtual void  v108(); // _ZN6S113C54v108Ev
  virtual void  v109(); // _ZN6S113C54v109Ev
  virtual void  v110(); // _ZN6S113C54v110Ev
  virtual void  v111(); // _ZN6S113C54v111Ev
  virtual void  v112(); // _ZN6S113C54v112Ev
  S113C5(); // tgen
};
//SIG(-1 S113C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S113C5 ::~S113C5(){ note_dtor("S113C5", this);}
void  S113C5 ::v93(){vfunc_called(this, "_ZN6S113C53v93Ev");}
void  S113C5 ::v94(){vfunc_called(this, "_ZN6S113C53v94Ev");}
void  S113C5 ::v95(){vfunc_called(this, "_ZN6S113C53v95Ev");}
void  S113C5 ::v96(){vfunc_called(this, "_ZN6S113C53v96Ev");}
void  S113C5 ::v97(){vfunc_called(this, "_ZN6S113C53v97Ev");}
void  S113C5 ::v98(){vfunc_called(this, "_ZN6S113C53v98Ev");}
void  S113C5 ::v99(){vfunc_called(this, "_ZN6S113C53v99Ev");}
void  S113C5 ::v100(){vfunc_called(this, "_ZN6S113C54v100Ev");}
void  S113C5 ::v101(){vfunc_called(this, "_ZN6S113C54v101Ev");}
void  S113C5 ::v102(){vfunc_called(this, "_ZN6S113C54v102Ev");}
void  S113C5 ::v103(){vfunc_called(this, "_ZN6S113C54v103Ev");}
void  S113C5 ::v104(){vfunc_called(this, "_ZN6S113C54v104Ev");}
void  S113C5 ::v105(){vfunc_called(this, "_ZN6S113C54v105Ev");}
void  S113C5 ::v106(){vfunc_called(this, "_ZN6S113C54v106Ev");}
void  S113C5 ::v107(){vfunc_called(this, "_ZN6S113C54v107Ev");}
void  S113C5 ::v108(){vfunc_called(this, "_ZN6S113C54v108Ev");}
void  S113C5 ::v109(){vfunc_called(this, "_ZN6S113C54v109Ev");}
void  S113C5 ::v110(){vfunc_called(this, "_ZN6S113C54v110Ev");}
void  S113C5 ::v111(){vfunc_called(this, "_ZN6S113C54v111Ev");}
void  S113C5 ::v112(){vfunc_called(this, "_ZN6S113C54v112Ev");}
S113C5 ::S113C5(){ note_ctor("S113C5", this);} // tgen

static void Test_S113C5()
{
  extern Class_Descriptor cd_S113C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S113C5, buf);
    S113C5 *dp, &lv = *(dp=new (buf) S113C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S113C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C5)");
    check_base_class_offset(lv, (S113C7*)(S113C6*), 0, "S113C5");
    check_base_class_offset(lv, (S113C6*), 0, "S113C5");
    set_bf_and_test(lv, s113c5f0, ABISELECT(188,132), 0, 1, 1, "S113C5");
    set_bf_and_test(lv, s113c5f1, ABISELECT(188,132), 1, 1, 1, "S113C5");
    set_bf_and_test(lv, s113c5f2, ABISELECT(188,132), 2, 1, 1, "S113C5");
    check_field_offset(lv, s113c5f3, ABISELECT(192,136), "S113C5.s113c5f3");
    check_field_offset(lv, s113c5f4, ABISELECT(208,148), "S113C5.s113c5f4");
    check_field_offset(lv, s113c5f5, ABISELECT(224,160), "S113C5.s113c5f5");
    check_field_offset(lv, s113c5f6, ABISELECT(240,172), "S113C5.s113c5f6");
    check_field_offset(lv, s113c5f7, ABISELECT(256,184), "S113C5.s113c5f7");
    test_class_info(&lv, &cd_S113C5);
    dp->~S113C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C5(Test_S113C5, "S113C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S113C5C1Ev();
extern void _ZN6S113C5D1Ev();
Name_Map name_map_S113C5[] = {
  NSPAIR(_ZN6S113C5C1Ev),
  NSPAIR(_ZN6S113C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
static Base_Class bases_S113C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S113C5[];
extern void _ZN6S113C5D1Ev();
extern void _ZN6S113C5D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
static  VTBL_ENTRY vtc_S113C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C5[0]),
  (VTBL_ENTRY)&_ZN6S113C5D1Ev,
  (VTBL_ENTRY)&_ZN6S113C5D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
};
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
Class_Descriptor cd_S113C5 = {  "S113C5", // class name
  bases_S113C5, 2,
  &(vtc_S113C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S113C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C4  : S113C5 {
  ::S3350C4_nt s113c4f0;
  unsigned int s113c4f1:1;
  ::S287C23 s113c4f2;
  virtual  ~S113C4(); // _ZN6S113C4D1Ev
  virtual void  v113(); // _ZN6S113C44v113Ev
  virtual void  v114(); // _ZN6S113C44v114Ev
  virtual void  v115(); // _ZN6S113C44v115Ev
  virtual void  v116(); // _ZN6S113C44v116Ev
  S113C4(); // tgen
};
//SIG(-1 S113C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S113C4 ::~S113C4(){ note_dtor("S113C4", this);}
void  S113C4 ::v113(){vfunc_called(this, "_ZN6S113C44v113Ev");}
void  S113C4 ::v114(){vfunc_called(this, "_ZN6S113C44v114Ev");}
void  S113C4 ::v115(){vfunc_called(this, "_ZN6S113C44v115Ev");}
void  S113C4 ::v116(){vfunc_called(this, "_ZN6S113C44v116Ev");}
S113C4 ::S113C4(){ note_ctor("S113C4", this);} // tgen

static void Test_S113C4()
{
  extern Class_Descriptor cd_S113C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S113C4, buf);
    S113C4 *dp, &lv = *(dp=new (buf) S113C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S113C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C4)");
    check_base_class_offset(lv, (S113C7*)(S113C6*)(S113C5*), 0, "S113C4");
    check_base_class_offset(lv, (S113C6*)(S113C5*), 0, "S113C4");
    check_base_class_offset(lv, (S113C5*), 0, "S113C4");
    check_field_offset(lv, s113c4f0, ABISELECT(268,196), "S113C4.s113c4f0");
    set_bf_and_test(lv, s113c4f1, ABISELECT(276,204), 0, 1, 1, "S113C4");
    check_field_offset(lv, s113c4f2, ABISELECT(280,208), "S113C4.s113c4f2");
    test_class_info(&lv, &cd_S113C4);
    dp->~S113C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C4(Test_S113C4, "S113C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S113C4C1Ev();
extern void _ZN6S113C4D1Ev();
Name_Map name_map_S113C4[] = {
  NSPAIR(_ZN6S113C4C1Ev),
  NSPAIR(_ZN6S113C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
extern Class_Descriptor cd_S113C5;
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
static Base_Class bases_S113C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S113C4[];
extern void _ZN6S113C4D1Ev();
extern void _ZN6S113C4D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
extern void _ZN6S113C44v113Ev();
extern void _ZN6S113C44v114Ev();
extern void _ZN6S113C44v115Ev();
extern void _ZN6S113C44v116Ev();
static  VTBL_ENTRY vtc_S113C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C4[0]),
  (VTBL_ENTRY)&_ZN6S113C4D1Ev,
  (VTBL_ENTRY)&_ZN6S113C4D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
  (VTBL_ENTRY)&_ZN6S113C44v113Ev,
  (VTBL_ENTRY)&_ZN6S113C44v114Ev,
  (VTBL_ENTRY)&_ZN6S113C44v115Ev,
  (VTBL_ENTRY)&_ZN6S113C44v116Ev,
};
extern VTBL_ENTRY _ZTI6S113C4[];
extern  VTBL_ENTRY _ZTV6S113C4[];
Class_Descriptor cd_S113C4 = {  "S113C4", // class name
  bases_S113C4, 3,
  &(vtc_S113C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S113C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C4),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C3  : S113C4 {
  ::S287C19 s113c3f0;
  unsigned int s113c3f1:1;
  virtual  ~S113C3(); // _ZN6S113C3D1Ev
  virtual void  v117(); // _ZN6S113C34v117Ev
  virtual void  v118(); // _ZN6S113C34v118Ev
  virtual void  v119(); // _ZN6S113C34v119Ev
  virtual void  v120(); // _ZN6S113C34v120Ev
  virtual void  v121(); // _ZN6S113C34v121Ev
  virtual void  v122(); // _ZN6S113C34v122Ev
  virtual void  v123(); // _ZN6S113C34v123Ev
  S113C3(); // tgen
};
//SIG(-1 S113C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S113C3 ::~S113C3(){ note_dtor("S113C3", this);}
void  S113C3 ::v117(){vfunc_called(this, "_ZN6S113C34v117Ev");}
void  S113C3 ::v118(){vfunc_called(this, "_ZN6S113C34v118Ev");}
void  S113C3 ::v119(){vfunc_called(this, "_ZN6S113C34v119Ev");}
void  S113C3 ::v120(){vfunc_called(this, "_ZN6S113C34v120Ev");}
void  S113C3 ::v121(){vfunc_called(this, "_ZN6S113C34v121Ev");}
void  S113C3 ::v122(){vfunc_called(this, "_ZN6S113C34v122Ev");}
void  S113C3 ::v123(){vfunc_called(this, "_ZN6S113C34v123Ev");}
S113C3 ::S113C3(){ note_ctor("S113C3", this);} // tgen

static void Test_S113C3()
{
  extern Class_Descriptor cd_S113C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S113C3, buf);
    S113C3 *dp, &lv = *(dp=new (buf) S113C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S113C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C3)");
    check_base_class_offset(lv, (S113C7*)(S113C6*)(S113C5*)(S113C4*), 0, "S113C3");
    check_base_class_offset(lv, (S113C6*)(S113C5*)(S113C4*), 0, "S113C3");
    check_base_class_offset(lv, (S113C5*)(S113C4*), 0, "S113C3");
    check_base_class_offset(lv, (S113C4*), 0, "S113C3");
    check_field_offset(lv, s113c3f0, ABISELECT(296,220), "S113C3.s113c3f0");
    set_bf_and_test(lv, s113c3f1, ABISELECT(312,232), 0, 1, 1, "S113C3");
    test_class_info(&lv, &cd_S113C3);
    dp->~S113C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C3(Test_S113C3, "S113C3", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S113C3C1Ev();
extern void _ZN6S113C3D1Ev();
Name_Map name_map_S113C3[] = {
  NSPAIR(_ZN6S113C3C1Ev),
  NSPAIR(_ZN6S113C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
extern Class_Descriptor cd_S113C5;
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
extern Class_Descriptor cd_S113C4;
extern VTBL_ENTRY _ZTI6S113C4[];
extern  VTBL_ENTRY _ZTV6S113C4[];
static Base_Class bases_S113C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S113C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S113C3[];
extern void _ZN6S113C3D1Ev();
extern void _ZN6S113C3D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
extern void _ZN6S113C44v113Ev();
extern void _ZN6S113C44v114Ev();
extern void _ZN6S113C44v115Ev();
extern void _ZN6S113C44v116Ev();
extern void _ZN6S113C34v117Ev();
extern void _ZN6S113C34v118Ev();
extern void _ZN6S113C34v119Ev();
extern void _ZN6S113C34v120Ev();
extern void _ZN6S113C34v121Ev();
extern void _ZN6S113C34v122Ev();
extern void _ZN6S113C34v123Ev();
static  VTBL_ENTRY vtc_S113C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C3[0]),
  (VTBL_ENTRY)&_ZN6S113C3D1Ev,
  (VTBL_ENTRY)&_ZN6S113C3D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
  (VTBL_ENTRY)&_ZN6S113C44v113Ev,
  (VTBL_ENTRY)&_ZN6S113C44v114Ev,
  (VTBL_ENTRY)&_ZN6S113C44v115Ev,
  (VTBL_ENTRY)&_ZN6S113C44v116Ev,
  (VTBL_ENTRY)&_ZN6S113C34v117Ev,
  (VTBL_ENTRY)&_ZN6S113C34v118Ev,
  (VTBL_ENTRY)&_ZN6S113C34v119Ev,
  (VTBL_ENTRY)&_ZN6S113C34v120Ev,
  (VTBL_ENTRY)&_ZN6S113C34v121Ev,
  (VTBL_ENTRY)&_ZN6S113C34v122Ev,
  (VTBL_ENTRY)&_ZN6S113C34v123Ev,
};
extern VTBL_ENTRY _ZTI6S113C3[];
extern  VTBL_ENTRY _ZTV6S113C3[];
Class_Descriptor cd_S113C3 = {  "S113C3", // class name
  bases_S113C3, 4,
  &(vtc_S113C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S113C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C3),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C27_nt  {
  ::S3350C18 s113c27f0;
  void *s113c27f1;
  int s113c27f2;
  void  mf113c27(); // _ZN10S113C27_nt8mf113c27Ev
};
//SIG(-1 S113C27_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fp Fi}


void  S113C27_nt ::mf113c27(){}

//skip512 S113C27_nt

#else // __cplusplus

Class_Descriptor cd_S113C27_nt = {  "S113C27_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C26_nt  : S113C27_nt {
};
//SIG(-1 S113C26_nt) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



//skip512 S113C26_nt

#else // __cplusplus

extern Class_Descriptor cd_S113C27_nt;
static Base_Class bases_S113C26_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C27_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C32  : S3350C7_nt {
};
//SIG(-1 S113C32) C1{ BC2{ m Fp Fi[2]}}



static void Test_S113C32()
{
  extern Class_Descriptor cd_S113C32;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S113C32, buf);
    S113C32 &lv = *(new (buf) S113C32());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S113C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C32)");
    check_base_class_offset(lv, (S3350C7_nt*), 0, "S113C32");
    test_class_info(&lv, &cd_S113C32);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C32(Test_S113C32, "S113C32", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
static Base_Class bases_S113C32[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S113C32 = {  "S113C32", // class name
  bases_S113C32, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C31  : S113C32 {
};
//SIG(-1 S113C31) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S113C31()
{
  extern Class_Descriptor cd_S113C31;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S113C31, buf);
    S113C31 &lv = *(new (buf) S113C31());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S113C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C31)");
    check_base_class_offset(lv, (S3350C7_nt*)(S113C32*), 0, "S113C31");
    check_base_class_offset(lv, (S113C32*), 0, "S113C31");
    test_class_info(&lv, &cd_S113C31);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C31(Test_S113C31, "S113C31", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3350C7_nt;
extern Class_Descriptor cd_S113C32;
static Base_Class bases_S113C31[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S113C32,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S113C31 = {  "S113C31", // class name
  bases_S113C31, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C2  : S113C3 {
  ::S113C26_nt s113c2f0;
  int s113c2f1[3];
  unsigned int s113c2f2:1;
  unsigned int s113c2f3:1;
  unsigned int s113c2f4:1;
  unsigned int s113c2f5:1;
  unsigned int s113c2f6:1;
  unsigned int s113c2f7:1;
  unsigned int s113c2f8:1;
  unsigned int s113c2f9:1;
  unsigned int s113c2f10:1;
  unsigned int s113c2f11:1;
  unsigned int s113c2f12:1;
  unsigned int s113c2f13:1;
  unsigned int s113c2f14:1;
  ::S287C9 s113c2f15;
  void *s113c2f16;
  ::S113C31 s113c2f17;
  void *s113c2f18[2];
  virtual  ~S113C2(); // _ZN6S113C2D1Ev
  virtual void  v124(); // _ZN6S113C24v124Ev
  virtual void  v125(); // _ZN6S113C24v125Ev
  virtual void  v126(); // _ZN6S113C24v126Ev
  virtual void  v127(); // _ZN6S113C24v127Ev
  virtual void  v128(); // _ZN6S113C24v128Ev
  virtual void  v129(); // _ZN6S113C24v129Ev
  virtual void  v130(); // _ZN6S113C24v130Ev
  virtual void  v131(); // _ZN6S113C24v131Ev
  virtual void  v132(); // _ZN6S113C24v132Ev
  virtual void  v133(); // _ZN6S113C24v133Ev
  S113C2(); // tgen
};
//SIG(-1 S113C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v117 v118 v119 v120 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v121 v122 v123 v124 v125 v126 v127 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC25{ BC26{ m FC14 Fp Fi}} Fi[3] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC9 Fp FC27{ BC28{ BC11}} Fp[2]}


 S113C2 ::~S113C2(){ note_dtor("S113C2", this);}
void  S113C2 ::v124(){vfunc_called(this, "_ZN6S113C24v124Ev");}
void  S113C2 ::v125(){vfunc_called(this, "_ZN6S113C24v125Ev");}
void  S113C2 ::v126(){vfunc_called(this, "_ZN6S113C24v126Ev");}
void  S113C2 ::v127(){vfunc_called(this, "_ZN6S113C24v127Ev");}
void  S113C2 ::v128(){vfunc_called(this, "_ZN6S113C24v128Ev");}
void  S113C2 ::v129(){vfunc_called(this, "_ZN6S113C24v129Ev");}
void  S113C2 ::v130(){vfunc_called(this, "_ZN6S113C24v130Ev");}
void  S113C2 ::v131(){vfunc_called(this, "_ZN6S113C24v131Ev");}
void  S113C2 ::v132(){vfunc_called(this, "_ZN6S113C24v132Ev");}
void  S113C2 ::v133(){vfunc_called(this, "_ZN6S113C24v133Ev");}
S113C2 ::S113C2(){ note_ctor("S113C2", this);} // tgen

static void Test_S113C2()
{
  extern Class_Descriptor cd_S113C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,78)];
    init_test(&cd_S113C2, buf);
    S113C2 *dp, &lv = *(dp=new (buf) S113C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,308), "sizeof(S113C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C2)");
    check_base_class_offset(lv, (S113C7*)(S113C6*)(S113C5*)(S113C4*)(S113C3*), 0, "S113C2");
    check_base_class_offset(lv, (S113C6*)(S113C5*)(S113C4*)(S113C3*), 0, "S113C2");
    check_base_class_offset(lv, (S113C5*)(S113C4*)(S113C3*), 0, "S113C2");
    check_base_class_offset(lv, (S113C4*)(S113C3*), 0, "S113C2");
    check_base_class_offset(lv, (S113C3*), 0, "S113C2");
    check_field_offset(lv, s113c2f0, ABISELECT(320,236), "S113C2.s113c2f0");
    check_field_offset(lv, s113c2f1, ABISELECT(352,256), "S113C2.s113c2f1");
    set_bf_and_test(lv, s113c2f2, ABISELECT(364,268), 0, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f3, ABISELECT(364,268), 1, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f4, ABISELECT(364,268), 2, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f5, ABISELECT(364,268), 3, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f6, ABISELECT(364,268), 4, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f7, ABISELECT(364,268), 5, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f8, ABISELECT(364,268), 6, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f9, ABISELECT(364,268), 7, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f10, ABISELECT(365,269), 0, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f11, ABISELECT(365,269), 1, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f12, ABISELECT(365,269), 2, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f13, ABISELECT(365,269), 3, 1, 1, "S113C2");
    set_bf_and_test(lv, s113c2f14, ABISELECT(365,269), 4, 1, 1, "S113C2");
    check_field_offset(lv, s113c2f15, ABISELECT(368,272), "S113C2.s113c2f15");
    check_field_offset(lv, s113c2f16, ABISELECT(384,284), "S113C2.s113c2f16");
    check_field_offset(lv, s113c2f17, ABISELECT(392,288), "S113C2.s113c2f17");
    check_field_offset(lv, s113c2f18, ABISELECT(408,300), "S113C2.s113c2f18");
    test_class_info(&lv, &cd_S113C2);
    dp->~S113C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C2(Test_S113C2, "S113C2", ABISELECT(424,308));

#else // __cplusplus

extern void _ZN6S113C2C1Ev();
extern void _ZN6S113C2D1Ev();
Name_Map name_map_S113C2[] = {
  NSPAIR(_ZN6S113C2C1Ev),
  NSPAIR(_ZN6S113C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
extern Class_Descriptor cd_S113C5;
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
extern Class_Descriptor cd_S113C4;
extern VTBL_ENTRY _ZTI6S113C4[];
extern  VTBL_ENTRY _ZTV6S113C4[];
extern Class_Descriptor cd_S113C3;
extern VTBL_ENTRY _ZTI6S113C3[];
extern  VTBL_ENTRY _ZTV6S113C3[];
static Base_Class bases_S113C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S113C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S113C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S113C2[];
extern void _ZN6S113C2D1Ev();
extern void _ZN6S113C2D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
extern void _ZN6S113C44v113Ev();
extern void _ZN6S113C44v114Ev();
extern void _ZN6S113C44v115Ev();
extern void _ZN6S113C44v116Ev();
extern void _ZN6S113C34v117Ev();
extern void _ZN6S113C34v118Ev();
extern void _ZN6S113C34v119Ev();
extern void _ZN6S113C34v120Ev();
extern void _ZN6S113C34v121Ev();
extern void _ZN6S113C34v122Ev();
extern void _ZN6S113C34v123Ev();
extern void _ZN6S113C24v124Ev();
extern void _ZN6S113C24v125Ev();
extern void _ZN6S113C24v126Ev();
extern void _ZN6S113C24v127Ev();
extern void _ZN6S113C24v128Ev();
extern void _ZN6S113C24v129Ev();
extern void _ZN6S113C24v130Ev();
extern void _ZN6S113C24v131Ev();
extern void _ZN6S113C24v132Ev();
extern void _ZN6S113C24v133Ev();
static  VTBL_ENTRY vtc_S113C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C2[0]),
  (VTBL_ENTRY)&_ZN6S113C2D1Ev,
  (VTBL_ENTRY)&_ZN6S113C2D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
  (VTBL_ENTRY)&_ZN6S113C44v113Ev,
  (VTBL_ENTRY)&_ZN6S113C44v114Ev,
  (VTBL_ENTRY)&_ZN6S113C44v115Ev,
  (VTBL_ENTRY)&_ZN6S113C44v116Ev,
  (VTBL_ENTRY)&_ZN6S113C34v117Ev,
  (VTBL_ENTRY)&_ZN6S113C34v118Ev,
  (VTBL_ENTRY)&_ZN6S113C34v119Ev,
  (VTBL_ENTRY)&_ZN6S113C34v120Ev,
  (VTBL_ENTRY)&_ZN6S113C34v121Ev,
  (VTBL_ENTRY)&_ZN6S113C34v122Ev,
  (VTBL_ENTRY)&_ZN6S113C34v123Ev,
  (VTBL_ENTRY)&_ZN6S113C24v124Ev,
  (VTBL_ENTRY)&_ZN6S113C24v125Ev,
  (VTBL_ENTRY)&_ZN6S113C24v126Ev,
  (VTBL_ENTRY)&_ZN6S113C24v127Ev,
  (VTBL_ENTRY)&_ZN6S113C24v128Ev,
  (VTBL_ENTRY)&_ZN6S113C24v129Ev,
  (VTBL_ENTRY)&_ZN6S113C24v130Ev,
  (VTBL_ENTRY)&_ZN6S113C24v131Ev,
  (VTBL_ENTRY)&_ZN6S113C24v132Ev,
  (VTBL_ENTRY)&_ZN6S113C24v133Ev,
};
extern VTBL_ENTRY _ZTI6S113C2[];
extern  VTBL_ENTRY _ZTV6S113C2[];
Class_Descriptor cd_S113C2 = {  "S113C2", // class name
  bases_S113C2, 5,
  &(vtc_S113C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,308), // object size
  NSPAIRA(_ZTI6S113C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C2),131, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S113C1  : S113C2 {
  virtual  ~S113C1(); // _ZN6S113C1D1Ev
  virtual void  v1(); // _ZN6S113C12v1Ev
  virtual void  v2(); // _ZN6S113C12v2Ev
  virtual void  v3(); // _ZN6S113C12v3Ev
  virtual void  v4(); // _ZN6S113C12v4Ev
  virtual void  v5(); // _ZN6S113C12v5Ev
  virtual void  v6(); // _ZN6S113C12v6Ev
  S113C1(); // tgen
};
//SIG(1 S113C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v113 v114 v115 v116 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v117 v118 v119 v120 v121 v122 v123 FC24{ BC25{ BC12}} Fi:1} vd v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 FC26{ BC27{ m FC15 Fp Fi}} Fi[3] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC10 Fp FC28{ BC29{ BC12}} Fp[2]} vd v1 v2 v3 v4 v5 v6}


 S113C1 ::~S113C1(){ note_dtor("S113C1", this);}
void  S113C1 ::v1(){vfunc_called(this, "_ZN6S113C12v1Ev");}
void  S113C1 ::v2(){vfunc_called(this, "_ZN6S113C12v2Ev");}
void  S113C1 ::v3(){vfunc_called(this, "_ZN6S113C12v3Ev");}
void  S113C1 ::v4(){vfunc_called(this, "_ZN6S113C12v4Ev");}
void  S113C1 ::v5(){vfunc_called(this, "_ZN6S113C12v5Ev");}
void  S113C1 ::v6(){vfunc_called(this, "_ZN6S113C12v6Ev");}
S113C1 ::S113C1(){ note_ctor("S113C1", this);} // tgen

static void Test_S113C1()
{
  extern Class_Descriptor cd_S113C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,78)];
    init_test(&cd_S113C1, buf);
    S113C1 *dp, &lv = *(dp=new (buf) S113C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,308), "sizeof(S113C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S113C1)");
    check_base_class_offset(lv, (S113C7*)(S113C6*)(S113C5*)(S113C4*)(S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C6*)(S113C5*)(S113C4*)(S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C5*)(S113C4*)(S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C4*)(S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C3*)(S113C2*), 0, "S113C1");
    check_base_class_offset(lv, (S113C2*), 0, "S113C1");
    test_class_info(&lv, &cd_S113C1);
    dp->~S113C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS113C1(Test_S113C1, "S113C1", ABISELECT(424,308));

#else // __cplusplus

extern void _ZN6S113C1C1Ev();
extern void _ZN6S113C1D1Ev();
Name_Map name_map_S113C1[] = {
  NSPAIR(_ZN6S113C1C1Ev),
  NSPAIR(_ZN6S113C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S113C7;
extern VTBL_ENTRY _ZTI6S113C7[];
extern  VTBL_ENTRY _ZTV6S113C7[];
extern Class_Descriptor cd_S113C6;
extern VTBL_ENTRY _ZTI6S113C6[];
extern  VTBL_ENTRY _ZTV6S113C6[];
extern Class_Descriptor cd_S113C5;
extern VTBL_ENTRY _ZTI6S113C5[];
extern  VTBL_ENTRY _ZTV6S113C5[];
extern Class_Descriptor cd_S113C4;
extern VTBL_ENTRY _ZTI6S113C4[];
extern  VTBL_ENTRY _ZTV6S113C4[];
extern Class_Descriptor cd_S113C3;
extern VTBL_ENTRY _ZTI6S113C3[];
extern  VTBL_ENTRY _ZTV6S113C3[];
extern Class_Descriptor cd_S113C2;
extern VTBL_ENTRY _ZTI6S113C2[];
extern  VTBL_ENTRY _ZTV6S113C2[];
static Base_Class bases_S113C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S113C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S113C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S113C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S113C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S113C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S113C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S113C1[];
extern void _ZN6S113C1D1Ev();
extern void _ZN6S113C1D0Ev();
extern void _ZN6S113C72v7Ev();
extern void _ZN6S113C72v8Ev();
extern void _ZN6S113C72v9Ev();
extern void _ZN6S113C73v10Ev();
extern void _ZN6S113C73v11Ev();
extern void _ZN6S113C73v12Ev();
extern void _ZN6S113C73v13Ev();
extern void _ZN6S113C73v14Ev();
extern void _ZN6S113C73v15Ev();
extern void _ZN6S113C73v16Ev();
extern void _ZN6S113C73v17Ev();
extern void _ZN6S113C73v18Ev();
extern void _ZN6S113C73v19Ev();
extern void _ZN6S113C73v20Ev();
extern void _ZN6S113C73v21Ev();
extern void _ZN6S113C73v22Ev();
extern void _ZN6S113C73v23Ev();
extern void _ZN6S113C73v24Ev();
extern void _ZN6S113C73v25Ev();
extern void _ZN6S113C73v26Ev();
extern void _ZN6S113C73v27Ev();
extern void _ZN6S113C73v28Ev();
extern void _ZN6S113C73v29Ev();
extern void _ZN6S113C73v30Ev();
extern void _ZN6S113C73v31Ev();
extern void _ZN6S113C73v32Ev();
extern void _ZN6S113C73v33Ev();
extern void _ZN6S113C73v34Ev();
extern void _ZN6S113C73v35Ev();
extern void _ZN6S113C73v36Ev();
extern void _ZN6S113C73v37Ev();
extern void _ZN6S113C73v38Ev();
extern void _ZN6S113C73v39Ev();
extern void _ZN6S113C73v40Ev();
extern void _ZN6S113C73v41Ev();
extern void _ZN6S113C73v42Ev();
extern void _ZN6S113C73v43Ev();
extern void _ZN6S113C73v44Ev();
extern void _ZN6S113C73v45Ev();
extern void _ZN6S113C73v46Ev();
extern void _ZN6S113C73v47Ev();
extern void _ZN6S113C73v48Ev();
extern void _ZN6S113C73v49Ev();
extern void _ZN6S113C73v50Ev();
extern void _ZN6S113C73v51Ev();
extern void _ZN6S113C73v52Ev();
extern void _ZN6S113C73v53Ev();
extern void _ZN6S113C73v54Ev();
extern void _ZN6S113C73v55Ev();
extern void _ZN6S113C73v56Ev();
extern void _ZN6S113C73v57Ev();
extern void _ZN6S113C73v58Ev();
extern void _ZN6S113C73v59Ev();
extern void _ZN6S113C73v60Ev();
extern void _ZN6S113C73v61Ev();
extern void _ZN6S113C73v62Ev();
extern void _ZN6S113C73v63Ev();
extern void _ZN6S113C73v64Ev();
extern void _ZN6S113C73v65Ev();
extern void _ZN6S113C73v66Ev();
extern void _ZN6S113C73v67Ev();
extern void _ZN6S113C73v68Ev();
extern void _ZN6S113C73v69Ev();
extern void _ZN6S113C73v70Ev();
extern void _ZN6S113C63v71Ev();
extern void _ZN6S113C63v72Ev();
extern void _ZN6S113C63v73Ev();
extern void _ZN6S113C63v74Ev();
extern void _ZN6S113C63v75Ev();
extern void _ZN6S113C63v76Ev();
extern void _ZN6S113C63v77Ev();
extern void _ZN6S113C63v78Ev();
extern void _ZN6S113C63v79Ev();
extern void _ZN6S113C63v80Ev();
extern void _ZN6S113C63v81Ev();
extern void _ZN6S113C63v82Ev();
extern void _ZN6S113C63v83Ev();
extern void _ZN6S113C63v84Ev();
extern void _ZN6S113C63v85Ev();
extern void _ZN6S113C63v86Ev();
extern void _ZN6S113C63v87Ev();
extern void _ZN6S113C63v88Ev();
extern void _ZN6S113C63v89Ev();
extern void _ZN6S113C63v90Ev();
extern void _ZN6S113C63v91Ev();
extern void _ZN6S113C63v92Ev();
extern void _ZN6S113C53v93Ev();
extern void _ZN6S113C53v94Ev();
extern void _ZN6S113C53v95Ev();
extern void _ZN6S113C53v96Ev();
extern void _ZN6S113C53v97Ev();
extern void _ZN6S113C53v98Ev();
extern void _ZN6S113C53v99Ev();
extern void _ZN6S113C54v100Ev();
extern void _ZN6S113C54v101Ev();
extern void _ZN6S113C54v102Ev();
extern void _ZN6S113C54v103Ev();
extern void _ZN6S113C54v104Ev();
extern void _ZN6S113C54v105Ev();
extern void _ZN6S113C54v106Ev();
extern void _ZN6S113C54v107Ev();
extern void _ZN6S113C54v108Ev();
extern void _ZN6S113C54v109Ev();
extern void _ZN6S113C54v110Ev();
extern void _ZN6S113C54v111Ev();
extern void _ZN6S113C54v112Ev();
extern void _ZN6S113C44v113Ev();
extern void _ZN6S113C44v114Ev();
extern void _ZN6S113C44v115Ev();
extern void _ZN6S113C44v116Ev();
extern void _ZN6S113C34v117Ev();
extern void _ZN6S113C34v118Ev();
extern void _ZN6S113C34v119Ev();
extern void _ZN6S113C34v120Ev();
extern void _ZN6S113C34v121Ev();
extern void _ZN6S113C34v122Ev();
extern void _ZN6S113C34v123Ev();
extern void _ZN6S113C24v124Ev();
extern void _ZN6S113C24v125Ev();
extern void _ZN6S113C24v126Ev();
extern void _ZN6S113C24v127Ev();
extern void _ZN6S113C24v128Ev();
extern void _ZN6S113C24v129Ev();
extern void _ZN6S113C24v130Ev();
extern void _ZN6S113C24v131Ev();
extern void _ZN6S113C24v132Ev();
extern void _ZN6S113C24v133Ev();
extern void _ZN6S113C12v1Ev();
extern void _ZN6S113C12v2Ev();
extern void _ZN6S113C12v3Ev();
extern void _ZN6S113C12v4Ev();
extern void _ZN6S113C12v5Ev();
extern void _ZN6S113C12v6Ev();
static  VTBL_ENTRY vtc_S113C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S113C1[0]),
  (VTBL_ENTRY)&_ZN6S113C1D1Ev,
  (VTBL_ENTRY)&_ZN6S113C1D0Ev,
  (VTBL_ENTRY)&_ZN6S113C72v7Ev,
  (VTBL_ENTRY)&_ZN6S113C72v8Ev,
  (VTBL_ENTRY)&_ZN6S113C72v9Ev,
  (VTBL_ENTRY)&_ZN6S113C73v10Ev,
  (VTBL_ENTRY)&_ZN6S113C73v11Ev,
  (VTBL_ENTRY)&_ZN6S113C73v12Ev,
  (VTBL_ENTRY)&_ZN6S113C73v13Ev,
  (VTBL_ENTRY)&_ZN6S113C73v14Ev,
  (VTBL_ENTRY)&_ZN6S113C73v15Ev,
  (VTBL_ENTRY)&_ZN6S113C73v16Ev,
  (VTBL_ENTRY)&_ZN6S113C73v17Ev,
  (VTBL_ENTRY)&_ZN6S113C73v18Ev,
  (VTBL_ENTRY)&_ZN6S113C73v19Ev,
  (VTBL_ENTRY)&_ZN6S113C73v20Ev,
  (VTBL_ENTRY)&_ZN6S113C73v21Ev,
  (VTBL_ENTRY)&_ZN6S113C73v22Ev,
  (VTBL_ENTRY)&_ZN6S113C73v23Ev,
  (VTBL_ENTRY)&_ZN6S113C73v24Ev,
  (VTBL_ENTRY)&_ZN6S113C73v25Ev,
  (VTBL_ENTRY)&_ZN6S113C73v26Ev,
  (VTBL_ENTRY)&_ZN6S113C73v27Ev,
  (VTBL_ENTRY)&_ZN6S113C73v28Ev,
  (VTBL_ENTRY)&_ZN6S113C73v29Ev,
  (VTBL_ENTRY)&_ZN6S113C73v30Ev,
  (VTBL_ENTRY)&_ZN6S113C73v31Ev,
  (VTBL_ENTRY)&_ZN6S113C73v32Ev,
  (VTBL_ENTRY)&_ZN6S113C73v33Ev,
  (VTBL_ENTRY)&_ZN6S113C73v34Ev,
  (VTBL_ENTRY)&_ZN6S113C73v35Ev,
  (VTBL_ENTRY)&_ZN6S113C73v36Ev,
  (VTBL_ENTRY)&_ZN6S113C73v37Ev,
  (VTBL_ENTRY)&_ZN6S113C73v38Ev,
  (VTBL_ENTRY)&_ZN6S113C73v39Ev,
  (VTBL_ENTRY)&_ZN6S113C73v40Ev,
  (VTBL_ENTRY)&_ZN6S113C73v41Ev,
  (VTBL_ENTRY)&_ZN6S113C73v42Ev,
  (VTBL_ENTRY)&_ZN6S113C73v43Ev,
  (VTBL_ENTRY)&_ZN6S113C73v44Ev,
  (VTBL_ENTRY)&_ZN6S113C73v45Ev,
  (VTBL_ENTRY)&_ZN6S113C73v46Ev,
  (VTBL_ENTRY)&_ZN6S113C73v47Ev,
  (VTBL_ENTRY)&_ZN6S113C73v48Ev,
  (VTBL_ENTRY)&_ZN6S113C73v49Ev,
  (VTBL_ENTRY)&_ZN6S113C73v50Ev,
  (VTBL_ENTRY)&_ZN6S113C73v51Ev,
  (VTBL_ENTRY)&_ZN6S113C73v52Ev,
  (VTBL_ENTRY)&_ZN6S113C73v53Ev,
  (VTBL_ENTRY)&_ZN6S113C73v54Ev,
  (VTBL_ENTRY)&_ZN6S113C73v55Ev,
  (VTBL_ENTRY)&_ZN6S113C73v56Ev,
  (VTBL_ENTRY)&_ZN6S113C73v57Ev,
  (VTBL_ENTRY)&_ZN6S113C73v58Ev,
  (VTBL_ENTRY)&_ZN6S113C73v59Ev,
  (VTBL_ENTRY)&_ZN6S113C73v60Ev,
  (VTBL_ENTRY)&_ZN6S113C73v61Ev,
  (VTBL_ENTRY)&_ZN6S113C73v62Ev,
  (VTBL_ENTRY)&_ZN6S113C73v63Ev,
  (VTBL_ENTRY)&_ZN6S113C73v64Ev,
  (VTBL_ENTRY)&_ZN6S113C73v65Ev,
  (VTBL_ENTRY)&_ZN6S113C73v66Ev,
  (VTBL_ENTRY)&_ZN6S113C73v67Ev,
  (VTBL_ENTRY)&_ZN6S113C73v68Ev,
  (VTBL_ENTRY)&_ZN6S113C73v69Ev,
  (VTBL_ENTRY)&_ZN6S113C73v70Ev,
  (VTBL_ENTRY)&_ZN6S113C63v71Ev,
  (VTBL_ENTRY)&_ZN6S113C63v72Ev,
  (VTBL_ENTRY)&_ZN6S113C63v73Ev,
  (VTBL_ENTRY)&_ZN6S113C63v74Ev,
  (VTBL_ENTRY)&_ZN6S113C63v75Ev,
  (VTBL_ENTRY)&_ZN6S113C63v76Ev,
  (VTBL_ENTRY)&_ZN6S113C63v77Ev,
  (VTBL_ENTRY)&_ZN6S113C63v78Ev,
  (VTBL_ENTRY)&_ZN6S113C63v79Ev,
  (VTBL_ENTRY)&_ZN6S113C63v80Ev,
  (VTBL_ENTRY)&_ZN6S113C63v81Ev,
  (VTBL_ENTRY)&_ZN6S113C63v82Ev,
  (VTBL_ENTRY)&_ZN6S113C63v83Ev,
  (VTBL_ENTRY)&_ZN6S113C63v84Ev,
  (VTBL_ENTRY)&_ZN6S113C63v85Ev,
  (VTBL_ENTRY)&_ZN6S113C63v86Ev,
  (VTBL_ENTRY)&_ZN6S113C63v87Ev,
  (VTBL_ENTRY)&_ZN6S113C63v88Ev,
  (VTBL_ENTRY)&_ZN6S113C63v89Ev,
  (VTBL_ENTRY)&_ZN6S113C63v90Ev,
  (VTBL_ENTRY)&_ZN6S113C63v91Ev,
  (VTBL_ENTRY)&_ZN6S113C63v92Ev,
  (VTBL_ENTRY)&_ZN6S113C53v93Ev,
  (VTBL_ENTRY)&_ZN6S113C53v94Ev,
  (VTBL_ENTRY)&_ZN6S113C53v95Ev,
  (VTBL_ENTRY)&_ZN6S113C53v96Ev,
  (VTBL_ENTRY)&_ZN6S113C53v97Ev,
  (VTBL_ENTRY)&_ZN6S113C53v98Ev,
  (VTBL_ENTRY)&_ZN6S113C53v99Ev,
  (VTBL_ENTRY)&_ZN6S113C54v100Ev,
  (VTBL_ENTRY)&_ZN6S113C54v101Ev,
  (VTBL_ENTRY)&_ZN6S113C54v102Ev,
  (VTBL_ENTRY)&_ZN6S113C54v103Ev,
  (VTBL_ENTRY)&_ZN6S113C54v104Ev,
  (VTBL_ENTRY)&_ZN6S113C54v105Ev,
  (VTBL_ENTRY)&_ZN6S113C54v106Ev,
  (VTBL_ENTRY)&_ZN6S113C54v107Ev,
  (VTBL_ENTRY)&_ZN6S113C54v108Ev,
  (VTBL_ENTRY)&_ZN6S113C54v109Ev,
  (VTBL_ENTRY)&_ZN6S113C54v110Ev,
  (VTBL_ENTRY)&_ZN6S113C54v111Ev,
  (VTBL_ENTRY)&_ZN6S113C54v112Ev,
  (VTBL_ENTRY)&_ZN6S113C44v113Ev,
  (VTBL_ENTRY)&_ZN6S113C44v114Ev,
  (VTBL_ENTRY)&_ZN6S113C44v115Ev,
  (VTBL_ENTRY)&_ZN6S113C44v116Ev,
  (VTBL_ENTRY)&_ZN6S113C34v117Ev,
  (VTBL_ENTRY)&_ZN6S113C34v118Ev,
  (VTBL_ENTRY)&_ZN6S113C34v119Ev,
  (VTBL_ENTRY)&_ZN6S113C34v120Ev,
  (VTBL_ENTRY)&_ZN6S113C34v121Ev,
  (VTBL_ENTRY)&_ZN6S113C34v122Ev,
  (VTBL_ENTRY)&_ZN6S113C34v123Ev,
  (VTBL_ENTRY)&_ZN6S113C24v124Ev,
  (VTBL_ENTRY)&_ZN6S113C24v125Ev,
  (VTBL_ENTRY)&_ZN6S113C24v126Ev,
  (VTBL_ENTRY)&_ZN6S113C24v127Ev,
  (VTBL_ENTRY)&_ZN6S113C24v128Ev,
  (VTBL_ENTRY)&_ZN6S113C24v129Ev,
  (VTBL_ENTRY)&_ZN6S113C24v130Ev,
  (VTBL_ENTRY)&_ZN6S113C24v131Ev,
  (VTBL_ENTRY)&_ZN6S113C24v132Ev,
  (VTBL_ENTRY)&_ZN6S113C24v133Ev,
  (VTBL_ENTRY)&_ZN6S113C12v1Ev,
  (VTBL_ENTRY)&_ZN6S113C12v2Ev,
  (VTBL_ENTRY)&_ZN6S113C12v3Ev,
  (VTBL_ENTRY)&_ZN6S113C12v4Ev,
  (VTBL_ENTRY)&_ZN6S113C12v5Ev,
  (VTBL_ENTRY)&_ZN6S113C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S113C1[];
extern  VTBL_ENTRY _ZTV6S113C1[];
Class_Descriptor cd_S113C1 = {  "S113C1", // class name
  bases_S113C1, 6,
  &(vtc_S113C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,308), // object size
  NSPAIRA(_ZTI6S113C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S113C1),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C6  {
  int s266c6f0;
  __tsi64 s266c6f1;
  void *s266c6f2[4];
  int s266c6f3[2];
  void *s266c6f4;
  ::S3350C4_nt s266c6f5;
  void *s266c6f6[2];
  virtual  ~S266C6(); // _ZN6S266C6D1Ev
  virtual void  v6(); // _ZN6S266C62v6Ev
  virtual void  v7(); // _ZN6S266C62v7Ev
  virtual void  v8(); // _ZN6S266C62v8Ev
  virtual void  v9(); // _ZN6S266C62v9Ev
  virtual void  v10(); // _ZN6S266C63v10Ev
  virtual void  v11(); // _ZN6S266C63v11Ev
  virtual void  v12(); // _ZN6S266C63v12Ev
  virtual void  v13(); // _ZN6S266C63v13Ev
  virtual void  v14(); // _ZN6S266C63v14Ev
  virtual void  v15(); // _ZN6S266C63v15Ev
  virtual void  v16(); // _ZN6S266C63v16Ev
  virtual void  v17(); // _ZN6S266C63v17Ev
  virtual void  v18(); // _ZN6S266C63v18Ev
  virtual void  v19(); // _ZN6S266C63v19Ev
  virtual void  v20(); // _ZN6S266C63v20Ev
  virtual void  v21(); // _ZN6S266C63v21Ev
  virtual void  v22(); // _ZN6S266C63v22Ev
  virtual void  v23(); // _ZN6S266C63v23Ev
  virtual void  v24(); // _ZN6S266C63v24Ev
  virtual void  v25(); // _ZN6S266C63v25Ev
  virtual void  v26(); // _ZN6S266C63v26Ev
  virtual void  v27(); // _ZN6S266C63v27Ev
  virtual void  v28(); // _ZN6S266C63v28Ev
  virtual void  v29(); // _ZN6S266C63v29Ev
  virtual void  v30(); // _ZN6S266C63v30Ev
  virtual void  v31(); // _ZN6S266C63v31Ev
  virtual void  v32(); // _ZN6S266C63v32Ev
  virtual void  v33(); // _ZN6S266C63v33Ev
  virtual void  v34(); // _ZN6S266C63v34Ev
  virtual void  v35(); // _ZN6S266C63v35Ev
  virtual void  v36(); // _ZN6S266C63v36Ev
  virtual void  v37(); // _ZN6S266C63v37Ev
  virtual void  v38(); // _ZN6S266C63v38Ev
  virtual void  v39(); // _ZN6S266C63v39Ev
  virtual void  v40(); // _ZN6S266C63v40Ev
  virtual void  v41(); // _ZN6S266C63v41Ev
  virtual void  v42(); // _ZN6S266C63v42Ev
  virtual void  v43(); // _ZN6S266C63v43Ev
  virtual void  v44(); // _ZN6S266C63v44Ev
  virtual void  v45(); // _ZN6S266C63v45Ev
  virtual void  v46(); // _ZN6S266C63v46Ev
  virtual void  v47(); // _ZN6S266C63v47Ev
  virtual void  v48(); // _ZN6S266C63v48Ev
  virtual void  v49(); // _ZN6S266C63v49Ev
  virtual void  v50(); // _ZN6S266C63v50Ev
  virtual void  v51(); // _ZN6S266C63v51Ev
  virtual void  v52(); // _ZN6S266C63v52Ev
  virtual void  v53(); // _ZN6S266C63v53Ev
  virtual void  v54(); // _ZN6S266C63v54Ev
  virtual void  v55(); // _ZN6S266C63v55Ev
  virtual void  v56(); // _ZN6S266C63v56Ev
  virtual void  v57(); // _ZN6S266C63v57Ev
  virtual void  v58(); // _ZN6S266C63v58Ev
  virtual void  v59(); // _ZN6S266C63v59Ev
  virtual void  v60(); // _ZN6S266C63v60Ev
  virtual void  v61(); // _ZN6S266C63v61Ev
  virtual void  v62(); // _ZN6S266C63v62Ev
  virtual void  v63(); // _ZN6S266C63v63Ev
  virtual void  v64(); // _ZN6S266C63v64Ev
  virtual void  v65(); // _ZN6S266C63v65Ev
  virtual void  v66(); // _ZN6S266C63v66Ev
  virtual void  v67(); // _ZN6S266C63v67Ev
  virtual void  v68(); // _ZN6S266C63v68Ev
  virtual void  v69(); // _ZN6S266C63v69Ev
  S266C6(); // tgen
};
//SIG(-1 S266C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S266C6 ::~S266C6(){ note_dtor("S266C6", this);}
void  S266C6 ::v6(){vfunc_called(this, "_ZN6S266C62v6Ev");}
void  S266C6 ::v7(){vfunc_called(this, "_ZN6S266C62v7Ev");}
void  S266C6 ::v8(){vfunc_called(this, "_ZN6S266C62v8Ev");}
void  S266C6 ::v9(){vfunc_called(this, "_ZN6S266C62v9Ev");}
void  S266C6 ::v10(){vfunc_called(this, "_ZN6S266C63v10Ev");}
void  S266C6 ::v11(){vfunc_called(this, "_ZN6S266C63v11Ev");}
void  S266C6 ::v12(){vfunc_called(this, "_ZN6S266C63v12Ev");}
void  S266C6 ::v13(){vfunc_called(this, "_ZN6S266C63v13Ev");}
void  S266C6 ::v14(){vfunc_called(this, "_ZN6S266C63v14Ev");}
void  S266C6 ::v15(){vfunc_called(this, "_ZN6S266C63v15Ev");}
void  S266C6 ::v16(){vfunc_called(this, "_ZN6S266C63v16Ev");}
void  S266C6 ::v17(){vfunc_called(this, "_ZN6S266C63v17Ev");}
void  S266C6 ::v18(){vfunc_called(this, "_ZN6S266C63v18Ev");}
void  S266C6 ::v19(){vfunc_called(this, "_ZN6S266C63v19Ev");}
void  S266C6 ::v20(){vfunc_called(this, "_ZN6S266C63v20Ev");}
void  S266C6 ::v21(){vfunc_called(this, "_ZN6S266C63v21Ev");}
void  S266C6 ::v22(){vfunc_called(this, "_ZN6S266C63v22Ev");}
void  S266C6 ::v23(){vfunc_called(this, "_ZN6S266C63v23Ev");}
void  S266C6 ::v24(){vfunc_called(this, "_ZN6S266C63v24Ev");}
void  S266C6 ::v25(){vfunc_called(this, "_ZN6S266C63v25Ev");}
void  S266C6 ::v26(){vfunc_called(this, "_ZN6S266C63v26Ev");}
void  S266C6 ::v27(){vfunc_called(this, "_ZN6S266C63v27Ev");}
void  S266C6 ::v28(){vfunc_called(this, "_ZN6S266C63v28Ev");}
void  S266C6 ::v29(){vfunc_called(this, "_ZN6S266C63v29Ev");}
void  S266C6 ::v30(){vfunc_called(this, "_ZN6S266C63v30Ev");}
void  S266C6 ::v31(){vfunc_called(this, "_ZN6S266C63v31Ev");}
void  S266C6 ::v32(){vfunc_called(this, "_ZN6S266C63v32Ev");}
void  S266C6 ::v33(){vfunc_called(this, "_ZN6S266C63v33Ev");}
void  S266C6 ::v34(){vfunc_called(this, "_ZN6S266C63v34Ev");}
void  S266C6 ::v35(){vfunc_called(this, "_ZN6S266C63v35Ev");}
void  S266C6 ::v36(){vfunc_called(this, "_ZN6S266C63v36Ev");}
void  S266C6 ::v37(){vfunc_called(this, "_ZN6S266C63v37Ev");}
void  S266C6 ::v38(){vfunc_called(this, "_ZN6S266C63v38Ev");}
void  S266C6 ::v39(){vfunc_called(this, "_ZN6S266C63v39Ev");}
void  S266C6 ::v40(){vfunc_called(this, "_ZN6S266C63v40Ev");}
void  S266C6 ::v41(){vfunc_called(this, "_ZN6S266C63v41Ev");}
void  S266C6 ::v42(){vfunc_called(this, "_ZN6S266C63v42Ev");}
void  S266C6 ::v43(){vfunc_called(this, "_ZN6S266C63v43Ev");}
void  S266C6 ::v44(){vfunc_called(this, "_ZN6S266C63v44Ev");}
void  S266C6 ::v45(){vfunc_called(this, "_ZN6S266C63v45Ev");}
void  S266C6 ::v46(){vfunc_called(this, "_ZN6S266C63v46Ev");}
void  S266C6 ::v47(){vfunc_called(this, "_ZN6S266C63v47Ev");}
void  S266C6 ::v48(){vfunc_called(this, "_ZN6S266C63v48Ev");}
void  S266C6 ::v49(){vfunc_called(this, "_ZN6S266C63v49Ev");}
void  S266C6 ::v50(){vfunc_called(this, "_ZN6S266C63v50Ev");}
void  S266C6 ::v51(){vfunc_called(this, "_ZN6S266C63v51Ev");}
void  S266C6 ::v52(){vfunc_called(this, "_ZN6S266C63v52Ev");}
void  S266C6 ::v53(){vfunc_called(this, "_ZN6S266C63v53Ev");}
void  S266C6 ::v54(){vfunc_called(this, "_ZN6S266C63v54Ev");}
void  S266C6 ::v55(){vfunc_called(this, "_ZN6S266C63v55Ev");}
void  S266C6 ::v56(){vfunc_called(this, "_ZN6S266C63v56Ev");}
void  S266C6 ::v57(){vfunc_called(this, "_ZN6S266C63v57Ev");}
void  S266C6 ::v58(){vfunc_called(this, "_ZN6S266C63v58Ev");}
void  S266C6 ::v59(){vfunc_called(this, "_ZN6S266C63v59Ev");}
void  S266C6 ::v60(){vfunc_called(this, "_ZN6S266C63v60Ev");}
void  S266C6 ::v61(){vfunc_called(this, "_ZN6S266C63v61Ev");}
void  S266C6 ::v62(){vfunc_called(this, "_ZN6S266C63v62Ev");}
void  S266C6 ::v63(){vfunc_called(this, "_ZN6S266C63v63Ev");}
void  S266C6 ::v64(){vfunc_called(this, "_ZN6S266C63v64Ev");}
void  S266C6 ::v65(){vfunc_called(this, "_ZN6S266C63v65Ev");}
void  S266C6 ::v66(){vfunc_called(this, "_ZN6S266C63v66Ev");}
void  S266C6 ::v67(){vfunc_called(this, "_ZN6S266C63v67Ev");}
void  S266C6 ::v68(){vfunc_called(this, "_ZN6S266C63v68Ev");}
void  S266C6 ::v69(){vfunc_called(this, "_ZN6S266C63v69Ev");}
S266C6 ::S266C6(){ note_ctor("S266C6", this);} // tgen

static void Test_S266C6()
{
  extern Class_Descriptor cd_S266C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S266C6, buf);
    S266C6 *dp, &lv = *(dp=new (buf) S266C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S266C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C6)");
    check_field_offset(lv, s266c6f0, ABISELECT(8,4), "S266C6.s266c6f0");
    check_field_offset(lv, s266c6f1, ABISELECT(16,8), "S266C6.s266c6f1");
    check_field_offset(lv, s266c6f2, ABISELECT(24,16), "S266C6.s266c6f2");
    check_field_offset(lv, s266c6f3, ABISELECT(56,32), "S266C6.s266c6f3");
    check_field_offset(lv, s266c6f4, ABISELECT(64,40), "S266C6.s266c6f4");
    check_field_offset(lv, s266c6f5, ABISELECT(72,44), "S266C6.s266c6f5");
    check_field_offset(lv, s266c6f6, ABISELECT(80,52), "S266C6.s266c6f6");
    test_class_info(&lv, &cd_S266C6);
    dp->~S266C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C6(Test_S266C6, "S266C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S266C6C1Ev();
extern void _ZN6S266C6D1Ev();
Name_Map name_map_S266C6[] = {
  NSPAIR(_ZN6S266C6C1Ev),
  NSPAIR(_ZN6S266C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S266C6[];
extern void _ZN6S266C6D1Ev();
extern void _ZN6S266C6D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
static  VTBL_ENTRY vtc_S266C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C6[0]),
  (VTBL_ENTRY)&_ZN6S266C6D1Ev,
  (VTBL_ENTRY)&_ZN6S266C6D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
Class_Descriptor cd_S266C6 = {  "S266C6", // class name
  0,0,//no base classes
  &(vtc_S266C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S266C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S266C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C5  : S266C6 {
  int s266c5f0[2];
  void *s266c5f1;
  int s266c5f2[2];
  ::S287C8_nt s266c5f3;
  ::S287C8_nt s266c5f4;
  ::S2121C38 s266c5f5;
  ::S287C8_nt s266c5f6;
  unsigned int s266c5f7:1;
  unsigned int s266c5f8:1;
  unsigned int s266c5f9:1;
  unsigned int s266c5f10:1;
  unsigned int s266c5f11:1;
  int s266c5f12[2];
  virtual  ~S266C5(); // _ZN6S266C5D1Ev
  virtual void  v70(); // _ZN6S266C53v70Ev
  virtual void  v71(); // _ZN6S266C53v71Ev
  virtual void  v72(); // _ZN6S266C53v72Ev
  virtual void  v73(); // _ZN6S266C53v73Ev
  virtual void  v74(); // _ZN6S266C53v74Ev
  virtual void  v75(); // _ZN6S266C53v75Ev
  virtual void  v76(); // _ZN6S266C53v76Ev
  virtual void  v77(); // _ZN6S266C53v77Ev
  virtual void  v78(); // _ZN6S266C53v78Ev
  virtual void  v79(); // _ZN6S266C53v79Ev
  virtual void  v80(); // _ZN6S266C53v80Ev
  virtual void  v81(); // _ZN6S266C53v81Ev
  virtual void  v82(); // _ZN6S266C53v82Ev
  virtual void  v83(); // _ZN6S266C53v83Ev
  virtual void  v84(); // _ZN6S266C53v84Ev
  virtual void  v85(); // _ZN6S266C53v85Ev
  virtual void  v86(); // _ZN6S266C53v86Ev
  virtual void  v87(); // _ZN6S266C53v87Ev
  virtual void  v88(); // _ZN6S266C53v88Ev
  virtual void  v89(); // _ZN6S266C53v89Ev
  virtual void  v90(); // _ZN6S266C53v90Ev
  virtual void  v91(); // _ZN6S266C53v91Ev
  S266C5(); // tgen
};
//SIG(-1 S266C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S266C5 ::~S266C5(){ note_dtor("S266C5", this);}
void  S266C5 ::v70(){vfunc_called(this, "_ZN6S266C53v70Ev");}
void  S266C5 ::v71(){vfunc_called(this, "_ZN6S266C53v71Ev");}
void  S266C5 ::v72(){vfunc_called(this, "_ZN6S266C53v72Ev");}
void  S266C5 ::v73(){vfunc_called(this, "_ZN6S266C53v73Ev");}
void  S266C5 ::v74(){vfunc_called(this, "_ZN6S266C53v74Ev");}
void  S266C5 ::v75(){vfunc_called(this, "_ZN6S266C53v75Ev");}
void  S266C5 ::v76(){vfunc_called(this, "_ZN6S266C53v76Ev");}
void  S266C5 ::v77(){vfunc_called(this, "_ZN6S266C53v77Ev");}
void  S266C5 ::v78(){vfunc_called(this, "_ZN6S266C53v78Ev");}
void  S266C5 ::v79(){vfunc_called(this, "_ZN6S266C53v79Ev");}
void  S266C5 ::v80(){vfunc_called(this, "_ZN6S266C53v80Ev");}
void  S266C5 ::v81(){vfunc_called(this, "_ZN6S266C53v81Ev");}
void  S266C5 ::v82(){vfunc_called(this, "_ZN6S266C53v82Ev");}
void  S266C5 ::v83(){vfunc_called(this, "_ZN6S266C53v83Ev");}
void  S266C5 ::v84(){vfunc_called(this, "_ZN6S266C53v84Ev");}
void  S266C5 ::v85(){vfunc_called(this, "_ZN6S266C53v85Ev");}
void  S266C5 ::v86(){vfunc_called(this, "_ZN6S266C53v86Ev");}
void  S266C5 ::v87(){vfunc_called(this, "_ZN6S266C53v87Ev");}
void  S266C5 ::v88(){vfunc_called(this, "_ZN6S266C53v88Ev");}
void  S266C5 ::v89(){vfunc_called(this, "_ZN6S266C53v89Ev");}
void  S266C5 ::v90(){vfunc_called(this, "_ZN6S266C53v90Ev");}
void  S266C5 ::v91(){vfunc_called(this, "_ZN6S266C53v91Ev");}
S266C5 ::S266C5(){ note_ctor("S266C5", this);} // tgen

static void Test_S266C5()
{
  extern Class_Descriptor cd_S266C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S266C5, buf);
    S266C5 *dp, &lv = *(dp=new (buf) S266C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S266C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C5)");
    check_base_class_offset(lv, (S266C6*), 0, "S266C5");
    check_field_offset(lv, s266c5f0, ABISELECT(96,60), "S266C5.s266c5f0");
    check_field_offset(lv, s266c5f1, ABISELECT(104,68), "S266C5.s266c5f1");
    check_field_offset(lv, s266c5f2, ABISELECT(112,72), "S266C5.s266c5f2");
    check_field_offset(lv, s266c5f3, ABISELECT(120,80), "S266C5.s266c5f3");
    check_field_offset(lv, s266c5f4, ABISELECT(136,92), "S266C5.s266c5f4");
    check_field_offset(lv, s266c5f5, ABISELECT(152,104), "S266C5.s266c5f5");
    check_field_offset(lv, s266c5f6, ABISELECT(160,108), "S266C5.s266c5f6");
    set_bf_and_test(lv, s266c5f7, ABISELECT(176,120), 0, 1, 1, "S266C5");
    set_bf_and_test(lv, s266c5f8, ABISELECT(176,120), 1, 1, 1, "S266C5");
    set_bf_and_test(lv, s266c5f9, ABISELECT(176,120), 2, 1, 1, "S266C5");
    set_bf_and_test(lv, s266c5f10, ABISELECT(176,120), 3, 1, 1, "S266C5");
    set_bf_and_test(lv, s266c5f11, ABISELECT(176,120), 4, 1, 1, "S266C5");
    check_field_offset(lv, s266c5f12, ABISELECT(180,124), "S266C5.s266c5f12");
    test_class_info(&lv, &cd_S266C5);
    dp->~S266C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C5(Test_S266C5, "S266C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S266C5C1Ev();
extern void _ZN6S266C5D1Ev();
Name_Map name_map_S266C5[] = {
  NSPAIR(_ZN6S266C5C1Ev),
  NSPAIR(_ZN6S266C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
static Base_Class bases_S266C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S266C5[];
extern void _ZN6S266C5D1Ev();
extern void _ZN6S266C5D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
static  VTBL_ENTRY vtc_S266C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C5[0]),
  (VTBL_ENTRY)&_ZN6S266C5D1Ev,
  (VTBL_ENTRY)&_ZN6S266C5D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
};
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
Class_Descriptor cd_S266C5 = {  "S266C5", // class name
  bases_S266C5, 1,
  &(vtc_S266C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S266C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S266C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C4  : S266C5 {
  unsigned int s266c4f0:1;
  unsigned int s266c4f1:1;
  unsigned int s266c4f2:1;
  ::S3350C17 s266c4f3;
  ::S3350C11 s266c4f4;
  ::S3350C5_nt s266c4f5;
  ::S287C27 s266c4f6;
  int s266c4f7[3];
  virtual  ~S266C4(); // _ZN6S266C4D1Ev
  virtual void  v92(); // _ZN6S266C43v92Ev
  virtual void  v93(); // _ZN6S266C43v93Ev
  virtual void  v94(); // _ZN6S266C43v94Ev
  virtual void  v95(); // _ZN6S266C43v95Ev
  virtual void  v96(); // _ZN6S266C43v96Ev
  virtual void  v97(); // _ZN6S266C43v97Ev
  virtual void  v98(); // _ZN6S266C43v98Ev
  virtual void  v99(); // _ZN6S266C43v99Ev
  virtual void  v100(); // _ZN6S266C44v100Ev
  virtual void  v101(); // _ZN6S266C44v101Ev
  virtual void  v102(); // _ZN6S266C44v102Ev
  virtual void  v103(); // _ZN6S266C44v103Ev
  virtual void  v104(); // _ZN6S266C44v104Ev
  virtual void  v105(); // _ZN6S266C44v105Ev
  virtual void  v106(); // _ZN6S266C44v106Ev
  virtual void  v107(); // _ZN6S266C44v107Ev
  virtual void  v108(); // _ZN6S266C44v108Ev
  virtual void  v109(); // _ZN6S266C44v109Ev
  virtual void  v110(); // _ZN6S266C44v110Ev
  virtual void  v111(); // _ZN6S266C44v111Ev
  S266C4(); // tgen
};
//SIG(-1 S266C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S266C4 ::~S266C4(){ note_dtor("S266C4", this);}
void  S266C4 ::v92(){vfunc_called(this, "_ZN6S266C43v92Ev");}
void  S266C4 ::v93(){vfunc_called(this, "_ZN6S266C43v93Ev");}
void  S266C4 ::v94(){vfunc_called(this, "_ZN6S266C43v94Ev");}
void  S266C4 ::v95(){vfunc_called(this, "_ZN6S266C43v95Ev");}
void  S266C4 ::v96(){vfunc_called(this, "_ZN6S266C43v96Ev");}
void  S266C4 ::v97(){vfunc_called(this, "_ZN6S266C43v97Ev");}
void  S266C4 ::v98(){vfunc_called(this, "_ZN6S266C43v98Ev");}
void  S266C4 ::v99(){vfunc_called(this, "_ZN6S266C43v99Ev");}
void  S266C4 ::v100(){vfunc_called(this, "_ZN6S266C44v100Ev");}
void  S266C4 ::v101(){vfunc_called(this, "_ZN6S266C44v101Ev");}
void  S266C4 ::v102(){vfunc_called(this, "_ZN6S266C44v102Ev");}
void  S266C4 ::v103(){vfunc_called(this, "_ZN6S266C44v103Ev");}
void  S266C4 ::v104(){vfunc_called(this, "_ZN6S266C44v104Ev");}
void  S266C4 ::v105(){vfunc_called(this, "_ZN6S266C44v105Ev");}
void  S266C4 ::v106(){vfunc_called(this, "_ZN6S266C44v106Ev");}
void  S266C4 ::v107(){vfunc_called(this, "_ZN6S266C44v107Ev");}
void  S266C4 ::v108(){vfunc_called(this, "_ZN6S266C44v108Ev");}
void  S266C4 ::v109(){vfunc_called(this, "_ZN6S266C44v109Ev");}
void  S266C4 ::v110(){vfunc_called(this, "_ZN6S266C44v110Ev");}
void  S266C4 ::v111(){vfunc_called(this, "_ZN6S266C44v111Ev");}
S266C4 ::S266C4(){ note_ctor("S266C4", this);} // tgen

static void Test_S266C4()
{
  extern Class_Descriptor cd_S266C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S266C4, buf);
    S266C4 *dp, &lv = *(dp=new (buf) S266C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S266C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C4)");
    check_base_class_offset(lv, (S266C6*)(S266C5*), 0, "S266C4");
    check_base_class_offset(lv, (S266C5*), 0, "S266C4");
    set_bf_and_test(lv, s266c4f0, ABISELECT(188,132), 0, 1, 1, "S266C4");
    set_bf_and_test(lv, s266c4f1, ABISELECT(188,132), 1, 1, 1, "S266C4");
    set_bf_and_test(lv, s266c4f2, ABISELECT(188,132), 2, 1, 1, "S266C4");
    check_field_offset(lv, s266c4f3, ABISELECT(192,136), "S266C4.s266c4f3");
    check_field_offset(lv, s266c4f4, ABISELECT(208,148), "S266C4.s266c4f4");
    check_field_offset(lv, s266c4f5, ABISELECT(224,160), "S266C4.s266c4f5");
    check_field_offset(lv, s266c4f6, ABISELECT(240,172), "S266C4.s266c4f6");
    check_field_offset(lv, s266c4f7, ABISELECT(256,184), "S266C4.s266c4f7");
    test_class_info(&lv, &cd_S266C4);
    dp->~S266C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C4(Test_S266C4, "S266C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S266C4C1Ev();
extern void _ZN6S266C4D1Ev();
Name_Map name_map_S266C4[] = {
  NSPAIR(_ZN6S266C4C1Ev),
  NSPAIR(_ZN6S266C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
extern Class_Descriptor cd_S266C5;
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
static Base_Class bases_S266C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S266C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S266C4[];
extern void _ZN6S266C4D1Ev();
extern void _ZN6S266C4D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
extern void _ZN6S266C43v92Ev();
extern void _ZN6S266C43v93Ev();
extern void _ZN6S266C43v94Ev();
extern void _ZN6S266C43v95Ev();
extern void _ZN6S266C43v96Ev();
extern void _ZN6S266C43v97Ev();
extern void _ZN6S266C43v98Ev();
extern void _ZN6S266C43v99Ev();
extern void _ZN6S266C44v100Ev();
extern void _ZN6S266C44v101Ev();
extern void _ZN6S266C44v102Ev();
extern void _ZN6S266C44v103Ev();
extern void _ZN6S266C44v104Ev();
extern void _ZN6S266C44v105Ev();
extern void _ZN6S266C44v106Ev();
extern void _ZN6S266C44v107Ev();
extern void _ZN6S266C44v108Ev();
extern void _ZN6S266C44v109Ev();
extern void _ZN6S266C44v110Ev();
extern void _ZN6S266C44v111Ev();
static  VTBL_ENTRY vtc_S266C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C4[0]),
  (VTBL_ENTRY)&_ZN6S266C4D1Ev,
  (VTBL_ENTRY)&_ZN6S266C4D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
  (VTBL_ENTRY)&_ZN6S266C43v92Ev,
  (VTBL_ENTRY)&_ZN6S266C43v93Ev,
  (VTBL_ENTRY)&_ZN6S266C43v94Ev,
  (VTBL_ENTRY)&_ZN6S266C43v95Ev,
  (VTBL_ENTRY)&_ZN6S266C43v96Ev,
  (VTBL_ENTRY)&_ZN6S266C43v97Ev,
  (VTBL_ENTRY)&_ZN6S266C43v98Ev,
  (VTBL_ENTRY)&_ZN6S266C43v99Ev,
  (VTBL_ENTRY)&_ZN6S266C44v100Ev,
  (VTBL_ENTRY)&_ZN6S266C44v101Ev,
  (VTBL_ENTRY)&_ZN6S266C44v102Ev,
  (VTBL_ENTRY)&_ZN6S266C44v103Ev,
  (VTBL_ENTRY)&_ZN6S266C44v104Ev,
  (VTBL_ENTRY)&_ZN6S266C44v105Ev,
  (VTBL_ENTRY)&_ZN6S266C44v106Ev,
  (VTBL_ENTRY)&_ZN6S266C44v107Ev,
  (VTBL_ENTRY)&_ZN6S266C44v108Ev,
  (VTBL_ENTRY)&_ZN6S266C44v109Ev,
  (VTBL_ENTRY)&_ZN6S266C44v110Ev,
  (VTBL_ENTRY)&_ZN6S266C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S266C4[];
extern  VTBL_ENTRY _ZTV6S266C4[];
Class_Descriptor cd_S266C4 = {  "S266C4", // class name
  bases_S266C4, 2,
  &(vtc_S266C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S266C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S266C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C3  : S266C4 {
  void *s266c3f0[2];
  int s266c3f1[4];
  unsigned int s266c3f2:1;
  unsigned int s266c3f3:1;
  unsigned int s266c3f4:1;
  char s266c3f5;
  int s266c3f6;
  unsigned int s266c3f7:1;
  ::S287C23 s266c3f8;
  virtual  ~S266C3(); // _ZN6S266C3D1Ev
  virtual void  v112(); // _ZN6S266C34v112Ev
  virtual void  v113(); // _ZN6S266C34v113Ev
  virtual void  v114(); // _ZN6S266C34v114Ev
  virtual void  v115(); // _ZN6S266C34v115Ev
  virtual void  v116(); // _ZN6S266C34v116Ev
  virtual void  v117(); // _ZN6S266C34v117Ev
  virtual void  v118(); // _ZN6S266C34v118Ev
  virtual void  v119(); // _ZN6S266C34v119Ev
  virtual void  v120(); // _ZN6S266C34v120Ev
  virtual void  v121(); // _ZN6S266C34v121Ev
  virtual void  v122(); // _ZN6S266C34v122Ev
  virtual void  v123(); // _ZN6S266C34v123Ev
  virtual void  v124(); // _ZN6S266C34v124Ev
  virtual void  v125(); // _ZN6S266C34v125Ev
  S266C3(); // tgen
};
//SIG(-1 S266C3) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S266C3 ::~S266C3(){ note_dtor("S266C3", this);}
void  S266C3 ::v112(){vfunc_called(this, "_ZN6S266C34v112Ev");}
void  S266C3 ::v113(){vfunc_called(this, "_ZN6S266C34v113Ev");}
void  S266C3 ::v114(){vfunc_called(this, "_ZN6S266C34v114Ev");}
void  S266C3 ::v115(){vfunc_called(this, "_ZN6S266C34v115Ev");}
void  S266C3 ::v116(){vfunc_called(this, "_ZN6S266C34v116Ev");}
void  S266C3 ::v117(){vfunc_called(this, "_ZN6S266C34v117Ev");}
void  S266C3 ::v118(){vfunc_called(this, "_ZN6S266C34v118Ev");}
void  S266C3 ::v119(){vfunc_called(this, "_ZN6S266C34v119Ev");}
void  S266C3 ::v120(){vfunc_called(this, "_ZN6S266C34v120Ev");}
void  S266C3 ::v121(){vfunc_called(this, "_ZN6S266C34v121Ev");}
void  S266C3 ::v122(){vfunc_called(this, "_ZN6S266C34v122Ev");}
void  S266C3 ::v123(){vfunc_called(this, "_ZN6S266C34v123Ev");}
void  S266C3 ::v124(){vfunc_called(this, "_ZN6S266C34v124Ev");}
void  S266C3 ::v125(){vfunc_called(this, "_ZN6S266C34v125Ev");}
S266C3 ::S266C3(){ note_ctor("S266C3", this);} // tgen

static void Test_S266C3()
{
  extern Class_Descriptor cd_S266C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S266C3, buf);
    S266C3 *dp, &lv = *(dp=new (buf) S266C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S266C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C3)");
    check_base_class_offset(lv, (S266C6*)(S266C5*)(S266C4*), 0, "S266C3");
    check_base_class_offset(lv, (S266C5*)(S266C4*), 0, "S266C3");
    check_base_class_offset(lv, (S266C4*), 0, "S266C3");
    check_field_offset(lv, s266c3f0, ABISELECT(272,196), "S266C3.s266c3f0");
    check_field_offset(lv, s266c3f1, ABISELECT(288,204), "S266C3.s266c3f1");
    set_bf_and_test(lv, s266c3f2, ABISELECT(304,220), 0, 1, 1, "S266C3");
    set_bf_and_test(lv, s266c3f3, ABISELECT(304,220), 1, 1, 1, "S266C3");
    set_bf_and_test(lv, s266c3f4, ABISELECT(304,220), 2, 1, 1, "S266C3");
    check_field_offset(lv, s266c3f5, ABISELECT(305,221), "S266C3.s266c3f5");
    check_field_offset(lv, s266c3f6, ABISELECT(308,224), "S266C3.s266c3f6");
    set_bf_and_test(lv, s266c3f7, ABISELECT(312,228), 0, 1, 1, "S266C3");
    check_field_offset(lv, s266c3f8, ABISELECT(320,232), "S266C3.s266c3f8");
    test_class_info(&lv, &cd_S266C3);
    dp->~S266C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C3(Test_S266C3, "S266C3", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S266C3C1Ev();
extern void _ZN6S266C3D1Ev();
Name_Map name_map_S266C3[] = {
  NSPAIR(_ZN6S266C3C1Ev),
  NSPAIR(_ZN6S266C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
extern Class_Descriptor cd_S266C5;
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
extern Class_Descriptor cd_S266C4;
extern VTBL_ENTRY _ZTI6S266C4[];
extern  VTBL_ENTRY _ZTV6S266C4[];
static Base_Class bases_S266C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S266C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S266C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S266C3[];
extern void _ZN6S266C3D1Ev();
extern void _ZN6S266C3D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
extern void _ZN6S266C43v92Ev();
extern void _ZN6S266C43v93Ev();
extern void _ZN6S266C43v94Ev();
extern void _ZN6S266C43v95Ev();
extern void _ZN6S266C43v96Ev();
extern void _ZN6S266C43v97Ev();
extern void _ZN6S266C43v98Ev();
extern void _ZN6S266C43v99Ev();
extern void _ZN6S266C44v100Ev();
extern void _ZN6S266C44v101Ev();
extern void _ZN6S266C44v102Ev();
extern void _ZN6S266C44v103Ev();
extern void _ZN6S266C44v104Ev();
extern void _ZN6S266C44v105Ev();
extern void _ZN6S266C44v106Ev();
extern void _ZN6S266C44v107Ev();
extern void _ZN6S266C44v108Ev();
extern void _ZN6S266C44v109Ev();
extern void _ZN6S266C44v110Ev();
extern void _ZN6S266C44v111Ev();
extern void _ZN6S266C34v112Ev();
extern void _ZN6S266C34v113Ev();
extern void _ZN6S266C34v114Ev();
extern void _ZN6S266C34v115Ev();
extern void _ZN6S266C34v116Ev();
extern void _ZN6S266C34v117Ev();
extern void _ZN6S266C34v118Ev();
extern void _ZN6S266C34v119Ev();
extern void _ZN6S266C34v120Ev();
extern void _ZN6S266C34v121Ev();
extern void _ZN6S266C34v122Ev();
extern void _ZN6S266C34v123Ev();
extern void _ZN6S266C34v124Ev();
extern void _ZN6S266C34v125Ev();
static  VTBL_ENTRY vtc_S266C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C3[0]),
  (VTBL_ENTRY)&_ZN6S266C3D1Ev,
  (VTBL_ENTRY)&_ZN6S266C3D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
  (VTBL_ENTRY)&_ZN6S266C43v92Ev,
  (VTBL_ENTRY)&_ZN6S266C43v93Ev,
  (VTBL_ENTRY)&_ZN6S266C43v94Ev,
  (VTBL_ENTRY)&_ZN6S266C43v95Ev,
  (VTBL_ENTRY)&_ZN6S266C43v96Ev,
  (VTBL_ENTRY)&_ZN6S266C43v97Ev,
  (VTBL_ENTRY)&_ZN6S266C43v98Ev,
  (VTBL_ENTRY)&_ZN6S266C43v99Ev,
  (VTBL_ENTRY)&_ZN6S266C44v100Ev,
  (VTBL_ENTRY)&_ZN6S266C44v101Ev,
  (VTBL_ENTRY)&_ZN6S266C44v102Ev,
  (VTBL_ENTRY)&_ZN6S266C44v103Ev,
  (VTBL_ENTRY)&_ZN6S266C44v104Ev,
  (VTBL_ENTRY)&_ZN6S266C44v105Ev,
  (VTBL_ENTRY)&_ZN6S266C44v106Ev,
  (VTBL_ENTRY)&_ZN6S266C44v107Ev,
  (VTBL_ENTRY)&_ZN6S266C44v108Ev,
  (VTBL_ENTRY)&_ZN6S266C44v109Ev,
  (VTBL_ENTRY)&_ZN6S266C44v110Ev,
  (VTBL_ENTRY)&_ZN6S266C44v111Ev,
  (VTBL_ENTRY)&_ZN6S266C34v112Ev,
  (VTBL_ENTRY)&_ZN6S266C34v113Ev,
  (VTBL_ENTRY)&_ZN6S266C34v114Ev,
  (VTBL_ENTRY)&_ZN6S266C34v115Ev,
  (VTBL_ENTRY)&_ZN6S266C34v116Ev,
  (VTBL_ENTRY)&_ZN6S266C34v117Ev,
  (VTBL_ENTRY)&_ZN6S266C34v118Ev,
  (VTBL_ENTRY)&_ZN6S266C34v119Ev,
  (VTBL_ENTRY)&_ZN6S266C34v120Ev,
  (VTBL_ENTRY)&_ZN6S266C34v121Ev,
  (VTBL_ENTRY)&_ZN6S266C34v122Ev,
  (VTBL_ENTRY)&_ZN6S266C34v123Ev,
  (VTBL_ENTRY)&_ZN6S266C34v124Ev,
  (VTBL_ENTRY)&_ZN6S266C34v125Ev,
};
extern VTBL_ENTRY _ZTI6S266C3[];
extern  VTBL_ENTRY _ZTV6S266C3[];
Class_Descriptor cd_S266C3 = {  "S266C3", // class name
  bases_S266C3, 3,
  &(vtc_S266C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S266C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S266C3),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C2  : S266C3 {
  void *s266c2f0[2];
  ::S287C8_nt s266c2f1;
  unsigned int s266c2f2:1;
  unsigned int s266c2f3:1;
  ::S3350C21_nt s266c2f4;
  virtual  ~S266C2(); // _ZN6S266C2D1Ev
  virtual void  v126(); // _ZN6S266C24v126Ev
  virtual void  v127(); // _ZN6S266C24v127Ev
  virtual void  v128(); // _ZN6S266C24v128Ev
  virtual void  v129(); // _ZN6S266C24v129Ev
  virtual void  v130(); // _ZN6S266C24v130Ev
  virtual void  v131(); // _ZN6S266C24v131Ev
  virtual void  v132(); // _ZN6S266C24v132Ev
  virtual void  v133(); // _ZN6S266C24v133Ev
  virtual void  v134(); // _ZN6S266C24v134Ev
  virtual void  v135(); // _ZN6S266C24v135Ev
  virtual void  v136(); // _ZN6S266C24v136Ev
  S266C2(); // tgen
};
//SIG(-1 S266C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S266C2 ::~S266C2(){ note_dtor("S266C2", this);}
void  S266C2 ::v126(){vfunc_called(this, "_ZN6S266C24v126Ev");}
void  S266C2 ::v127(){vfunc_called(this, "_ZN6S266C24v127Ev");}
void  S266C2 ::v128(){vfunc_called(this, "_ZN6S266C24v128Ev");}
void  S266C2 ::v129(){vfunc_called(this, "_ZN6S266C24v129Ev");}
void  S266C2 ::v130(){vfunc_called(this, "_ZN6S266C24v130Ev");}
void  S266C2 ::v131(){vfunc_called(this, "_ZN6S266C24v131Ev");}
void  S266C2 ::v132(){vfunc_called(this, "_ZN6S266C24v132Ev");}
void  S266C2 ::v133(){vfunc_called(this, "_ZN6S266C24v133Ev");}
void  S266C2 ::v134(){vfunc_called(this, "_ZN6S266C24v134Ev");}
void  S266C2 ::v135(){vfunc_called(this, "_ZN6S266C24v135Ev");}
void  S266C2 ::v136(){vfunc_called(this, "_ZN6S266C24v136Ev");}
S266C2 ::S266C2(){ note_ctor("S266C2", this);} // tgen

static void Test_S266C2()
{
  extern Class_Descriptor cd_S266C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S266C2, buf);
    S266C2 *dp, &lv = *(dp=new (buf) S266C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S266C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C2)");
    check_base_class_offset(lv, (S266C6*)(S266C5*)(S266C4*)(S266C3*), 0, "S266C2");
    check_base_class_offset(lv, (S266C5*)(S266C4*)(S266C3*), 0, "S266C2");
    check_base_class_offset(lv, (S266C4*)(S266C3*), 0, "S266C2");
    check_base_class_offset(lv, (S266C3*), 0, "S266C2");
    check_field_offset(lv, s266c2f0, ABISELECT(336,244), "S266C2.s266c2f0");
    check_field_offset(lv, s266c2f1, ABISELECT(352,252), "S266C2.s266c2f1");
    set_bf_and_test(lv, s266c2f2, ABISELECT(368,264), 0, 1, 1, "S266C2");
    set_bf_and_test(lv, s266c2f3, ABISELECT(368,264), 1, 1, 1, "S266C2");
    check_field_offset(lv, s266c2f4, ABISELECT(376,268), "S266C2.s266c2f4");
    test_class_info(&lv, &cd_S266C2);
    dp->~S266C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C2(Test_S266C2, "S266C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN6S266C2C1Ev();
extern void _ZN6S266C2D1Ev();
Name_Map name_map_S266C2[] = {
  NSPAIR(_ZN6S266C2C1Ev),
  NSPAIR(_ZN6S266C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
extern Class_Descriptor cd_S266C5;
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
extern Class_Descriptor cd_S266C4;
extern VTBL_ENTRY _ZTI6S266C4[];
extern  VTBL_ENTRY _ZTV6S266C4[];
extern Class_Descriptor cd_S266C3;
extern VTBL_ENTRY _ZTI6S266C3[];
extern  VTBL_ENTRY _ZTV6S266C3[];
static Base_Class bases_S266C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S266C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S266C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S266C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S266C2[];
extern void _ZN6S266C2D1Ev();
extern void _ZN6S266C2D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
extern void _ZN6S266C43v92Ev();
extern void _ZN6S266C43v93Ev();
extern void _ZN6S266C43v94Ev();
extern void _ZN6S266C43v95Ev();
extern void _ZN6S266C43v96Ev();
extern void _ZN6S266C43v97Ev();
extern void _ZN6S266C43v98Ev();
extern void _ZN6S266C43v99Ev();
extern void _ZN6S266C44v100Ev();
extern void _ZN6S266C44v101Ev();
extern void _ZN6S266C44v102Ev();
extern void _ZN6S266C44v103Ev();
extern void _ZN6S266C44v104Ev();
extern void _ZN6S266C44v105Ev();
extern void _ZN6S266C44v106Ev();
extern void _ZN6S266C44v107Ev();
extern void _ZN6S266C44v108Ev();
extern void _ZN6S266C44v109Ev();
extern void _ZN6S266C44v110Ev();
extern void _ZN6S266C44v111Ev();
extern void _ZN6S266C34v112Ev();
extern void _ZN6S266C34v113Ev();
extern void _ZN6S266C34v114Ev();
extern void _ZN6S266C34v115Ev();
extern void _ZN6S266C34v116Ev();
extern void _ZN6S266C34v117Ev();
extern void _ZN6S266C34v118Ev();
extern void _ZN6S266C34v119Ev();
extern void _ZN6S266C34v120Ev();
extern void _ZN6S266C34v121Ev();
extern void _ZN6S266C34v122Ev();
extern void _ZN6S266C34v123Ev();
extern void _ZN6S266C34v124Ev();
extern void _ZN6S266C34v125Ev();
extern void _ZN6S266C24v126Ev();
extern void _ZN6S266C24v127Ev();
extern void _ZN6S266C24v128Ev();
extern void _ZN6S266C24v129Ev();
extern void _ZN6S266C24v130Ev();
extern void _ZN6S266C24v131Ev();
extern void _ZN6S266C24v132Ev();
extern void _ZN6S266C24v133Ev();
extern void _ZN6S266C24v134Ev();
extern void _ZN6S266C24v135Ev();
extern void _ZN6S266C24v136Ev();
static  VTBL_ENTRY vtc_S266C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C2[0]),
  (VTBL_ENTRY)&_ZN6S266C2D1Ev,
  (VTBL_ENTRY)&_ZN6S266C2D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
  (VTBL_ENTRY)&_ZN6S266C43v92Ev,
  (VTBL_ENTRY)&_ZN6S266C43v93Ev,
  (VTBL_ENTRY)&_ZN6S266C43v94Ev,
  (VTBL_ENTRY)&_ZN6S266C43v95Ev,
  (VTBL_ENTRY)&_ZN6S266C43v96Ev,
  (VTBL_ENTRY)&_ZN6S266C43v97Ev,
  (VTBL_ENTRY)&_ZN6S266C43v98Ev,
  (VTBL_ENTRY)&_ZN6S266C43v99Ev,
  (VTBL_ENTRY)&_ZN6S266C44v100Ev,
  (VTBL_ENTRY)&_ZN6S266C44v101Ev,
  (VTBL_ENTRY)&_ZN6S266C44v102Ev,
  (VTBL_ENTRY)&_ZN6S266C44v103Ev,
  (VTBL_ENTRY)&_ZN6S266C44v104Ev,
  (VTBL_ENTRY)&_ZN6S266C44v105Ev,
  (VTBL_ENTRY)&_ZN6S266C44v106Ev,
  (VTBL_ENTRY)&_ZN6S266C44v107Ev,
  (VTBL_ENTRY)&_ZN6S266C44v108Ev,
  (VTBL_ENTRY)&_ZN6S266C44v109Ev,
  (VTBL_ENTRY)&_ZN6S266C44v110Ev,
  (VTBL_ENTRY)&_ZN6S266C44v111Ev,
  (VTBL_ENTRY)&_ZN6S266C34v112Ev,
  (VTBL_ENTRY)&_ZN6S266C34v113Ev,
  (VTBL_ENTRY)&_ZN6S266C34v114Ev,
  (VTBL_ENTRY)&_ZN6S266C34v115Ev,
  (VTBL_ENTRY)&_ZN6S266C34v116Ev,
  (VTBL_ENTRY)&_ZN6S266C34v117Ev,
  (VTBL_ENTRY)&_ZN6S266C34v118Ev,
  (VTBL_ENTRY)&_ZN6S266C34v119Ev,
  (VTBL_ENTRY)&_ZN6S266C34v120Ev,
  (VTBL_ENTRY)&_ZN6S266C34v121Ev,
  (VTBL_ENTRY)&_ZN6S266C34v122Ev,
  (VTBL_ENTRY)&_ZN6S266C34v123Ev,
  (VTBL_ENTRY)&_ZN6S266C34v124Ev,
  (VTBL_ENTRY)&_ZN6S266C34v125Ev,
  (VTBL_ENTRY)&_ZN6S266C24v126Ev,
  (VTBL_ENTRY)&_ZN6S266C24v127Ev,
  (VTBL_ENTRY)&_ZN6S266C24v128Ev,
  (VTBL_ENTRY)&_ZN6S266C24v129Ev,
  (VTBL_ENTRY)&_ZN6S266C24v130Ev,
  (VTBL_ENTRY)&_ZN6S266C24v131Ev,
  (VTBL_ENTRY)&_ZN6S266C24v132Ev,
  (VTBL_ENTRY)&_ZN6S266C24v133Ev,
  (VTBL_ENTRY)&_ZN6S266C24v134Ev,
  (VTBL_ENTRY)&_ZN6S266C24v135Ev,
  (VTBL_ENTRY)&_ZN6S266C24v136Ev,
};
extern VTBL_ENTRY _ZTI6S266C2[];
extern  VTBL_ENTRY _ZTV6S266C2[];
Class_Descriptor cd_S266C2 = {  "S266C2", // class name
  bases_S266C2, 4,
  &(vtc_S266C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI6S266C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S266C2),135, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C24_nt  {
  virtual  ~S266C24_nt(); // _ZN10S266C24_ntD1Ev
  virtual void  v137(); // _ZN10S266C24_nt4v137Ev
  virtual void  v138(); // _ZN10S266C24_nt4v138Ev
  virtual void  v139(); // _ZN10S266C24_nt4v139Ev
  virtual void  v140(); // _ZN10S266C24_nt4v140Ev
  virtual void  v141(); // _ZN10S266C24_nt4v141Ev
  virtual void  v142(); // _ZN10S266C24_nt4v142Ev
  virtual void  v143(); // _ZN10S266C24_nt4v143Ev
  S266C24_nt(); // tgen
};
//SIG(-1 S266C24_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S266C24_nt ::~S266C24_nt(){ note_dtor("S266C24_nt", this);}
void  S266C24_nt ::v137(){vfunc_called(this, "_ZN10S266C24_nt4v137Ev");}
void  S266C24_nt ::v138(){vfunc_called(this, "_ZN10S266C24_nt4v138Ev");}
void  S266C24_nt ::v139(){vfunc_called(this, "_ZN10S266C24_nt4v139Ev");}
void  S266C24_nt ::v140(){vfunc_called(this, "_ZN10S266C24_nt4v140Ev");}
void  S266C24_nt ::v141(){vfunc_called(this, "_ZN10S266C24_nt4v141Ev");}
void  S266C24_nt ::v142(){vfunc_called(this, "_ZN10S266C24_nt4v142Ev");}
void  S266C24_nt ::v143(){vfunc_called(this, "_ZN10S266C24_nt4v143Ev");}
S266C24_nt ::S266C24_nt(){ note_ctor("S266C24_nt", this);} // tgen

//skip512 S266C24_nt

#else // __cplusplus

extern void _ZN10S266C24_ntC1Ev();
extern void _ZN10S266C24_ntD1Ev();
Name_Map name_map_S266C24_nt[] = {
  NSPAIR(_ZN10S266C24_ntC1Ev),
  NSPAIR(_ZN10S266C24_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S266C24_nt[];
extern void _ZN10S266C24_ntD1Ev();
extern void _ZN10S266C24_ntD0Ev();
extern void _ZN10S266C24_nt4v137Ev();
extern void _ZN10S266C24_nt4v138Ev();
extern void _ZN10S266C24_nt4v139Ev();
extern void _ZN10S266C24_nt4v140Ev();
extern void _ZN10S266C24_nt4v141Ev();
extern void _ZN10S266C24_nt4v142Ev();
extern void _ZN10S266C24_nt4v143Ev();
static  VTBL_ENTRY vtc_S266C24_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S266C24_nt[0]),
  (VTBL_ENTRY)&_ZN10S266C24_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S266C24_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v143Ev,
};
extern VTBL_ENTRY _ZTI10S266C24_nt[];
VTBL_ENTRY *P__ZTI10S266C24_nt = _ZTI10S266C24_nt; 
extern  VTBL_ENTRY _ZTV10S266C24_nt[];
Class_Descriptor cd_S266C24_nt = {  "S266C24_nt", // class name
  0,0,//no base classes
  &(vtc_S266C24_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S266C24_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S266C24_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S266C1  : S266C2 , S266C24_nt {
  virtual  ~S266C1(); // _ZN6S266C1D1Ev
  virtual void  v1(); // _ZN6S266C12v1Ev
  virtual void  v2(); // _ZN6S266C12v2Ev
  virtual void  v3(); // _ZN6S266C12v3Ev
  virtual void  v4(); // _ZN6S266C12v4Ev
  virtual void  v5(); // _ZN6S266C12v5Ev
  S266C1(); // tgen
};
//SIG(1 S266C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} BC24{ vd v137 v138 v139 v140 v141 v142 v143} vd v1 v2 v3 v4 v5}


 S266C1 ::~S266C1(){ note_dtor("S266C1", this);}
void  S266C1 ::v1(){vfunc_called(this, "_ZN6S266C12v1Ev");}
void  S266C1 ::v2(){vfunc_called(this, "_ZN6S266C12v2Ev");}
void  S266C1 ::v3(){vfunc_called(this, "_ZN6S266C12v3Ev");}
void  S266C1 ::v4(){vfunc_called(this, "_ZN6S266C12v4Ev");}
void  S266C1 ::v5(){vfunc_called(this, "_ZN6S266C12v5Ev");}
S266C1 ::S266C1(){ note_ctor("S266C1", this);} // tgen

static void Test_S266C1()
{
  extern Class_Descriptor cd_S266C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,72)];
    init_test(&cd_S266C1, buf);
    S266C1 *dp, &lv = *(dp=new (buf) S266C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,284), "sizeof(S266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S266C1)");
    check_base_class_offset(lv, (S266C6*)(S266C5*)(S266C4*)(S266C3*)(S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C5*)(S266C4*)(S266C3*)(S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C4*)(S266C3*)(S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C3*)(S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C2*), 0, "S266C1");
    check_base_class_offset(lv, (S266C24_nt*), ABISELECT(392,280), "S266C1");
    test_class_info(&lv, &cd_S266C1);
    dp->~S266C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS266C1(Test_S266C1, "S266C1", ABISELECT(400,284));

#else // __cplusplus

extern void _ZN6S266C1C1Ev();
extern void _ZN6S266C1D1Ev();
Name_Map name_map_S266C1[] = {
  NSPAIR(_ZN6S266C1C1Ev),
  NSPAIR(_ZN6S266C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S266C6;
extern VTBL_ENTRY _ZTI6S266C6[];
extern  VTBL_ENTRY _ZTV6S266C6[];
extern Class_Descriptor cd_S266C5;
extern VTBL_ENTRY _ZTI6S266C5[];
extern  VTBL_ENTRY _ZTV6S266C5[];
extern Class_Descriptor cd_S266C4;
extern VTBL_ENTRY _ZTI6S266C4[];
extern  VTBL_ENTRY _ZTV6S266C4[];
extern Class_Descriptor cd_S266C3;
extern VTBL_ENTRY _ZTI6S266C3[];
extern  VTBL_ENTRY _ZTV6S266C3[];
extern Class_Descriptor cd_S266C2;
extern VTBL_ENTRY _ZTI6S266C2[];
extern  VTBL_ENTRY _ZTV6S266C2[];
extern Class_Descriptor cd_S266C24_nt;
extern VTBL_ENTRY _ZTI10S266C24_nt[];
extern  VTBL_ENTRY _ZTV10S266C24_nt[];
static Base_Class bases_S266C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S266C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S266C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S266C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S266C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S266C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S266C24_nt,    ABISELECT(392,280), //bcp->offset
    140, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S266C1[];
extern void _ZN6S266C1D1Ev();
extern void _ZN6S266C1D0Ev();
extern void _ZN6S266C62v6Ev();
extern void _ZN6S266C62v7Ev();
extern void _ZN6S266C62v8Ev();
extern void _ZN6S266C62v9Ev();
extern void _ZN6S266C63v10Ev();
extern void _ZN6S266C63v11Ev();
extern void _ZN6S266C63v12Ev();
extern void _ZN6S266C63v13Ev();
extern void _ZN6S266C63v14Ev();
extern void _ZN6S266C63v15Ev();
extern void _ZN6S266C63v16Ev();
extern void _ZN6S266C63v17Ev();
extern void _ZN6S266C63v18Ev();
extern void _ZN6S266C63v19Ev();
extern void _ZN6S266C63v20Ev();
extern void _ZN6S266C63v21Ev();
extern void _ZN6S266C63v22Ev();
extern void _ZN6S266C63v23Ev();
extern void _ZN6S266C63v24Ev();
extern void _ZN6S266C63v25Ev();
extern void _ZN6S266C63v26Ev();
extern void _ZN6S266C63v27Ev();
extern void _ZN6S266C63v28Ev();
extern void _ZN6S266C63v29Ev();
extern void _ZN6S266C63v30Ev();
extern void _ZN6S266C63v31Ev();
extern void _ZN6S266C63v32Ev();
extern void _ZN6S266C63v33Ev();
extern void _ZN6S266C63v34Ev();
extern void _ZN6S266C63v35Ev();
extern void _ZN6S266C63v36Ev();
extern void _ZN6S266C63v37Ev();
extern void _ZN6S266C63v38Ev();
extern void _ZN6S266C63v39Ev();
extern void _ZN6S266C63v40Ev();
extern void _ZN6S266C63v41Ev();
extern void _ZN6S266C63v42Ev();
extern void _ZN6S266C63v43Ev();
extern void _ZN6S266C63v44Ev();
extern void _ZN6S266C63v45Ev();
extern void _ZN6S266C63v46Ev();
extern void _ZN6S266C63v47Ev();
extern void _ZN6S266C63v48Ev();
extern void _ZN6S266C63v49Ev();
extern void _ZN6S266C63v50Ev();
extern void _ZN6S266C63v51Ev();
extern void _ZN6S266C63v52Ev();
extern void _ZN6S266C63v53Ev();
extern void _ZN6S266C63v54Ev();
extern void _ZN6S266C63v55Ev();
extern void _ZN6S266C63v56Ev();
extern void _ZN6S266C63v57Ev();
extern void _ZN6S266C63v58Ev();
extern void _ZN6S266C63v59Ev();
extern void _ZN6S266C63v60Ev();
extern void _ZN6S266C63v61Ev();
extern void _ZN6S266C63v62Ev();
extern void _ZN6S266C63v63Ev();
extern void _ZN6S266C63v64Ev();
extern void _ZN6S266C63v65Ev();
extern void _ZN6S266C63v66Ev();
extern void _ZN6S266C63v67Ev();
extern void _ZN6S266C63v68Ev();
extern void _ZN6S266C63v69Ev();
extern void _ZN6S266C53v70Ev();
extern void _ZN6S266C53v71Ev();
extern void _ZN6S266C53v72Ev();
extern void _ZN6S266C53v73Ev();
extern void _ZN6S266C53v74Ev();
extern void _ZN6S266C53v75Ev();
extern void _ZN6S266C53v76Ev();
extern void _ZN6S266C53v77Ev();
extern void _ZN6S266C53v78Ev();
extern void _ZN6S266C53v79Ev();
extern void _ZN6S266C53v80Ev();
extern void _ZN6S266C53v81Ev();
extern void _ZN6S266C53v82Ev();
extern void _ZN6S266C53v83Ev();
extern void _ZN6S266C53v84Ev();
extern void _ZN6S266C53v85Ev();
extern void _ZN6S266C53v86Ev();
extern void _ZN6S266C53v87Ev();
extern void _ZN6S266C53v88Ev();
extern void _ZN6S266C53v89Ev();
extern void _ZN6S266C53v90Ev();
extern void _ZN6S266C53v91Ev();
extern void _ZN6S266C43v92Ev();
extern void _ZN6S266C43v93Ev();
extern void _ZN6S266C43v94Ev();
extern void _ZN6S266C43v95Ev();
extern void _ZN6S266C43v96Ev();
extern void _ZN6S266C43v97Ev();
extern void _ZN6S266C43v98Ev();
extern void _ZN6S266C43v99Ev();
extern void _ZN6S266C44v100Ev();
extern void _ZN6S266C44v101Ev();
extern void _ZN6S266C44v102Ev();
extern void _ZN6S266C44v103Ev();
extern void _ZN6S266C44v104Ev();
extern void _ZN6S266C44v105Ev();
extern void _ZN6S266C44v106Ev();
extern void _ZN6S266C44v107Ev();
extern void _ZN6S266C44v108Ev();
extern void _ZN6S266C44v109Ev();
extern void _ZN6S266C44v110Ev();
extern void _ZN6S266C44v111Ev();
extern void _ZN6S266C34v112Ev();
extern void _ZN6S266C34v113Ev();
extern void _ZN6S266C34v114Ev();
extern void _ZN6S266C34v115Ev();
extern void _ZN6S266C34v116Ev();
extern void _ZN6S266C34v117Ev();
extern void _ZN6S266C34v118Ev();
extern void _ZN6S266C34v119Ev();
extern void _ZN6S266C34v120Ev();
extern void _ZN6S266C34v121Ev();
extern void _ZN6S266C34v122Ev();
extern void _ZN6S266C34v123Ev();
extern void _ZN6S266C34v124Ev();
extern void _ZN6S266C34v125Ev();
extern void _ZN6S266C24v126Ev();
extern void _ZN6S266C24v127Ev();
extern void _ZN6S266C24v128Ev();
extern void _ZN6S266C24v129Ev();
extern void _ZN6S266C24v130Ev();
extern void _ZN6S266C24v131Ev();
extern void _ZN6S266C24v132Ev();
extern void _ZN6S266C24v133Ev();
extern void _ZN6S266C24v134Ev();
extern void _ZN6S266C24v135Ev();
extern void _ZN6S266C24v136Ev();
extern void _ZN6S266C12v1Ev();
extern void _ZN6S266C12v2Ev();
extern void _ZN6S266C12v3Ev();
extern void _ZN6S266C12v4Ev();
extern void _ZN6S266C12v5Ev();
extern void ABISELECT(_ZThn392_N6S266C1D1Ev,_ZThn280_N6S266C1D1Ev)();
extern void ABISELECT(_ZThn392_N6S266C1D0Ev,_ZThn280_N6S266C1D0Ev)();
extern void _ZN10S266C24_nt4v137Ev();
extern void _ZN10S266C24_nt4v138Ev();
extern void _ZN10S266C24_nt4v139Ev();
extern void _ZN10S266C24_nt4v140Ev();
extern void _ZN10S266C24_nt4v141Ev();
extern void _ZN10S266C24_nt4v142Ev();
extern void _ZN10S266C24_nt4v143Ev();
static  VTBL_ENTRY vtc_S266C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S266C1[0]),
  (VTBL_ENTRY)&_ZN6S266C1D1Ev,
  (VTBL_ENTRY)&_ZN6S266C1D0Ev,
  (VTBL_ENTRY)&_ZN6S266C62v6Ev,
  (VTBL_ENTRY)&_ZN6S266C62v7Ev,
  (VTBL_ENTRY)&_ZN6S266C62v8Ev,
  (VTBL_ENTRY)&_ZN6S266C62v9Ev,
  (VTBL_ENTRY)&_ZN6S266C63v10Ev,
  (VTBL_ENTRY)&_ZN6S266C63v11Ev,
  (VTBL_ENTRY)&_ZN6S266C63v12Ev,
  (VTBL_ENTRY)&_ZN6S266C63v13Ev,
  (VTBL_ENTRY)&_ZN6S266C63v14Ev,
  (VTBL_ENTRY)&_ZN6S266C63v15Ev,
  (VTBL_ENTRY)&_ZN6S266C63v16Ev,
  (VTBL_ENTRY)&_ZN6S266C63v17Ev,
  (VTBL_ENTRY)&_ZN6S266C63v18Ev,
  (VTBL_ENTRY)&_ZN6S266C63v19Ev,
  (VTBL_ENTRY)&_ZN6S266C63v20Ev,
  (VTBL_ENTRY)&_ZN6S266C63v21Ev,
  (VTBL_ENTRY)&_ZN6S266C63v22Ev,
  (VTBL_ENTRY)&_ZN6S266C63v23Ev,
  (VTBL_ENTRY)&_ZN6S266C63v24Ev,
  (VTBL_ENTRY)&_ZN6S266C63v25Ev,
  (VTBL_ENTRY)&_ZN6S266C63v26Ev,
  (VTBL_ENTRY)&_ZN6S266C63v27Ev,
  (VTBL_ENTRY)&_ZN6S266C63v28Ev,
  (VTBL_ENTRY)&_ZN6S266C63v29Ev,
  (VTBL_ENTRY)&_ZN6S266C63v30Ev,
  (VTBL_ENTRY)&_ZN6S266C63v31Ev,
  (VTBL_ENTRY)&_ZN6S266C63v32Ev,
  (VTBL_ENTRY)&_ZN6S266C63v33Ev,
  (VTBL_ENTRY)&_ZN6S266C63v34Ev,
  (VTBL_ENTRY)&_ZN6S266C63v35Ev,
  (VTBL_ENTRY)&_ZN6S266C63v36Ev,
  (VTBL_ENTRY)&_ZN6S266C63v37Ev,
  (VTBL_ENTRY)&_ZN6S266C63v38Ev,
  (VTBL_ENTRY)&_ZN6S266C63v39Ev,
  (VTBL_ENTRY)&_ZN6S266C63v40Ev,
  (VTBL_ENTRY)&_ZN6S266C63v41Ev,
  (VTBL_ENTRY)&_ZN6S266C63v42Ev,
  (VTBL_ENTRY)&_ZN6S266C63v43Ev,
  (VTBL_ENTRY)&_ZN6S266C63v44Ev,
  (VTBL_ENTRY)&_ZN6S266C63v45Ev,
  (VTBL_ENTRY)&_ZN6S266C63v46Ev,
  (VTBL_ENTRY)&_ZN6S266C63v47Ev,
  (VTBL_ENTRY)&_ZN6S266C63v48Ev,
  (VTBL_ENTRY)&_ZN6S266C63v49Ev,
  (VTBL_ENTRY)&_ZN6S266C63v50Ev,
  (VTBL_ENTRY)&_ZN6S266C63v51Ev,
  (VTBL_ENTRY)&_ZN6S266C63v52Ev,
  (VTBL_ENTRY)&_ZN6S266C63v53Ev,
  (VTBL_ENTRY)&_ZN6S266C63v54Ev,
  (VTBL_ENTRY)&_ZN6S266C63v55Ev,
  (VTBL_ENTRY)&_ZN6S266C63v56Ev,
  (VTBL_ENTRY)&_ZN6S266C63v57Ev,
  (VTBL_ENTRY)&_ZN6S266C63v58Ev,
  (VTBL_ENTRY)&_ZN6S266C63v59Ev,
  (VTBL_ENTRY)&_ZN6S266C63v60Ev,
  (VTBL_ENTRY)&_ZN6S266C63v61Ev,
  (VTBL_ENTRY)&_ZN6S266C63v62Ev,
  (VTBL_ENTRY)&_ZN6S266C63v63Ev,
  (VTBL_ENTRY)&_ZN6S266C63v64Ev,
  (VTBL_ENTRY)&_ZN6S266C63v65Ev,
  (VTBL_ENTRY)&_ZN6S266C63v66Ev,
  (VTBL_ENTRY)&_ZN6S266C63v67Ev,
  (VTBL_ENTRY)&_ZN6S266C63v68Ev,
  (VTBL_ENTRY)&_ZN6S266C63v69Ev,
  (VTBL_ENTRY)&_ZN6S266C53v70Ev,
  (VTBL_ENTRY)&_ZN6S266C53v71Ev,
  (VTBL_ENTRY)&_ZN6S266C53v72Ev,
  (VTBL_ENTRY)&_ZN6S266C53v73Ev,
  (VTBL_ENTRY)&_ZN6S266C53v74Ev,
  (VTBL_ENTRY)&_ZN6S266C53v75Ev,
  (VTBL_ENTRY)&_ZN6S266C53v76Ev,
  (VTBL_ENTRY)&_ZN6S266C53v77Ev,
  (VTBL_ENTRY)&_ZN6S266C53v78Ev,
  (VTBL_ENTRY)&_ZN6S266C53v79Ev,
  (VTBL_ENTRY)&_ZN6S266C53v80Ev,
  (VTBL_ENTRY)&_ZN6S266C53v81Ev,
  (VTBL_ENTRY)&_ZN6S266C53v82Ev,
  (VTBL_ENTRY)&_ZN6S266C53v83Ev,
  (VTBL_ENTRY)&_ZN6S266C53v84Ev,
  (VTBL_ENTRY)&_ZN6S266C53v85Ev,
  (VTBL_ENTRY)&_ZN6S266C53v86Ev,
  (VTBL_ENTRY)&_ZN6S266C53v87Ev,
  (VTBL_ENTRY)&_ZN6S266C53v88Ev,
  (VTBL_ENTRY)&_ZN6S266C53v89Ev,
  (VTBL_ENTRY)&_ZN6S266C53v90Ev,
  (VTBL_ENTRY)&_ZN6S266C53v91Ev,
  (VTBL_ENTRY)&_ZN6S266C43v92Ev,
  (VTBL_ENTRY)&_ZN6S266C43v93Ev,
  (VTBL_ENTRY)&_ZN6S266C43v94Ev,
  (VTBL_ENTRY)&_ZN6S266C43v95Ev,
  (VTBL_ENTRY)&_ZN6S266C43v96Ev,
  (VTBL_ENTRY)&_ZN6S266C43v97Ev,
  (VTBL_ENTRY)&_ZN6S266C43v98Ev,
  (VTBL_ENTRY)&_ZN6S266C43v99Ev,
  (VTBL_ENTRY)&_ZN6S266C44v100Ev,
  (VTBL_ENTRY)&_ZN6S266C44v101Ev,
  (VTBL_ENTRY)&_ZN6S266C44v102Ev,
  (VTBL_ENTRY)&_ZN6S266C44v103Ev,
  (VTBL_ENTRY)&_ZN6S266C44v104Ev,
  (VTBL_ENTRY)&_ZN6S266C44v105Ev,
  (VTBL_ENTRY)&_ZN6S266C44v106Ev,
  (VTBL_ENTRY)&_ZN6S266C44v107Ev,
  (VTBL_ENTRY)&_ZN6S266C44v108Ev,
  (VTBL_ENTRY)&_ZN6S266C44v109Ev,
  (VTBL_ENTRY)&_ZN6S266C44v110Ev,
  (VTBL_ENTRY)&_ZN6S266C44v111Ev,
  (VTBL_ENTRY)&_ZN6S266C34v112Ev,
  (VTBL_ENTRY)&_ZN6S266C34v113Ev,
  (VTBL_ENTRY)&_ZN6S266C34v114Ev,
  (VTBL_ENTRY)&_ZN6S266C34v115Ev,
  (VTBL_ENTRY)&_ZN6S266C34v116Ev,
  (VTBL_ENTRY)&_ZN6S266C34v117Ev,
  (VTBL_ENTRY)&_ZN6S266C34v118Ev,
  (VTBL_ENTRY)&_ZN6S266C34v119Ev,
  (VTBL_ENTRY)&_ZN6S266C34v120Ev,
  (VTBL_ENTRY)&_ZN6S266C34v121Ev,
  (VTBL_ENTRY)&_ZN6S266C34v122Ev,
  (VTBL_ENTRY)&_ZN6S266C34v123Ev,
  (VTBL_ENTRY)&_ZN6S266C34v124Ev,
  (VTBL_ENTRY)&_ZN6S266C34v125Ev,
  (VTBL_ENTRY)&_ZN6S266C24v126Ev,
  (VTBL_ENTRY)&_ZN6S266C24v127Ev,
  (VTBL_ENTRY)&_ZN6S266C24v128Ev,
  (VTBL_ENTRY)&_ZN6S266C24v129Ev,
  (VTBL_ENTRY)&_ZN6S266C24v130Ev,
  (VTBL_ENTRY)&_ZN6S266C24v131Ev,
  (VTBL_ENTRY)&_ZN6S266C24v132Ev,
  (VTBL_ENTRY)&_ZN6S266C24v133Ev,
  (VTBL_ENTRY)&_ZN6S266C24v134Ev,
  (VTBL_ENTRY)&_ZN6S266C24v135Ev,
  (VTBL_ENTRY)&_ZN6S266C24v136Ev,
  (VTBL_ENTRY)&_ZN6S266C12v1Ev,
  (VTBL_ENTRY)&_ZN6S266C12v2Ev,
  (VTBL_ENTRY)&_ZN6S266C12v3Ev,
  (VTBL_ENTRY)&_ZN6S266C12v4Ev,
  (VTBL_ENTRY)&_ZN6S266C12v5Ev,
  ABISELECT(-392,-280),
  (VTBL_ENTRY)&(_ZTI6S266C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn392_N6S266C1D1Ev,_ZThn280_N6S266C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn392_N6S266C1D0Ev,_ZThn280_N6S266C1D0Ev),
  (VTBL_ENTRY)&_ZN10S266C24_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S266C24_nt4v143Ev,
};
extern VTBL_ENTRY _ZTI6S266C1[];
extern  VTBL_ENTRY _ZTV6S266C1[];
Class_Descriptor cd_S266C1 = {  "S266C1", // class name
  bases_S266C1, 6,
  &(vtc_S266C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,284), // object size
  NSPAIRA(_ZTI6S266C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S266C1),151, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S267C6  {
  int s267c6f0;
  __tsi64 s267c6f1;
  void *s267c6f2[4];
  int s267c6f3[2];
  void *s267c6f4;
  ::S3350C4_nt s267c6f5;
  void *s267c6f6[2];
  virtual  ~S267C6(); // _ZN6S267C6D1Ev
  virtual void  v6(); // _ZN6S267C62v6Ev
  virtual void  v7(); // _ZN6S267C62v7Ev
  virtual void  v8(); // _ZN6S267C62v8Ev
  virtual void  v9(); // _ZN6S267C62v9Ev
  virtual void  v10(); // _ZN6S267C63v10Ev
  virtual void  v11(); // _ZN6S267C63v11Ev
  virtual void  v12(); // _ZN6S267C63v12Ev
  virtual void  v13(); // _ZN6S267C63v13Ev
  virtual void  v14(); // _ZN6S267C63v14Ev
  virtual void  v15(); // _ZN6S267C63v15Ev
  virtual void  v16(); // _ZN6S267C63v16Ev
  virtual void  v17(); // _ZN6S267C63v17Ev
  virtual void  v18(); // _ZN6S267C63v18Ev
  virtual void  v19(); // _ZN6S267C63v19Ev
  virtual void  v20(); // _ZN6S267C63v20Ev
  virtual void  v21(); // _ZN6S267C63v21Ev
  virtual void  v22(); // _ZN6S267C63v22Ev
  virtual void  v23(); // _ZN6S267C63v23Ev
  virtual void  v24(); // _ZN6S267C63v24Ev
  virtual void  v25(); // _ZN6S267C63v25Ev
  virtual void  v26(); // _ZN6S267C63v26Ev
  virtual void  v27(); // _ZN6S267C63v27Ev
  virtual void  v28(); // _ZN6S267C63v28Ev
  virtual void  v29(); // _ZN6S267C63v29Ev
  virtual void  v30(); // _ZN6S267C63v30Ev
  virtual void  v31(); // _ZN6S267C63v31Ev
  virtual void  v32(); // _ZN6S267C63v32Ev
  virtual void  v33(); // _ZN6S267C63v33Ev
  virtual void  v34(); // _ZN6S267C63v34Ev
  virtual void  v35(); // _ZN6S267C63v35Ev
  virtual void  v36(); // _ZN6S267C63v36Ev
  virtual void  v37(); // _ZN6S267C63v37Ev
  virtual void  v38(); // _ZN6S267C63v38Ev
  virtual void  v39(); // _ZN6S267C63v39Ev
  virtual void  v40(); // _ZN6S267C63v40Ev
  virtual void  v41(); // _ZN6S267C63v41Ev
  virtual void  v42(); // _ZN6S267C63v42Ev
  virtual void  v43(); // _ZN6S267C63v43Ev
  virtual void  v44(); // _ZN6S267C63v44Ev
  virtual void  v45(); // _ZN6S267C63v45Ev
  virtual void  v46(); // _ZN6S267C63v46Ev
  virtual void  v47(); // _ZN6S267C63v47Ev
  virtual void  v48(); // _ZN6S267C63v48Ev
  virtual void  v49(); // _ZN6S267C63v49Ev
  virtual void  v50(); // _ZN6S267C63v50Ev
  virtual void  v51(); // _ZN6S267C63v51Ev
  virtual void  v52(); // _ZN6S267C63v52Ev
  virtual void  v53(); // _ZN6S267C63v53Ev
  virtual void  v54(); // _ZN6S267C63v54Ev
  virtual void  v55(); // _ZN6S267C63v55Ev
  virtual void  v56(); // _ZN6S267C63v56Ev
  virtual void  v57(); // _ZN6S267C63v57Ev
  virtual void  v58(); // _ZN6S267C63v58Ev
  virtual void  v59(); // _ZN6S267C63v59Ev
  virtual void  v60(); // _ZN6S267C63v60Ev
  virtual void  v61(); // _ZN6S267C63v61Ev
  virtual void  v62(); // _ZN6S267C63v62Ev
  virtual void  v63(); // _ZN6S267C63v63Ev
  virtual void  v64(); // _ZN6S267C63v64Ev
  virtual void  v65(); // _ZN6S267C63v65Ev
  virtual void  v66(); // _ZN6S267C63v66Ev
  virtual void  v67(); // _ZN6S267C63v67Ev
  virtual void  v68(); // _ZN6S267C63v68Ev
  virtual void  v69(); // _ZN6S267C63v69Ev
  S267C6(); // tgen
};
//SIG(-1 S267C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S267C6 ::~S267C6(){ note_dtor("S267C6", this);}
void  S267C6 ::v6(){vfunc_called(this, "_ZN6S267C62v6Ev");}
void  S267C6 ::v7(){vfunc_called(this, "_ZN6S267C62v7Ev");}
void  S267C6 ::v8(){vfunc_called(this, "_ZN6S267C62v8Ev");}
void  S267C6 ::v9(){vfunc_called(this, "_ZN6S267C62v9Ev");}
void  S267C6 ::v10(){vfunc_called(this, "_ZN6S267C63v10Ev");}
void  S267C6 ::v11(){vfunc_called(this, "_ZN6S267C63v11Ev");}
void  S267C6 ::v12(){vfunc_called(this, "_ZN6S267C63v12Ev");}
void  S267C6 ::v13(){vfunc_called(this, "_ZN6S267C63v13Ev");}
void  S267C6 ::v14(){vfunc_called(this, "_ZN6S267C63v14Ev");}
void  S267C6 ::v15(){vfunc_called(this, "_ZN6S267C63v15Ev");}
void  S267C6 ::v16(){vfunc_called(this, "_ZN6S267C63v16Ev");}
void  S267C6 ::v17(){vfunc_called(this, "_ZN6S267C63v17Ev");}
void  S267C6 ::v18(){vfunc_called(this, "_ZN6S267C63v18Ev");}
void  S267C6 ::v19(){vfunc_called(this, "_ZN6S267C63v19Ev");}
void  S267C6 ::v20(){vfunc_called(this, "_ZN6S267C63v20Ev");}
void  S267C6 ::v21(){vfunc_called(this, "_ZN6S267C63v21Ev");}
void  S267C6 ::v22(){vfunc_called(this, "_ZN6S267C63v22Ev");}
void  S267C6 ::v23(){vfunc_called(this, "_ZN6S267C63v23Ev");}
void  S267C6 ::v24(){vfunc_called(this, "_ZN6S267C63v24Ev");}
void  S267C6 ::v25(){vfunc_called(this, "_ZN6S267C63v25Ev");}
void  S267C6 ::v26(){vfunc_called(this, "_ZN6S267C63v26Ev");}
void  S267C6 ::v27(){vfunc_called(this, "_ZN6S267C63v27Ev");}
void  S267C6 ::v28(){vfunc_called(this, "_ZN6S267C63v28Ev");}
void  S267C6 ::v29(){vfunc_called(this, "_ZN6S267C63v29Ev");}
void  S267C6 ::v30(){vfunc_called(this, "_ZN6S267C63v30Ev");}
void  S267C6 ::v31(){vfunc_called(this, "_ZN6S267C63v31Ev");}
void  S267C6 ::v32(){vfunc_called(this, "_ZN6S267C63v32Ev");}
void  S267C6 ::v33(){vfunc_called(this, "_ZN6S267C63v33Ev");}
void  S267C6 ::v34(){vfunc_called(this, "_ZN6S267C63v34Ev");}
void  S267C6 ::v35(){vfunc_called(this, "_ZN6S267C63v35Ev");}
void  S267C6 ::v36(){vfunc_called(this, "_ZN6S267C63v36Ev");}
void  S267C6 ::v37(){vfunc_called(this, "_ZN6S267C63v37Ev");}
void  S267C6 ::v38(){vfunc_called(this, "_ZN6S267C63v38Ev");}
void  S267C6 ::v39(){vfunc_called(this, "_ZN6S267C63v39Ev");}
void  S267C6 ::v40(){vfunc_called(this, "_ZN6S267C63v40Ev");}
void  S267C6 ::v41(){vfunc_called(this, "_ZN6S267C63v41Ev");}
void  S267C6 ::v42(){vfunc_called(this, "_ZN6S267C63v42Ev");}
void  S267C6 ::v43(){vfunc_called(this, "_ZN6S267C63v43Ev");}
void  S267C6 ::v44(){vfunc_called(this, "_ZN6S267C63v44Ev");}
void  S267C6 ::v45(){vfunc_called(this, "_ZN6S267C63v45Ev");}
void  S267C6 ::v46(){vfunc_called(this, "_ZN6S267C63v46Ev");}
void  S267C6 ::v47(){vfunc_called(this, "_ZN6S267C63v47Ev");}
void  S267C6 ::v48(){vfunc_called(this, "_ZN6S267C63v48Ev");}
void  S267C6 ::v49(){vfunc_called(this, "_ZN6S267C63v49Ev");}
void  S267C6 ::v50(){vfunc_called(this, "_ZN6S267C63v50Ev");}
void  S267C6 ::v51(){vfunc_called(this, "_ZN6S267C63v51Ev");}
void  S267C6 ::v52(){vfunc_called(this, "_ZN6S267C63v52Ev");}
void  S267C6 ::v53(){vfunc_called(this, "_ZN6S267C63v53Ev");}
void  S267C6 ::v54(){vfunc_called(this, "_ZN6S267C63v54Ev");}
void  S267C6 ::v55(){vfunc_called(this, "_ZN6S267C63v55Ev");}
void  S267C6 ::v56(){vfunc_called(this, "_ZN6S267C63v56Ev");}
void  S267C6 ::v57(){vfunc_called(this, "_ZN6S267C63v57Ev");}
void  S267C6 ::v58(){vfunc_called(this, "_ZN6S267C63v58Ev");}
void  S267C6 ::v59(){vfunc_called(this, "_ZN6S267C63v59Ev");}
void  S267C6 ::v60(){vfunc_called(this, "_ZN6S267C63v60Ev");}
void  S267C6 ::v61(){vfunc_called(this, "_ZN6S267C63v61Ev");}
void  S267C6 ::v62(){vfunc_called(this, "_ZN6S267C63v62Ev");}
void  S267C6 ::v63(){vfunc_called(this, "_ZN6S267C63v63Ev");}
void  S267C6 ::v64(){vfunc_called(this, "_ZN6S267C63v64Ev");}
void  S267C6 ::v65(){vfunc_called(this, "_ZN6S267C63v65Ev");}
void  S267C6 ::v66(){vfunc_called(this, "_ZN6S267C63v66Ev");}
void  S267C6 ::v67(){vfunc_called(this, "_ZN6S267C63v67Ev");}
void  S267C6 ::v68(){vfunc_called(this, "_ZN6S267C63v68Ev");}
void  S267C6 ::v69(){vfunc_called(this, "_ZN6S267C63v69Ev");}
S267C6 ::S267C6(){ note_ctor("S267C6", this);} // tgen

static void Test_S267C6()
{
  extern Class_Descriptor cd_S267C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S267C6, buf);
    S267C6 *dp, &lv = *(dp=new (buf) S267C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S267C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C6)");
    check_field_offset(lv, s267c6f0, ABISELECT(8,4), "S267C6.s267c6f0");
    check_field_offset(lv, s267c6f1, ABISELECT(16,8), "S267C6.s267c6f1");
    check_field_offset(lv, s267c6f2, ABISELECT(24,16), "S267C6.s267c6f2");
    check_field_offset(lv, s267c6f3, ABISELECT(56,32), "S267C6.s267c6f3");
    check_field_offset(lv, s267c6f4, ABISELECT(64,40), "S267C6.s267c6f4");
    check_field_offset(lv, s267c6f5, ABISELECT(72,44), "S267C6.s267c6f5");
    check_field_offset(lv, s267c6f6, ABISELECT(80,52), "S267C6.s267c6f6");
    test_class_info(&lv, &cd_S267C6);
    dp->~S267C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C6(Test_S267C6, "S267C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S267C6C1Ev();
extern void _ZN6S267C6D1Ev();
Name_Map name_map_S267C6[] = {
  NSPAIR(_ZN6S267C6C1Ev),
  NSPAIR(_ZN6S267C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S267C6[];
extern void _ZN6S267C6D1Ev();
extern void _ZN6S267C6D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
static  VTBL_ENTRY vtc_S267C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C6[0]),
  (VTBL_ENTRY)&_ZN6S267C6D1Ev,
  (VTBL_ENTRY)&_ZN6S267C6D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
Class_Descriptor cd_S267C6 = {  "S267C6", // class name
  0,0,//no base classes
  &(vtc_S267C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S267C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S267C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S267C5  : S267C6 {
  int s267c5f0[2];
  void *s267c5f1;
  int s267c5f2[2];
  ::S287C8_nt s267c5f3;
  ::S287C8_nt s267c5f4;
  ::S2121C38 s267c5f5;
  ::S287C8_nt s267c5f6;
  unsigned int s267c5f7:1;
  unsigned int s267c5f8:1;
  unsigned int s267c5f9:1;
  unsigned int s267c5f10:1;
  unsigned int s267c5f11:1;
  int s267c5f12[2];
  virtual  ~S267C5(); // _ZN6S267C5D1Ev
  virtual void  v70(); // _ZN6S267C53v70Ev
  virtual void  v71(); // _ZN6S267C53v71Ev
  virtual void  v72(); // _ZN6S267C53v72Ev
  virtual void  v73(); // _ZN6S267C53v73Ev
  virtual void  v74(); // _ZN6S267C53v74Ev
  virtual void  v75(); // _ZN6S267C53v75Ev
  virtual void  v76(); // _ZN6S267C53v76Ev
  virtual void  v77(); // _ZN6S267C53v77Ev
  virtual void  v78(); // _ZN6S267C53v78Ev
  virtual void  v79(); // _ZN6S267C53v79Ev
  virtual void  v80(); // _ZN6S267C53v80Ev
  virtual void  v81(); // _ZN6S267C53v81Ev
  virtual void  v82(); // _ZN6S267C53v82Ev
  virtual void  v83(); // _ZN6S267C53v83Ev
  virtual void  v84(); // _ZN6S267C53v84Ev
  virtual void  v85(); // _ZN6S267C53v85Ev
  virtual void  v86(); // _ZN6S267C53v86Ev
  virtual void  v87(); // _ZN6S267C53v87Ev
  virtual void  v88(); // _ZN6S267C53v88Ev
  virtual void  v89(); // _ZN6S267C53v89Ev
  virtual void  v90(); // _ZN6S267C53v90Ev
  virtual void  v91(); // _ZN6S267C53v91Ev
  S267C5(); // tgen
};
//SIG(-1 S267C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S267C5 ::~S267C5(){ note_dtor("S267C5", this);}
void  S267C5 ::v70(){vfunc_called(this, "_ZN6S267C53v70Ev");}
void  S267C5 ::v71(){vfunc_called(this, "_ZN6S267C53v71Ev");}
void  S267C5 ::v72(){vfunc_called(this, "_ZN6S267C53v72Ev");}
void  S267C5 ::v73(){vfunc_called(this, "_ZN6S267C53v73Ev");}
void  S267C5 ::v74(){vfunc_called(this, "_ZN6S267C53v74Ev");}
void  S267C5 ::v75(){vfunc_called(this, "_ZN6S267C53v75Ev");}
void  S267C5 ::v76(){vfunc_called(this, "_ZN6S267C53v76Ev");}
void  S267C5 ::v77(){vfunc_called(this, "_ZN6S267C53v77Ev");}
void  S267C5 ::v78(){vfunc_called(this, "_ZN6S267C53v78Ev");}
void  S267C5 ::v79(){vfunc_called(this, "_ZN6S267C53v79Ev");}
void  S267C5 ::v80(){vfunc_called(this, "_ZN6S267C53v80Ev");}
void  S267C5 ::v81(){vfunc_called(this, "_ZN6S267C53v81Ev");}
void  S267C5 ::v82(){vfunc_called(this, "_ZN6S267C53v82Ev");}
void  S267C5 ::v83(){vfunc_called(this, "_ZN6S267C53v83Ev");}
void  S267C5 ::v84(){vfunc_called(this, "_ZN6S267C53v84Ev");}
void  S267C5 ::v85(){vfunc_called(this, "_ZN6S267C53v85Ev");}
void  S267C5 ::v86(){vfunc_called(this, "_ZN6S267C53v86Ev");}
void  S267C5 ::v87(){vfunc_called(this, "_ZN6S267C53v87Ev");}
void  S267C5 ::v88(){vfunc_called(this, "_ZN6S267C53v88Ev");}
void  S267C5 ::v89(){vfunc_called(this, "_ZN6S267C53v89Ev");}
void  S267C5 ::v90(){vfunc_called(this, "_ZN6S267C53v90Ev");}
void  S267C5 ::v91(){vfunc_called(this, "_ZN6S267C53v91Ev");}
S267C5 ::S267C5(){ note_ctor("S267C5", this);} // tgen

static void Test_S267C5()
{
  extern Class_Descriptor cd_S267C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S267C5, buf);
    S267C5 *dp, &lv = *(dp=new (buf) S267C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S267C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C5)");
    check_base_class_offset(lv, (S267C6*), 0, "S267C5");
    check_field_offset(lv, s267c5f0, ABISELECT(96,60), "S267C5.s267c5f0");
    check_field_offset(lv, s267c5f1, ABISELECT(104,68), "S267C5.s267c5f1");
    check_field_offset(lv, s267c5f2, ABISELECT(112,72), "S267C5.s267c5f2");
    check_field_offset(lv, s267c5f3, ABISELECT(120,80), "S267C5.s267c5f3");
    check_field_offset(lv, s267c5f4, ABISELECT(136,92), "S267C5.s267c5f4");
    check_field_offset(lv, s267c5f5, ABISELECT(152,104), "S267C5.s267c5f5");
    check_field_offset(lv, s267c5f6, ABISELECT(160,108), "S267C5.s267c5f6");
    set_bf_and_test(lv, s267c5f7, ABISELECT(176,120), 0, 1, 1, "S267C5");
    set_bf_and_test(lv, s267c5f8, ABISELECT(176,120), 1, 1, 1, "S267C5");
    set_bf_and_test(lv, s267c5f9, ABISELECT(176,120), 2, 1, 1, "S267C5");
    set_bf_and_test(lv, s267c5f10, ABISELECT(176,120), 3, 1, 1, "S267C5");
    set_bf_and_test(lv, s267c5f11, ABISELECT(176,120), 4, 1, 1, "S267C5");
    check_field_offset(lv, s267c5f12, ABISELECT(180,124), "S267C5.s267c5f12");
    test_class_info(&lv, &cd_S267C5);
    dp->~S267C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C5(Test_S267C5, "S267C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S267C5C1Ev();
extern void _ZN6S267C5D1Ev();
Name_Map name_map_S267C5[] = {
  NSPAIR(_ZN6S267C5C1Ev),
  NSPAIR(_ZN6S267C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
static Base_Class bases_S267C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S267C5[];
extern void _ZN6S267C5D1Ev();
extern void _ZN6S267C5D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
static  VTBL_ENTRY vtc_S267C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C5[0]),
  (VTBL_ENTRY)&_ZN6S267C5D1Ev,
  (VTBL_ENTRY)&_ZN6S267C5D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
};
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
Class_Descriptor cd_S267C5 = {  "S267C5", // class name
  bases_S267C5, 1,
  &(vtc_S267C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S267C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S267C4  : S267C5 {
  unsigned int s267c4f0:1;
  unsigned int s267c4f1:1;
  unsigned int s267c4f2:1;
  ::S3350C17 s267c4f3;
  ::S3350C11 s267c4f4;
  ::S3350C5_nt s267c4f5;
  ::S287C27 s267c4f6;
  int s267c4f7[3];
  virtual  ~S267C4(); // _ZN6S267C4D1Ev
  virtual void  v92(); // _ZN6S267C43v92Ev
  virtual void  v93(); // _ZN6S267C43v93Ev
  virtual void  v94(); // _ZN6S267C43v94Ev
  virtual void  v95(); // _ZN6S267C43v95Ev
  virtual void  v96(); // _ZN6S267C43v96Ev
  virtual void  v97(); // _ZN6S267C43v97Ev
  virtual void  v98(); // _ZN6S267C43v98Ev
  virtual void  v99(); // _ZN6S267C43v99Ev
  virtual void  v100(); // _ZN6S267C44v100Ev
  virtual void  v101(); // _ZN6S267C44v101Ev
  virtual void  v102(); // _ZN6S267C44v102Ev
  virtual void  v103(); // _ZN6S267C44v103Ev
  virtual void  v104(); // _ZN6S267C44v104Ev
  virtual void  v105(); // _ZN6S267C44v105Ev
  virtual void  v106(); // _ZN6S267C44v106Ev
  virtual void  v107(); // _ZN6S267C44v107Ev
  virtual void  v108(); // _ZN6S267C44v108Ev
  virtual void  v109(); // _ZN6S267C44v109Ev
  virtual void  v110(); // _ZN6S267C44v110Ev
  virtual void  v111(); // _ZN6S267C44v111Ev
  S267C4(); // tgen
};
//SIG(-1 S267C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S267C4 ::~S267C4(){ note_dtor("S267C4", this);}
void  S267C4 ::v92(){vfunc_called(this, "_ZN6S267C43v92Ev");}
void  S267C4 ::v93(){vfunc_called(this, "_ZN6S267C43v93Ev");}
void  S267C4 ::v94(){vfunc_called(this, "_ZN6S267C43v94Ev");}
void  S267C4 ::v95(){vfunc_called(this, "_ZN6S267C43v95Ev");}
void  S267C4 ::v96(){vfunc_called(this, "_ZN6S267C43v96Ev");}
void  S267C4 ::v97(){vfunc_called(this, "_ZN6S267C43v97Ev");}
void  S267C4 ::v98(){vfunc_called(this, "_ZN6S267C43v98Ev");}
void  S267C4 ::v99(){vfunc_called(this, "_ZN6S267C43v99Ev");}
void  S267C4 ::v100(){vfunc_called(this, "_ZN6S267C44v100Ev");}
void  S267C4 ::v101(){vfunc_called(this, "_ZN6S267C44v101Ev");}
void  S267C4 ::v102(){vfunc_called(this, "_ZN6S267C44v102Ev");}
void  S267C4 ::v103(){vfunc_called(this, "_ZN6S267C44v103Ev");}
void  S267C4 ::v104(){vfunc_called(this, "_ZN6S267C44v104Ev");}
void  S267C4 ::v105(){vfunc_called(this, "_ZN6S267C44v105Ev");}
void  S267C4 ::v106(){vfunc_called(this, "_ZN6S267C44v106Ev");}
void  S267C4 ::v107(){vfunc_called(this, "_ZN6S267C44v107Ev");}
void  S267C4 ::v108(){vfunc_called(this, "_ZN6S267C44v108Ev");}
void  S267C4 ::v109(){vfunc_called(this, "_ZN6S267C44v109Ev");}
void  S267C4 ::v110(){vfunc_called(this, "_ZN6S267C44v110Ev");}
void  S267C4 ::v111(){vfunc_called(this, "_ZN6S267C44v111Ev");}
S267C4 ::S267C4(){ note_ctor("S267C4", this);} // tgen

static void Test_S267C4()
{
  extern Class_Descriptor cd_S267C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S267C4, buf);
    S267C4 *dp, &lv = *(dp=new (buf) S267C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S267C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C4)");
    check_base_class_offset(lv, (S267C6*)(S267C5*), 0, "S267C4");
    check_base_class_offset(lv, (S267C5*), 0, "S267C4");
    set_bf_and_test(lv, s267c4f0, ABISELECT(188,132), 0, 1, 1, "S267C4");
    set_bf_and_test(lv, s267c4f1, ABISELECT(188,132), 1, 1, 1, "S267C4");
    set_bf_and_test(lv, s267c4f2, ABISELECT(188,132), 2, 1, 1, "S267C4");
    check_field_offset(lv, s267c4f3, ABISELECT(192,136), "S267C4.s267c4f3");
    check_field_offset(lv, s267c4f4, ABISELECT(208,148), "S267C4.s267c4f4");
    check_field_offset(lv, s267c4f5, ABISELECT(224,160), "S267C4.s267c4f5");
    check_field_offset(lv, s267c4f6, ABISELECT(240,172), "S267C4.s267c4f6");
    check_field_offset(lv, s267c4f7, ABISELECT(256,184), "S267C4.s267c4f7");
    test_class_info(&lv, &cd_S267C4);
    dp->~S267C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C4(Test_S267C4, "S267C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S267C4C1Ev();
extern void _ZN6S267C4D1Ev();
Name_Map name_map_S267C4[] = {
  NSPAIR(_ZN6S267C4C1Ev),
  NSPAIR(_ZN6S267C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
extern Class_Descriptor cd_S267C5;
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
static Base_Class bases_S267C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S267C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S267C4[];
extern void _ZN6S267C4D1Ev();
extern void _ZN6S267C4D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
extern void _ZN6S267C43v92Ev();
extern void _ZN6S267C43v93Ev();
extern void _ZN6S267C43v94Ev();
extern void _ZN6S267C43v95Ev();
extern void _ZN6S267C43v96Ev();
extern void _ZN6S267C43v97Ev();
extern void _ZN6S267C43v98Ev();
extern void _ZN6S267C43v99Ev();
extern void _ZN6S267C44v100Ev();
extern void _ZN6S267C44v101Ev();
extern void _ZN6S267C44v102Ev();
extern void _ZN6S267C44v103Ev();
extern void _ZN6S267C44v104Ev();
extern void _ZN6S267C44v105Ev();
extern void _ZN6S267C44v106Ev();
extern void _ZN6S267C44v107Ev();
extern void _ZN6S267C44v108Ev();
extern void _ZN6S267C44v109Ev();
extern void _ZN6S267C44v110Ev();
extern void _ZN6S267C44v111Ev();
static  VTBL_ENTRY vtc_S267C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C4[0]),
  (VTBL_ENTRY)&_ZN6S267C4D1Ev,
  (VTBL_ENTRY)&_ZN6S267C4D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
  (VTBL_ENTRY)&_ZN6S267C43v92Ev,
  (VTBL_ENTRY)&_ZN6S267C43v93Ev,
  (VTBL_ENTRY)&_ZN6S267C43v94Ev,
  (VTBL_ENTRY)&_ZN6S267C43v95Ev,
  (VTBL_ENTRY)&_ZN6S267C43v96Ev,
  (VTBL_ENTRY)&_ZN6S267C43v97Ev,
  (VTBL_ENTRY)&_ZN6S267C43v98Ev,
  (VTBL_ENTRY)&_ZN6S267C43v99Ev,
  (VTBL_ENTRY)&_ZN6S267C44v100Ev,
  (VTBL_ENTRY)&_ZN6S267C44v101Ev,
  (VTBL_ENTRY)&_ZN6S267C44v102Ev,
  (VTBL_ENTRY)&_ZN6S267C44v103Ev,
  (VTBL_ENTRY)&_ZN6S267C44v104Ev,
  (VTBL_ENTRY)&_ZN6S267C44v105Ev,
  (VTBL_ENTRY)&_ZN6S267C44v106Ev,
  (VTBL_ENTRY)&_ZN6S267C44v107Ev,
  (VTBL_ENTRY)&_ZN6S267C44v108Ev,
  (VTBL_ENTRY)&_ZN6S267C44v109Ev,
  (VTBL_ENTRY)&_ZN6S267C44v110Ev,
  (VTBL_ENTRY)&_ZN6S267C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S267C4[];
extern  VTBL_ENTRY _ZTV6S267C4[];
Class_Descriptor cd_S267C4 = {  "S267C4", // class name
  bases_S267C4, 2,
  &(vtc_S267C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S267C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S267C3  : S267C4 {
  void *s267c3f0[2];
  int s267c3f1[4];
  unsigned int s267c3f2:1;
  unsigned int s267c3f3:1;
  unsigned int s267c3f4:1;
  char s267c3f5;
  int s267c3f6;
  unsigned int s267c3f7:1;
  ::S287C23 s267c3f8;
  virtual  ~S267C3(); // _ZN6S267C3D1Ev
  virtual void  v112(); // _ZN6S267C34v112Ev
  virtual void  v113(); // _ZN6S267C34v113Ev
  virtual void  v114(); // _ZN6S267C34v114Ev
  virtual void  v115(); // _ZN6S267C34v115Ev
  virtual void  v116(); // _ZN6S267C34v116Ev
  virtual void  v117(); // _ZN6S267C34v117Ev
  virtual void  v118(); // _ZN6S267C34v118Ev
  virtual void  v119(); // _ZN6S267C34v119Ev
  virtual void  v120(); // _ZN6S267C34v120Ev
  virtual void  v121(); // _ZN6S267C34v121Ev
  virtual void  v122(); // _ZN6S267C34v122Ev
  virtual void  v123(); // _ZN6S267C34v123Ev
  virtual void  v124(); // _ZN6S267C34v124Ev
  virtual void  v125(); // _ZN6S267C34v125Ev
  S267C3(); // tgen
};
//SIG(-1 S267C3) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S267C3 ::~S267C3(){ note_dtor("S267C3", this);}
void  S267C3 ::v112(){vfunc_called(this, "_ZN6S267C34v112Ev");}
void  S267C3 ::v113(){vfunc_called(this, "_ZN6S267C34v113Ev");}
void  S267C3 ::v114(){vfunc_called(this, "_ZN6S267C34v114Ev");}
void  S267C3 ::v115(){vfunc_called(this, "_ZN6S267C34v115Ev");}
void  S267C3 ::v116(){vfunc_called(this, "_ZN6S267C34v116Ev");}
void  S267C3 ::v117(){vfunc_called(this, "_ZN6S267C34v117Ev");}
void  S267C3 ::v118(){vfunc_called(this, "_ZN6S267C34v118Ev");}
void  S267C3 ::v119(){vfunc_called(this, "_ZN6S267C34v119Ev");}
void  S267C3 ::v120(){vfunc_called(this, "_ZN6S267C34v120Ev");}
void  S267C3 ::v121(){vfunc_called(this, "_ZN6S267C34v121Ev");}
void  S267C3 ::v122(){vfunc_called(this, "_ZN6S267C34v122Ev");}
void  S267C3 ::v123(){vfunc_called(this, "_ZN6S267C34v123Ev");}
void  S267C3 ::v124(){vfunc_called(this, "_ZN6S267C34v124Ev");}
void  S267C3 ::v125(){vfunc_called(this, "_ZN6S267C34v125Ev");}
S267C3 ::S267C3(){ note_ctor("S267C3", this);} // tgen

static void Test_S267C3()
{
  extern Class_Descriptor cd_S267C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S267C3, buf);
    S267C3 *dp, &lv = *(dp=new (buf) S267C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S267C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C3)");
    check_base_class_offset(lv, (S267C6*)(S267C5*)(S267C4*), 0, "S267C3");
    check_base_class_offset(lv, (S267C5*)(S267C4*), 0, "S267C3");
    check_base_class_offset(lv, (S267C4*), 0, "S267C3");
    check_field_offset(lv, s267c3f0, ABISELECT(272,196), "S267C3.s267c3f0");
    check_field_offset(lv, s267c3f1, ABISELECT(288,204), "S267C3.s267c3f1");
    set_bf_and_test(lv, s267c3f2, ABISELECT(304,220), 0, 1, 1, "S267C3");
    set_bf_and_test(lv, s267c3f3, ABISELECT(304,220), 1, 1, 1, "S267C3");
    set_bf_and_test(lv, s267c3f4, ABISELECT(304,220), 2, 1, 1, "S267C3");
    check_field_offset(lv, s267c3f5, ABISELECT(305,221), "S267C3.s267c3f5");
    check_field_offset(lv, s267c3f6, ABISELECT(308,224), "S267C3.s267c3f6");
    set_bf_and_test(lv, s267c3f7, ABISELECT(312,228), 0, 1, 1, "S267C3");
    check_field_offset(lv, s267c3f8, ABISELECT(320,232), "S267C3.s267c3f8");
    test_class_info(&lv, &cd_S267C3);
    dp->~S267C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C3(Test_S267C3, "S267C3", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S267C3C1Ev();
extern void _ZN6S267C3D1Ev();
Name_Map name_map_S267C3[] = {
  NSPAIR(_ZN6S267C3C1Ev),
  NSPAIR(_ZN6S267C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
extern Class_Descriptor cd_S267C5;
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
extern Class_Descriptor cd_S267C4;
extern VTBL_ENTRY _ZTI6S267C4[];
extern  VTBL_ENTRY _ZTV6S267C4[];
static Base_Class bases_S267C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S267C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S267C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S267C3[];
extern void _ZN6S267C3D1Ev();
extern void _ZN6S267C3D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
extern void _ZN6S267C43v92Ev();
extern void _ZN6S267C43v93Ev();
extern void _ZN6S267C43v94Ev();
extern void _ZN6S267C43v95Ev();
extern void _ZN6S267C43v96Ev();
extern void _ZN6S267C43v97Ev();
extern void _ZN6S267C43v98Ev();
extern void _ZN6S267C43v99Ev();
extern void _ZN6S267C44v100Ev();
extern void _ZN6S267C44v101Ev();
extern void _ZN6S267C44v102Ev();
extern void _ZN6S267C44v103Ev();
extern void _ZN6S267C44v104Ev();
extern void _ZN6S267C44v105Ev();
extern void _ZN6S267C44v106Ev();
extern void _ZN6S267C44v107Ev();
extern void _ZN6S267C44v108Ev();
extern void _ZN6S267C44v109Ev();
extern void _ZN6S267C44v110Ev();
extern void _ZN6S267C44v111Ev();
extern void _ZN6S267C34v112Ev();
extern void _ZN6S267C34v113Ev();
extern void _ZN6S267C34v114Ev();
extern void _ZN6S267C34v115Ev();
extern void _ZN6S267C34v116Ev();
extern void _ZN6S267C34v117Ev();
extern void _ZN6S267C34v118Ev();
extern void _ZN6S267C34v119Ev();
extern void _ZN6S267C34v120Ev();
extern void _ZN6S267C34v121Ev();
extern void _ZN6S267C34v122Ev();
extern void _ZN6S267C34v123Ev();
extern void _ZN6S267C34v124Ev();
extern void _ZN6S267C34v125Ev();
static  VTBL_ENTRY vtc_S267C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C3[0]),
  (VTBL_ENTRY)&_ZN6S267C3D1Ev,
  (VTBL_ENTRY)&_ZN6S267C3D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
  (VTBL_ENTRY)&_ZN6S267C43v92Ev,
  (VTBL_ENTRY)&_ZN6S267C43v93Ev,
  (VTBL_ENTRY)&_ZN6S267C43v94Ev,
  (VTBL_ENTRY)&_ZN6S267C43v95Ev,
  (VTBL_ENTRY)&_ZN6S267C43v96Ev,
  (VTBL_ENTRY)&_ZN6S267C43v97Ev,
  (VTBL_ENTRY)&_ZN6S267C43v98Ev,
  (VTBL_ENTRY)&_ZN6S267C43v99Ev,
  (VTBL_ENTRY)&_ZN6S267C44v100Ev,
  (VTBL_ENTRY)&_ZN6S267C44v101Ev,
  (VTBL_ENTRY)&_ZN6S267C44v102Ev,
  (VTBL_ENTRY)&_ZN6S267C44v103Ev,
  (VTBL_ENTRY)&_ZN6S267C44v104Ev,
  (VTBL_ENTRY)&_ZN6S267C44v105Ev,
  (VTBL_ENTRY)&_ZN6S267C44v106Ev,
  (VTBL_ENTRY)&_ZN6S267C44v107Ev,
  (VTBL_ENTRY)&_ZN6S267C44v108Ev,
  (VTBL_ENTRY)&_ZN6S267C44v109Ev,
  (VTBL_ENTRY)&_ZN6S267C44v110Ev,
  (VTBL_ENTRY)&_ZN6S267C44v111Ev,
  (VTBL_ENTRY)&_ZN6S267C34v112Ev,
  (VTBL_ENTRY)&_ZN6S267C34v113Ev,
  (VTBL_ENTRY)&_ZN6S267C34v114Ev,
  (VTBL_ENTRY)&_ZN6S267C34v115Ev,
  (VTBL_ENTRY)&_ZN6S267C34v116Ev,
  (VTBL_ENTRY)&_ZN6S267C34v117Ev,
  (VTBL_ENTRY)&_ZN6S267C34v118Ev,
  (VTBL_ENTRY)&_ZN6S267C34v119Ev,
  (VTBL_ENTRY)&_ZN6S267C34v120Ev,
  (VTBL_ENTRY)&_ZN6S267C34v121Ev,
  (VTBL_ENTRY)&_ZN6S267C34v122Ev,
  (VTBL_ENTRY)&_ZN6S267C34v123Ev,
  (VTBL_ENTRY)&_ZN6S267C34v124Ev,
  (VTBL_ENTRY)&_ZN6S267C34v125Ev,
};
extern VTBL_ENTRY _ZTI6S267C3[];
extern  VTBL_ENTRY _ZTV6S267C3[];
Class_Descriptor cd_S267C3 = {  "S267C3", // class name
  bases_S267C3, 3,
  &(vtc_S267C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S267C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C3),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S267C2  : S267C3 {
  void *s267c2f0[2];
  ::S287C8_nt s267c2f1;
  unsigned int s267c2f2:1;
  unsigned int s267c2f3:1;
  ::S3350C21_nt s267c2f4;
  virtual  ~S267C2(); // _ZN6S267C2D1Ev
  virtual void  v126(); // _ZN6S267C24v126Ev
  virtual void  v127(); // _ZN6S267C24v127Ev
  virtual void  v128(); // _ZN6S267C24v128Ev
  virtual void  v129(); // _ZN6S267C24v129Ev
  virtual void  v130(); // _ZN6S267C24v130Ev
  virtual void  v131(); // _ZN6S267C24v131Ev
  virtual void  v132(); // _ZN6S267C24v132Ev
  virtual void  v133(); // _ZN6S267C24v133Ev
  virtual void  v134(); // _ZN6S267C24v134Ev
  virtual void  v135(); // _ZN6S267C24v135Ev
  virtual void  v136(); // _ZN6S267C24v136Ev
  S267C2(); // tgen
};
//SIG(-1 S267C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S267C2 ::~S267C2(){ note_dtor("S267C2", this);}
void  S267C2 ::v126(){vfunc_called(this, "_ZN6S267C24v126Ev");}
void  S267C2 ::v127(){vfunc_called(this, "_ZN6S267C24v127Ev");}
void  S267C2 ::v128(){vfunc_called(this, "_ZN6S267C24v128Ev");}
void  S267C2 ::v129(){vfunc_called(this, "_ZN6S267C24v129Ev");}
void  S267C2 ::v130(){vfunc_called(this, "_ZN6S267C24v130Ev");}
void  S267C2 ::v131(){vfunc_called(this, "_ZN6S267C24v131Ev");}
void  S267C2 ::v132(){vfunc_called(this, "_ZN6S267C24v132Ev");}
void  S267C2 ::v133(){vfunc_called(this, "_ZN6S267C24v133Ev");}
void  S267C2 ::v134(){vfunc_called(this, "_ZN6S267C24v134Ev");}
void  S267C2 ::v135(){vfunc_called(this, "_ZN6S267C24v135Ev");}
void  S267C2 ::v136(){vfunc_called(this, "_ZN6S267C24v136Ev");}
S267C2 ::S267C2(){ note_ctor("S267C2", this);} // tgen

static void Test_S267C2()
{
  extern Class_Descriptor cd_S267C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S267C2, buf);
    S267C2 *dp, &lv = *(dp=new (buf) S267C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S267C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C2)");
    check_base_class_offset(lv, (S267C6*)(S267C5*)(S267C4*)(S267C3*), 0, "S267C2");
    check_base_class_offset(lv, (S267C5*)(S267C4*)(S267C3*), 0, "S267C2");
    check_base_class_offset(lv, (S267C4*)(S267C3*), 0, "S267C2");
    check_base_class_offset(lv, (S267C3*), 0, "S267C2");
    check_field_offset(lv, s267c2f0, ABISELECT(336,244), "S267C2.s267c2f0");
    check_field_offset(lv, s267c2f1, ABISELECT(352,252), "S267C2.s267c2f1");
    set_bf_and_test(lv, s267c2f2, ABISELECT(368,264), 0, 1, 1, "S267C2");
    set_bf_and_test(lv, s267c2f3, ABISELECT(368,264), 1, 1, 1, "S267C2");
    check_field_offset(lv, s267c2f4, ABISELECT(376,268), "S267C2.s267c2f4");
    test_class_info(&lv, &cd_S267C2);
    dp->~S267C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C2(Test_S267C2, "S267C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN6S267C2C1Ev();
extern void _ZN6S267C2D1Ev();
Name_Map name_map_S267C2[] = {
  NSPAIR(_ZN6S267C2C1Ev),
  NSPAIR(_ZN6S267C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
extern Class_Descriptor cd_S267C5;
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
extern Class_Descriptor cd_S267C4;
extern VTBL_ENTRY _ZTI6S267C4[];
extern  VTBL_ENTRY _ZTV6S267C4[];
extern Class_Descriptor cd_S267C3;
extern VTBL_ENTRY _ZTI6S267C3[];
extern  VTBL_ENTRY _ZTV6S267C3[];
static Base_Class bases_S267C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S267C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S267C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S267C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S267C2[];
extern void _ZN6S267C2D1Ev();
extern void _ZN6S267C2D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
extern void _ZN6S267C43v92Ev();
extern void _ZN6S267C43v93Ev();
extern void _ZN6S267C43v94Ev();
extern void _ZN6S267C43v95Ev();
extern void _ZN6S267C43v96Ev();
extern void _ZN6S267C43v97Ev();
extern void _ZN6S267C43v98Ev();
extern void _ZN6S267C43v99Ev();
extern void _ZN6S267C44v100Ev();
extern void _ZN6S267C44v101Ev();
extern void _ZN6S267C44v102Ev();
extern void _ZN6S267C44v103Ev();
extern void _ZN6S267C44v104Ev();
extern void _ZN6S267C44v105Ev();
extern void _ZN6S267C44v106Ev();
extern void _ZN6S267C44v107Ev();
extern void _ZN6S267C44v108Ev();
extern void _ZN6S267C44v109Ev();
extern void _ZN6S267C44v110Ev();
extern void _ZN6S267C44v111Ev();
extern void _ZN6S267C34v112Ev();
extern void _ZN6S267C34v113Ev();
extern void _ZN6S267C34v114Ev();
extern void _ZN6S267C34v115Ev();
extern void _ZN6S267C34v116Ev();
extern void _ZN6S267C34v117Ev();
extern void _ZN6S267C34v118Ev();
extern void _ZN6S267C34v119Ev();
extern void _ZN6S267C34v120Ev();
extern void _ZN6S267C34v121Ev();
extern void _ZN6S267C34v122Ev();
extern void _ZN6S267C34v123Ev();
extern void _ZN6S267C34v124Ev();
extern void _ZN6S267C34v125Ev();
extern void _ZN6S267C24v126Ev();
extern void _ZN6S267C24v127Ev();
extern void _ZN6S267C24v128Ev();
extern void _ZN6S267C24v129Ev();
extern void _ZN6S267C24v130Ev();
extern void _ZN6S267C24v131Ev();
extern void _ZN6S267C24v132Ev();
extern void _ZN6S267C24v133Ev();
extern void _ZN6S267C24v134Ev();
extern void _ZN6S267C24v135Ev();
extern void _ZN6S267C24v136Ev();
static  VTBL_ENTRY vtc_S267C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C2[0]),
  (VTBL_ENTRY)&_ZN6S267C2D1Ev,
  (VTBL_ENTRY)&_ZN6S267C2D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
  (VTBL_ENTRY)&_ZN6S267C43v92Ev,
  (VTBL_ENTRY)&_ZN6S267C43v93Ev,
  (VTBL_ENTRY)&_ZN6S267C43v94Ev,
  (VTBL_ENTRY)&_ZN6S267C43v95Ev,
  (VTBL_ENTRY)&_ZN6S267C43v96Ev,
  (VTBL_ENTRY)&_ZN6S267C43v97Ev,
  (VTBL_ENTRY)&_ZN6S267C43v98Ev,
  (VTBL_ENTRY)&_ZN6S267C43v99Ev,
  (VTBL_ENTRY)&_ZN6S267C44v100Ev,
  (VTBL_ENTRY)&_ZN6S267C44v101Ev,
  (VTBL_ENTRY)&_ZN6S267C44v102Ev,
  (VTBL_ENTRY)&_ZN6S267C44v103Ev,
  (VTBL_ENTRY)&_ZN6S267C44v104Ev,
  (VTBL_ENTRY)&_ZN6S267C44v105Ev,
  (VTBL_ENTRY)&_ZN6S267C44v106Ev,
  (VTBL_ENTRY)&_ZN6S267C44v107Ev,
  (VTBL_ENTRY)&_ZN6S267C44v108Ev,
  (VTBL_ENTRY)&_ZN6S267C44v109Ev,
  (VTBL_ENTRY)&_ZN6S267C44v110Ev,
  (VTBL_ENTRY)&_ZN6S267C44v111Ev,
  (VTBL_ENTRY)&_ZN6S267C34v112Ev,
  (VTBL_ENTRY)&_ZN6S267C34v113Ev,
  (VTBL_ENTRY)&_ZN6S267C34v114Ev,
  (VTBL_ENTRY)&_ZN6S267C34v115Ev,
  (VTBL_ENTRY)&_ZN6S267C34v116Ev,
  (VTBL_ENTRY)&_ZN6S267C34v117Ev,
  (VTBL_ENTRY)&_ZN6S267C34v118Ev,
  (VTBL_ENTRY)&_ZN6S267C34v119Ev,
  (VTBL_ENTRY)&_ZN6S267C34v120Ev,
  (VTBL_ENTRY)&_ZN6S267C34v121Ev,
  (VTBL_ENTRY)&_ZN6S267C34v122Ev,
  (VTBL_ENTRY)&_ZN6S267C34v123Ev,
  (VTBL_ENTRY)&_ZN6S267C34v124Ev,
  (VTBL_ENTRY)&_ZN6S267C34v125Ev,
  (VTBL_ENTRY)&_ZN6S267C24v126Ev,
  (VTBL_ENTRY)&_ZN6S267C24v127Ev,
  (VTBL_ENTRY)&_ZN6S267C24v128Ev,
  (VTBL_ENTRY)&_ZN6S267C24v129Ev,
  (VTBL_ENTRY)&_ZN6S267C24v130Ev,
  (VTBL_ENTRY)&_ZN6S267C24v131Ev,
  (VTBL_ENTRY)&_ZN6S267C24v132Ev,
  (VTBL_ENTRY)&_ZN6S267C24v133Ev,
  (VTBL_ENTRY)&_ZN6S267C24v134Ev,
  (VTBL_ENTRY)&_ZN6S267C24v135Ev,
  (VTBL_ENTRY)&_ZN6S267C24v136Ev,
};
extern VTBL_ENTRY _ZTI6S267C2[];
extern  VTBL_ENTRY _ZTV6S267C2[];
Class_Descriptor cd_S267C2 = {  "S267C2", // class name
  bases_S267C2, 4,
  &(vtc_S267C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI6S267C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C2),135, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S267C1  : S267C2 {
  ::S113C26_nt s267c1f0;
  virtual  ~S267C1(); // _ZN6S267C1D1Ev
  virtual void  v1(); // _ZN6S267C12v1Ev
  virtual void  v2(); // _ZN6S267C12v2Ev
  virtual void  v3(); // _ZN6S267C12v3Ev
  virtual void  v4(); // _ZN6S267C12v4Ev
  virtual void  v5(); // _ZN6S267C12v5Ev
  S267C1(); // tgen
};
//SIG(1 S267C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2 v3 v4 v5 FC24{ BC25{ m FC14 Fp Fi}}}


 S267C1 ::~S267C1(){ note_dtor("S267C1", this);}
void  S267C1 ::v1(){vfunc_called(this, "_ZN6S267C12v1Ev");}
void  S267C1 ::v2(){vfunc_called(this, "_ZN6S267C12v2Ev");}
void  S267C1 ::v3(){vfunc_called(this, "_ZN6S267C12v3Ev");}
void  S267C1 ::v4(){vfunc_called(this, "_ZN6S267C12v4Ev");}
void  S267C1 ::v5(){vfunc_called(this, "_ZN6S267C12v5Ev");}
S267C1 ::S267C1(){ note_ctor("S267C1", this);} // tgen

static void Test_S267C1()
{
  extern Class_Descriptor cd_S267C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,76)];
    init_test(&cd_S267C1, buf);
    S267C1 *dp, &lv = *(dp=new (buf) S267C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,300), "sizeof(S267C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S267C1)");
    check_base_class_offset(lv, (S267C6*)(S267C5*)(S267C4*)(S267C3*)(S267C2*), 0, "S267C1");
    check_base_class_offset(lv, (S267C5*)(S267C4*)(S267C3*)(S267C2*), 0, "S267C1");
    check_base_class_offset(lv, (S267C4*)(S267C3*)(S267C2*), 0, "S267C1");
    check_base_class_offset(lv, (S267C3*)(S267C2*), 0, "S267C1");
    check_base_class_offset(lv, (S267C2*), 0, "S267C1");
    check_field_offset(lv, s267c1f0, ABISELECT(392,280), "S267C1.s267c1f0");
    test_class_info(&lv, &cd_S267C1);
    dp->~S267C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS267C1(Test_S267C1, "S267C1", ABISELECT(424,300));

#else // __cplusplus

extern void _ZN6S267C1C1Ev();
extern void _ZN6S267C1D1Ev();
Name_Map name_map_S267C1[] = {
  NSPAIR(_ZN6S267C1C1Ev),
  NSPAIR(_ZN6S267C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S267C6;
extern VTBL_ENTRY _ZTI6S267C6[];
extern  VTBL_ENTRY _ZTV6S267C6[];
extern Class_Descriptor cd_S267C5;
extern VTBL_ENTRY _ZTI6S267C5[];
extern  VTBL_ENTRY _ZTV6S267C5[];
extern Class_Descriptor cd_S267C4;
extern VTBL_ENTRY _ZTI6S267C4[];
extern  VTBL_ENTRY _ZTV6S267C4[];
extern Class_Descriptor cd_S267C3;
extern VTBL_ENTRY _ZTI6S267C3[];
extern  VTBL_ENTRY _ZTV6S267C3[];
extern Class_Descriptor cd_S267C2;
extern VTBL_ENTRY _ZTI6S267C2[];
extern  VTBL_ENTRY _ZTV6S267C2[];
static Base_Class bases_S267C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S267C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S267C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S267C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S267C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S267C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S267C1[];
extern void _ZN6S267C1D1Ev();
extern void _ZN6S267C1D0Ev();
extern void _ZN6S267C62v6Ev();
extern void _ZN6S267C62v7Ev();
extern void _ZN6S267C62v8Ev();
extern void _ZN6S267C62v9Ev();
extern void _ZN6S267C63v10Ev();
extern void _ZN6S267C63v11Ev();
extern void _ZN6S267C63v12Ev();
extern void _ZN6S267C63v13Ev();
extern void _ZN6S267C63v14Ev();
extern void _ZN6S267C63v15Ev();
extern void _ZN6S267C63v16Ev();
extern void _ZN6S267C63v17Ev();
extern void _ZN6S267C63v18Ev();
extern void _ZN6S267C63v19Ev();
extern void _ZN6S267C63v20Ev();
extern void _ZN6S267C63v21Ev();
extern void _ZN6S267C63v22Ev();
extern void _ZN6S267C63v23Ev();
extern void _ZN6S267C63v24Ev();
extern void _ZN6S267C63v25Ev();
extern void _ZN6S267C63v26Ev();
extern void _ZN6S267C63v27Ev();
extern void _ZN6S267C63v28Ev();
extern void _ZN6S267C63v29Ev();
extern void _ZN6S267C63v30Ev();
extern void _ZN6S267C63v31Ev();
extern void _ZN6S267C63v32Ev();
extern void _ZN6S267C63v33Ev();
extern void _ZN6S267C63v34Ev();
extern void _ZN6S267C63v35Ev();
extern void _ZN6S267C63v36Ev();
extern void _ZN6S267C63v37Ev();
extern void _ZN6S267C63v38Ev();
extern void _ZN6S267C63v39Ev();
extern void _ZN6S267C63v40Ev();
extern void _ZN6S267C63v41Ev();
extern void _ZN6S267C63v42Ev();
extern void _ZN6S267C63v43Ev();
extern void _ZN6S267C63v44Ev();
extern void _ZN6S267C63v45Ev();
extern void _ZN6S267C63v46Ev();
extern void _ZN6S267C63v47Ev();
extern void _ZN6S267C63v48Ev();
extern void _ZN6S267C63v49Ev();
extern void _ZN6S267C63v50Ev();
extern void _ZN6S267C63v51Ev();
extern void _ZN6S267C63v52Ev();
extern void _ZN6S267C63v53Ev();
extern void _ZN6S267C63v54Ev();
extern void _ZN6S267C63v55Ev();
extern void _ZN6S267C63v56Ev();
extern void _ZN6S267C63v57Ev();
extern void _ZN6S267C63v58Ev();
extern void _ZN6S267C63v59Ev();
extern void _ZN6S267C63v60Ev();
extern void _ZN6S267C63v61Ev();
extern void _ZN6S267C63v62Ev();
extern void _ZN6S267C63v63Ev();
extern void _ZN6S267C63v64Ev();
extern void _ZN6S267C63v65Ev();
extern void _ZN6S267C63v66Ev();
extern void _ZN6S267C63v67Ev();
extern void _ZN6S267C63v68Ev();
extern void _ZN6S267C63v69Ev();
extern void _ZN6S267C53v70Ev();
extern void _ZN6S267C53v71Ev();
extern void _ZN6S267C53v72Ev();
extern void _ZN6S267C53v73Ev();
extern void _ZN6S267C53v74Ev();
extern void _ZN6S267C53v75Ev();
extern void _ZN6S267C53v76Ev();
extern void _ZN6S267C53v77Ev();
extern void _ZN6S267C53v78Ev();
extern void _ZN6S267C53v79Ev();
extern void _ZN6S267C53v80Ev();
extern void _ZN6S267C53v81Ev();
extern void _ZN6S267C53v82Ev();
extern void _ZN6S267C53v83Ev();
extern void _ZN6S267C53v84Ev();
extern void _ZN6S267C53v85Ev();
extern void _ZN6S267C53v86Ev();
extern void _ZN6S267C53v87Ev();
extern void _ZN6S267C53v88Ev();
extern void _ZN6S267C53v89Ev();
extern void _ZN6S267C53v90Ev();
extern void _ZN6S267C53v91Ev();
extern void _ZN6S267C43v92Ev();
extern void _ZN6S267C43v93Ev();
extern void _ZN6S267C43v94Ev();
extern void _ZN6S267C43v95Ev();
extern void _ZN6S267C43v96Ev();
extern void _ZN6S267C43v97Ev();
extern void _ZN6S267C43v98Ev();
extern void _ZN6S267C43v99Ev();
extern void _ZN6S267C44v100Ev();
extern void _ZN6S267C44v101Ev();
extern void _ZN6S267C44v102Ev();
extern void _ZN6S267C44v103Ev();
extern void _ZN6S267C44v104Ev();
extern void _ZN6S267C44v105Ev();
extern void _ZN6S267C44v106Ev();
extern void _ZN6S267C44v107Ev();
extern void _ZN6S267C44v108Ev();
extern void _ZN6S267C44v109Ev();
extern void _ZN6S267C44v110Ev();
extern void _ZN6S267C44v111Ev();
extern void _ZN6S267C34v112Ev();
extern void _ZN6S267C34v113Ev();
extern void _ZN6S267C34v114Ev();
extern void _ZN6S267C34v115Ev();
extern void _ZN6S267C34v116Ev();
extern void _ZN6S267C34v117Ev();
extern void _ZN6S267C34v118Ev();
extern void _ZN6S267C34v119Ev();
extern void _ZN6S267C34v120Ev();
extern void _ZN6S267C34v121Ev();
extern void _ZN6S267C34v122Ev();
extern void _ZN6S267C34v123Ev();
extern void _ZN6S267C34v124Ev();
extern void _ZN6S267C34v125Ev();
extern void _ZN6S267C24v126Ev();
extern void _ZN6S267C24v127Ev();
extern void _ZN6S267C24v128Ev();
extern void _ZN6S267C24v129Ev();
extern void _ZN6S267C24v130Ev();
extern void _ZN6S267C24v131Ev();
extern void _ZN6S267C24v132Ev();
extern void _ZN6S267C24v133Ev();
extern void _ZN6S267C24v134Ev();
extern void _ZN6S267C24v135Ev();
extern void _ZN6S267C24v136Ev();
extern void _ZN6S267C12v1Ev();
extern void _ZN6S267C12v2Ev();
extern void _ZN6S267C12v3Ev();
extern void _ZN6S267C12v4Ev();
extern void _ZN6S267C12v5Ev();
static  VTBL_ENTRY vtc_S267C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S267C1[0]),
  (VTBL_ENTRY)&_ZN6S267C1D1Ev,
  (VTBL_ENTRY)&_ZN6S267C1D0Ev,
  (VTBL_ENTRY)&_ZN6S267C62v6Ev,
  (VTBL_ENTRY)&_ZN6S267C62v7Ev,
  (VTBL_ENTRY)&_ZN6S267C62v8Ev,
  (VTBL_ENTRY)&_ZN6S267C62v9Ev,
  (VTBL_ENTRY)&_ZN6S267C63v10Ev,
  (VTBL_ENTRY)&_ZN6S267C63v11Ev,
  (VTBL_ENTRY)&_ZN6S267C63v12Ev,
  (VTBL_ENTRY)&_ZN6S267C63v13Ev,
  (VTBL_ENTRY)&_ZN6S267C63v14Ev,
  (VTBL_ENTRY)&_ZN6S267C63v15Ev,
  (VTBL_ENTRY)&_ZN6S267C63v16Ev,
  (VTBL_ENTRY)&_ZN6S267C63v17Ev,
  (VTBL_ENTRY)&_ZN6S267C63v18Ev,
  (VTBL_ENTRY)&_ZN6S267C63v19Ev,
  (VTBL_ENTRY)&_ZN6S267C63v20Ev,
  (VTBL_ENTRY)&_ZN6S267C63v21Ev,
  (VTBL_ENTRY)&_ZN6S267C63v22Ev,
  (VTBL_ENTRY)&_ZN6S267C63v23Ev,
  (VTBL_ENTRY)&_ZN6S267C63v24Ev,
  (VTBL_ENTRY)&_ZN6S267C63v25Ev,
  (VTBL_ENTRY)&_ZN6S267C63v26Ev,
  (VTBL_ENTRY)&_ZN6S267C63v27Ev,
  (VTBL_ENTRY)&_ZN6S267C63v28Ev,
  (VTBL_ENTRY)&_ZN6S267C63v29Ev,
  (VTBL_ENTRY)&_ZN6S267C63v30Ev,
  (VTBL_ENTRY)&_ZN6S267C63v31Ev,
  (VTBL_ENTRY)&_ZN6S267C63v32Ev,
  (VTBL_ENTRY)&_ZN6S267C63v33Ev,
  (VTBL_ENTRY)&_ZN6S267C63v34Ev,
  (VTBL_ENTRY)&_ZN6S267C63v35Ev,
  (VTBL_ENTRY)&_ZN6S267C63v36Ev,
  (VTBL_ENTRY)&_ZN6S267C63v37Ev,
  (VTBL_ENTRY)&_ZN6S267C63v38Ev,
  (VTBL_ENTRY)&_ZN6S267C63v39Ev,
  (VTBL_ENTRY)&_ZN6S267C63v40Ev,
  (VTBL_ENTRY)&_ZN6S267C63v41Ev,
  (VTBL_ENTRY)&_ZN6S267C63v42Ev,
  (VTBL_ENTRY)&_ZN6S267C63v43Ev,
  (VTBL_ENTRY)&_ZN6S267C63v44Ev,
  (VTBL_ENTRY)&_ZN6S267C63v45Ev,
  (VTBL_ENTRY)&_ZN6S267C63v46Ev,
  (VTBL_ENTRY)&_ZN6S267C63v47Ev,
  (VTBL_ENTRY)&_ZN6S267C63v48Ev,
  (VTBL_ENTRY)&_ZN6S267C63v49Ev,
  (VTBL_ENTRY)&_ZN6S267C63v50Ev,
  (VTBL_ENTRY)&_ZN6S267C63v51Ev,
  (VTBL_ENTRY)&_ZN6S267C63v52Ev,
  (VTBL_ENTRY)&_ZN6S267C63v53Ev,
  (VTBL_ENTRY)&_ZN6S267C63v54Ev,
  (VTBL_ENTRY)&_ZN6S267C63v55Ev,
  (VTBL_ENTRY)&_ZN6S267C63v56Ev,
  (VTBL_ENTRY)&_ZN6S267C63v57Ev,
  (VTBL_ENTRY)&_ZN6S267C63v58Ev,
  (VTBL_ENTRY)&_ZN6S267C63v59Ev,
  (VTBL_ENTRY)&_ZN6S267C63v60Ev,
  (VTBL_ENTRY)&_ZN6S267C63v61Ev,
  (VTBL_ENTRY)&_ZN6S267C63v62Ev,
  (VTBL_ENTRY)&_ZN6S267C63v63Ev,
  (VTBL_ENTRY)&_ZN6S267C63v64Ev,
  (VTBL_ENTRY)&_ZN6S267C63v65Ev,
  (VTBL_ENTRY)&_ZN6S267C63v66Ev,
  (VTBL_ENTRY)&_ZN6S267C63v67Ev,
  (VTBL_ENTRY)&_ZN6S267C63v68Ev,
  (VTBL_ENTRY)&_ZN6S267C63v69Ev,
  (VTBL_ENTRY)&_ZN6S267C53v70Ev,
  (VTBL_ENTRY)&_ZN6S267C53v71Ev,
  (VTBL_ENTRY)&_ZN6S267C53v72Ev,
  (VTBL_ENTRY)&_ZN6S267C53v73Ev,
  (VTBL_ENTRY)&_ZN6S267C53v74Ev,
  (VTBL_ENTRY)&_ZN6S267C53v75Ev,
  (VTBL_ENTRY)&_ZN6S267C53v76Ev,
  (VTBL_ENTRY)&_ZN6S267C53v77Ev,
  (VTBL_ENTRY)&_ZN6S267C53v78Ev,
  (VTBL_ENTRY)&_ZN6S267C53v79Ev,
  (VTBL_ENTRY)&_ZN6S267C53v80Ev,
  (VTBL_ENTRY)&_ZN6S267C53v81Ev,
  (VTBL_ENTRY)&_ZN6S267C53v82Ev,
  (VTBL_ENTRY)&_ZN6S267C53v83Ev,
  (VTBL_ENTRY)&_ZN6S267C53v84Ev,
  (VTBL_ENTRY)&_ZN6S267C53v85Ev,
  (VTBL_ENTRY)&_ZN6S267C53v86Ev,
  (VTBL_ENTRY)&_ZN6S267C53v87Ev,
  (VTBL_ENTRY)&_ZN6S267C53v88Ev,
  (VTBL_ENTRY)&_ZN6S267C53v89Ev,
  (VTBL_ENTRY)&_ZN6S267C53v90Ev,
  (VTBL_ENTRY)&_ZN6S267C53v91Ev,
  (VTBL_ENTRY)&_ZN6S267C43v92Ev,
  (VTBL_ENTRY)&_ZN6S267C43v93Ev,
  (VTBL_ENTRY)&_ZN6S267C43v94Ev,
  (VTBL_ENTRY)&_ZN6S267C43v95Ev,
  (VTBL_ENTRY)&_ZN6S267C43v96Ev,
  (VTBL_ENTRY)&_ZN6S267C43v97Ev,
  (VTBL_ENTRY)&_ZN6S267C43v98Ev,
  (VTBL_ENTRY)&_ZN6S267C43v99Ev,
  (VTBL_ENTRY)&_ZN6S267C44v100Ev,
  (VTBL_ENTRY)&_ZN6S267C44v101Ev,
  (VTBL_ENTRY)&_ZN6S267C44v102Ev,
  (VTBL_ENTRY)&_ZN6S267C44v103Ev,
  (VTBL_ENTRY)&_ZN6S267C44v104Ev,
  (VTBL_ENTRY)&_ZN6S267C44v105Ev,
  (VTBL_ENTRY)&_ZN6S267C44v106Ev,
  (VTBL_ENTRY)&_ZN6S267C44v107Ev,
  (VTBL_ENTRY)&_ZN6S267C44v108Ev,
  (VTBL_ENTRY)&_ZN6S267C44v109Ev,
  (VTBL_ENTRY)&_ZN6S267C44v110Ev,
  (VTBL_ENTRY)&_ZN6S267C44v111Ev,
  (VTBL_ENTRY)&_ZN6S267C34v112Ev,
  (VTBL_ENTRY)&_ZN6S267C34v113Ev,
  (VTBL_ENTRY)&_ZN6S267C34v114Ev,
  (VTBL_ENTRY)&_ZN6S267C34v115Ev,
  (VTBL_ENTRY)&_ZN6S267C34v116Ev,
  (VTBL_ENTRY)&_ZN6S267C34v117Ev,
  (VTBL_ENTRY)&_ZN6S267C34v118Ev,
  (VTBL_ENTRY)&_ZN6S267C34v119Ev,
  (VTBL_ENTRY)&_ZN6S267C34v120Ev,
  (VTBL_ENTRY)&_ZN6S267C34v121Ev,
  (VTBL_ENTRY)&_ZN6S267C34v122Ev,
  (VTBL_ENTRY)&_ZN6S267C34v123Ev,
  (VTBL_ENTRY)&_ZN6S267C34v124Ev,
  (VTBL_ENTRY)&_ZN6S267C34v125Ev,
  (VTBL_ENTRY)&_ZN6S267C24v126Ev,
  (VTBL_ENTRY)&_ZN6S267C24v127Ev,
  (VTBL_ENTRY)&_ZN6S267C24v128Ev,
  (VTBL_ENTRY)&_ZN6S267C24v129Ev,
  (VTBL_ENTRY)&_ZN6S267C24v130Ev,
  (VTBL_ENTRY)&_ZN6S267C24v131Ev,
  (VTBL_ENTRY)&_ZN6S267C24v132Ev,
  (VTBL_ENTRY)&_ZN6S267C24v133Ev,
  (VTBL_ENTRY)&_ZN6S267C24v134Ev,
  (VTBL_ENTRY)&_ZN6S267C24v135Ev,
  (VTBL_ENTRY)&_ZN6S267C24v136Ev,
  (VTBL_ENTRY)&_ZN6S267C12v1Ev,
  (VTBL_ENTRY)&_ZN6S267C12v2Ev,
  (VTBL_ENTRY)&_ZN6S267C12v3Ev,
  (VTBL_ENTRY)&_ZN6S267C12v4Ev,
  (VTBL_ENTRY)&_ZN6S267C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S267C1[];
extern  VTBL_ENTRY _ZTV6S267C1[];
Class_Descriptor cd_S267C1 = {  "S267C1", // class name
  bases_S267C1, 5,
  &(vtc_S267C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,300), // object size
  NSPAIRA(_ZTI6S267C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S267C1),140, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S56C7  {
  int s56c7f0;
  __tsi64 s56c7f1;
  void *s56c7f2[4];
  int s56c7f3[2];
  void *s56c7f4;
  ::S3350C4_nt s56c7f5;
  void *s56c7f6[2];
  virtual  ~S56C7(); // _ZN5S56C7D1Ev
  virtual void  v3(); // _ZN5S56C72v3Ev
  virtual void  v4(); // _ZN5S56C72v4Ev
  virtual void  v5(); // _ZN5S56C72v5Ev
  virtual void  v6(); // _ZN5S56C72v6Ev
  virtual void  v7(); // _ZN5S56C72v7Ev
  virtual void  v8(); // _ZN5S56C72v8Ev
  virtual void  v9(); // _ZN5S56C72v9Ev
  virtual void  v10(); // _ZN5S56C73v10Ev
  virtual void  v11(); // _ZN5S56C73v11Ev
  virtual void  v12(); // _ZN5S56C73v12Ev
  virtual void  v13(); // _ZN5S56C73v13Ev
  virtual void  v14(); // _ZN5S56C73v14Ev
  virtual void  v15(); // _ZN5S56C73v15Ev
  virtual void  v16(); // _ZN5S56C73v16Ev
  virtual void  v17(); // _ZN5S56C73v17Ev
  virtual void  v18(); // _ZN5S56C73v18Ev
  virtual void  v19(); // _ZN5S56C73v19Ev
  virtual void  v20(); // _ZN5S56C73v20Ev
  virtual void  v21(); // _ZN5S56C73v21Ev
  virtual void  v22(); // _ZN5S56C73v22Ev
  virtual void  v23(); // _ZN5S56C73v23Ev
  virtual void  v24(); // _ZN5S56C73v24Ev
  virtual void  v25(); // _ZN5S56C73v25Ev
  virtual void  v26(); // _ZN5S56C73v26Ev
  virtual void  v27(); // _ZN5S56C73v27Ev
  virtual void  v28(); // _ZN5S56C73v28Ev
  virtual void  v29(); // _ZN5S56C73v29Ev
  virtual void  v30(); // _ZN5S56C73v30Ev
  virtual void  v31(); // _ZN5S56C73v31Ev
  virtual void  v32(); // _ZN5S56C73v32Ev
  virtual void  v33(); // _ZN5S56C73v33Ev
  virtual void  v34(); // _ZN5S56C73v34Ev
  virtual void  v35(); // _ZN5S56C73v35Ev
  virtual void  v36(); // _ZN5S56C73v36Ev
  virtual void  v37(); // _ZN5S56C73v37Ev
  virtual void  v38(); // _ZN5S56C73v38Ev
  virtual void  v39(); // _ZN5S56C73v39Ev
  virtual void  v40(); // _ZN5S56C73v40Ev
  virtual void  v41(); // _ZN5S56C73v41Ev
  virtual void  v42(); // _ZN5S56C73v42Ev
  virtual void  v43(); // _ZN5S56C73v43Ev
  virtual void  v44(); // _ZN5S56C73v44Ev
  virtual void  v45(); // _ZN5S56C73v45Ev
  virtual void  v46(); // _ZN5S56C73v46Ev
  virtual void  v47(); // _ZN5S56C73v47Ev
  virtual void  v48(); // _ZN5S56C73v48Ev
  virtual void  v49(); // _ZN5S56C73v49Ev
  virtual void  v50(); // _ZN5S56C73v50Ev
  virtual void  v51(); // _ZN5S56C73v51Ev
  virtual void  v52(); // _ZN5S56C73v52Ev
  virtual void  v53(); // _ZN5S56C73v53Ev
  virtual void  v54(); // _ZN5S56C73v54Ev
  virtual void  v55(); // _ZN5S56C73v55Ev
  virtual void  v56(); // _ZN5S56C73v56Ev
  virtual void  v57(); // _ZN5S56C73v57Ev
  virtual void  v58(); // _ZN5S56C73v58Ev
  virtual void  v59(); // _ZN5S56C73v59Ev
  virtual void  v60(); // _ZN5S56C73v60Ev
  virtual void  v61(); // _ZN5S56C73v61Ev
  virtual void  v62(); // _ZN5S56C73v62Ev
  virtual void  v63(); // _ZN5S56C73v63Ev
  virtual void  v64(); // _ZN5S56C73v64Ev
  virtual void  v65(); // _ZN5S56C73v65Ev
  virtual void  v66(); // _ZN5S56C73v66Ev
  S56C7(); // tgen
};
//SIG(-1 S56C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S56C7 ::~S56C7(){ note_dtor("S56C7", this);}
void  S56C7 ::v3(){vfunc_called(this, "_ZN5S56C72v3Ev");}
void  S56C7 ::v4(){vfunc_called(this, "_ZN5S56C72v4Ev");}
void  S56C7 ::v5(){vfunc_called(this, "_ZN5S56C72v5Ev");}
void  S56C7 ::v6(){vfunc_called(this, "_ZN5S56C72v6Ev");}
void  S56C7 ::v7(){vfunc_called(this, "_ZN5S56C72v7Ev");}
void  S56C7 ::v8(){vfunc_called(this, "_ZN5S56C72v8Ev");}
void  S56C7 ::v9(){vfunc_called(this, "_ZN5S56C72v9Ev");}
void  S56C7 ::v10(){vfunc_called(this, "_ZN5S56C73v10Ev");}
void  S56C7 ::v11(){vfunc_called(this, "_ZN5S56C73v11Ev");}
void  S56C7 ::v12(){vfunc_called(this, "_ZN5S56C73v12Ev");}
void  S56C7 ::v13(){vfunc_called(this, "_ZN5S56C73v13Ev");}
void  S56C7 ::v14(){vfunc_called(this, "_ZN5S56C73v14Ev");}
void  S56C7 ::v15(){vfunc_called(this, "_ZN5S56C73v15Ev");}
void  S56C7 ::v16(){vfunc_called(this, "_ZN5S56C73v16Ev");}
void  S56C7 ::v17(){vfunc_called(this, "_ZN5S56C73v17Ev");}
void  S56C7 ::v18(){vfunc_called(this, "_ZN5S56C73v18Ev");}
void  S56C7 ::v19(){vfunc_called(this, "_ZN5S56C73v19Ev");}
void  S56C7 ::v20(){vfunc_called(this, "_ZN5S56C73v20Ev");}
void  S56C7 ::v21(){vfunc_called(this, "_ZN5S56C73v21Ev");}
void  S56C7 ::v22(){vfunc_called(this, "_ZN5S56C73v22Ev");}
void  S56C7 ::v23(){vfunc_called(this, "_ZN5S56C73v23Ev");}
void  S56C7 ::v24(){vfunc_called(this, "_ZN5S56C73v24Ev");}
void  S56C7 ::v25(){vfunc_called(this, "_ZN5S56C73v25Ev");}
void  S56C7 ::v26(){vfunc_called(this, "_ZN5S56C73v26Ev");}
void  S56C7 ::v27(){vfunc_called(this, "_ZN5S56C73v27Ev");}
void  S56C7 ::v28(){vfunc_called(this, "_ZN5S56C73v28Ev");}
void  S56C7 ::v29(){vfunc_called(this, "_ZN5S56C73v29Ev");}
void  S56C7 ::v30(){vfunc_called(this, "_ZN5S56C73v30Ev");}
void  S56C7 ::v31(){vfunc_called(this, "_ZN5S56C73v31Ev");}
void  S56C7 ::v32(){vfunc_called(this, "_ZN5S56C73v32Ev");}
void  S56C7 ::v33(){vfunc_called(this, "_ZN5S56C73v33Ev");}
void  S56C7 ::v34(){vfunc_called(this, "_ZN5S56C73v34Ev");}
void  S56C7 ::v35(){vfunc_called(this, "_ZN5S56C73v35Ev");}
void  S56C7 ::v36(){vfunc_called(this, "_ZN5S56C73v36Ev");}
void  S56C7 ::v37(){vfunc_called(this, "_ZN5S56C73v37Ev");}
void  S56C7 ::v38(){vfunc_called(this, "_ZN5S56C73v38Ev");}
void  S56C7 ::v39(){vfunc_called(this, "_ZN5S56C73v39Ev");}
void  S56C7 ::v40(){vfunc_called(this, "_ZN5S56C73v40Ev");}
void  S56C7 ::v41(){vfunc_called(this, "_ZN5S56C73v41Ev");}
void  S56C7 ::v42(){vfunc_called(this, "_ZN5S56C73v42Ev");}
void  S56C7 ::v43(){vfunc_called(this, "_ZN5S56C73v43Ev");}
void  S56C7 ::v44(){vfunc_called(this, "_ZN5S56C73v44Ev");}
void  S56C7 ::v45(){vfunc_called(this, "_ZN5S56C73v45Ev");}
void  S56C7 ::v46(){vfunc_called(this, "_ZN5S56C73v46Ev");}
void  S56C7 ::v47(){vfunc_called(this, "_ZN5S56C73v47Ev");}
void  S56C7 ::v48(){vfunc_called(this, "_ZN5S56C73v48Ev");}
void  S56C7 ::v49(){vfunc_called(this, "_ZN5S56C73v49Ev");}
void  S56C7 ::v50(){vfunc_called(this, "_ZN5S56C73v50Ev");}
void  S56C7 ::v51(){vfunc_called(this, "_ZN5S56C73v51Ev");}
void  S56C7 ::v52(){vfunc_called(this, "_ZN5S56C73v52Ev");}
void  S56C7 ::v53(){vfunc_called(this, "_ZN5S56C73v53Ev");}
void  S56C7 ::v54(){vfunc_called(this, "_ZN5S56C73v54Ev");}
void  S56C7 ::v55(){vfunc_called(this, "_ZN5S56C73v55Ev");}
void  S56C7 ::v56(){vfunc_called(this, "_ZN5S56C73v56Ev");}
void  S56C7 ::v57(){vfunc_called(this, "_ZN5S56C73v57Ev");}
void  S56C7 ::v58(){vfunc_called(this, "_ZN5S56C73v58Ev");}
void  S56C7 ::v59(){vfunc_called(this, "_ZN5S56C73v59Ev");}
void  S56C7 ::v60(){vfunc_called(this, "_ZN5S56C73v60Ev");}
void  S56C7 ::v61(){vfunc_called(this, "_ZN5S56C73v61Ev");}
void  S56C7 ::v62(){vfunc_called(this, "_ZN5S56C73v62Ev");}
void  S56C7 ::v63(){vfunc_called(this, "_ZN5S56C73v63Ev");}
void  S56C7 ::v64(){vfunc_called(this, "_ZN5S56C73v64Ev");}
void  S56C7 ::v65(){vfunc_called(this, "_ZN5S56C73v65Ev");}
void  S56C7 ::v66(){vfunc_called(this, "_ZN5S56C73v66Ev");}
S56C7 ::S56C7(){ note_ctor("S56C7", this);} // tgen

static void Test_S56C7()
{
  extern Class_Descriptor cd_S56C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S56C7, buf);
    S56C7 *dp, &lv = *(dp=new (buf) S56C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S56C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C7)");
    check_field_offset(lv, s56c7f0, ABISELECT(8,4), "S56C7.s56c7f0");
    check_field_offset(lv, s56c7f1, ABISELECT(16,8), "S56C7.s56c7f1");
    check_field_offset(lv, s56c7f2, ABISELECT(24,16), "S56C7.s56c7f2");
    check_field_offset(lv, s56c7f3, ABISELECT(56,32), "S56C7.s56c7f3");
    check_field_offset(lv, s56c7f4, ABISELECT(64,40), "S56C7.s56c7f4");
    check_field_offset(lv, s56c7f5, ABISELECT(72,44), "S56C7.s56c7f5");
    check_field_offset(lv, s56c7f6, ABISELECT(80,52), "S56C7.s56c7f6");
    test_class_info(&lv, &cd_S56C7);
    dp->~S56C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C7(Test_S56C7, "S56C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S56C7C1Ev();
extern void _ZN5S56C7D1Ev();
Name_Map name_map_S56C7[] = {
  NSPAIR(_ZN5S56C7C1Ev),
  NSPAIR(_ZN5S56C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S56C7[];
extern void _ZN5S56C7D1Ev();
extern void _ZN5S56C7D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
static  VTBL_ENTRY vtc_S56C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C7[0]),
  (VTBL_ENTRY)&_ZN5S56C7D1Ev,
  (VTBL_ENTRY)&_ZN5S56C7D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
Class_Descriptor cd_S56C7 = {  "S56C7", // class name
  0,0,//no base classes
  &(vtc_S56C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S56C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S56C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S56C6  : S56C7 {
  int s56c6f0[2];
  void *s56c6f1;
  int s56c6f2[2];
  ::S287C8_nt s56c6f3;
  ::S287C8_nt s56c6f4;
  ::S2121C38 s56c6f5;
  ::S287C8_nt s56c6f6;
  unsigned int s56c6f7:1;
  unsigned int s56c6f8:1;
  unsigned int s56c6f9:1;
  unsigned int s56c6f10:1;
  unsigned int s56c6f11:1;
  int s56c6f12[2];
  virtual  ~S56C6(); // _ZN5S56C6D1Ev
  virtual void  v67(); // _ZN5S56C63v67Ev
  virtual void  v68(); // _ZN5S56C63v68Ev
  virtual void  v69(); // _ZN5S56C63v69Ev
  virtual void  v70(); // _ZN5S56C63v70Ev
  virtual void  v71(); // _ZN5S56C63v71Ev
  virtual void  v72(); // _ZN5S56C63v72Ev
  virtual void  v73(); // _ZN5S56C63v73Ev
  virtual void  v74(); // _ZN5S56C63v74Ev
  virtual void  v75(); // _ZN5S56C63v75Ev
  virtual void  v76(); // _ZN5S56C63v76Ev
  virtual void  v77(); // _ZN5S56C63v77Ev
  virtual void  v78(); // _ZN5S56C63v78Ev
  virtual void  v79(); // _ZN5S56C63v79Ev
  virtual void  v80(); // _ZN5S56C63v80Ev
  virtual void  v81(); // _ZN5S56C63v81Ev
  virtual void  v82(); // _ZN5S56C63v82Ev
  virtual void  v83(); // _ZN5S56C63v83Ev
  virtual void  v84(); // _ZN5S56C63v84Ev
  virtual void  v85(); // _ZN5S56C63v85Ev
  virtual void  v86(); // _ZN5S56C63v86Ev
  virtual void  v87(); // _ZN5S56C63v87Ev
  virtual void  v88(); // _ZN5S56C63v88Ev
  S56C6(); // tgen
};
//SIG(-1 S56C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S56C6 ::~S56C6(){ note_dtor("S56C6", this);}
void  S56C6 ::v67(){vfunc_called(this, "_ZN5S56C63v67Ev");}
void  S56C6 ::v68(){vfunc_called(this, "_ZN5S56C63v68Ev");}
void  S56C6 ::v69(){vfunc_called(this, "_ZN5S56C63v69Ev");}
void  S56C6 ::v70(){vfunc_called(this, "_ZN5S56C63v70Ev");}
void  S56C6 ::v71(){vfunc_called(this, "_ZN5S56C63v71Ev");}
void  S56C6 ::v72(){vfunc_called(this, "_ZN5S56C63v72Ev");}
void  S56C6 ::v73(){vfunc_called(this, "_ZN5S56C63v73Ev");}
void  S56C6 ::v74(){vfunc_called(this, "_ZN5S56C63v74Ev");}
void  S56C6 ::v75(){vfunc_called(this, "_ZN5S56C63v75Ev");}
void  S56C6 ::v76(){vfunc_called(this, "_ZN5S56C63v76Ev");}
void  S56C6 ::v77(){vfunc_called(this, "_ZN5S56C63v77Ev");}
void  S56C6 ::v78(){vfunc_called(this, "_ZN5S56C63v78Ev");}
void  S56C6 ::v79(){vfunc_called(this, "_ZN5S56C63v79Ev");}
void  S56C6 ::v80(){vfunc_called(this, "_ZN5S56C63v80Ev");}
void  S56C6 ::v81(){vfunc_called(this, "_ZN5S56C63v81Ev");}
void  S56C6 ::v82(){vfunc_called(this, "_ZN5S56C63v82Ev");}
void  S56C6 ::v83(){vfunc_called(this, "_ZN5S56C63v83Ev");}
void  S56C6 ::v84(){vfunc_called(this, "_ZN5S56C63v84Ev");}
void  S56C6 ::v85(){vfunc_called(this, "_ZN5S56C63v85Ev");}
void  S56C6 ::v86(){vfunc_called(this, "_ZN5S56C63v86Ev");}
void  S56C6 ::v87(){vfunc_called(this, "_ZN5S56C63v87Ev");}
void  S56C6 ::v88(){vfunc_called(this, "_ZN5S56C63v88Ev");}
S56C6 ::S56C6(){ note_ctor("S56C6", this);} // tgen

static void Test_S56C6()
{
  extern Class_Descriptor cd_S56C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S56C6, buf);
    S56C6 *dp, &lv = *(dp=new (buf) S56C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S56C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C6)");
    check_base_class_offset(lv, (S56C7*), 0, "S56C6");
    check_field_offset(lv, s56c6f0, ABISELECT(96,60), "S56C6.s56c6f0");
    check_field_offset(lv, s56c6f1, ABISELECT(104,68), "S56C6.s56c6f1");
    check_field_offset(lv, s56c6f2, ABISELECT(112,72), "S56C6.s56c6f2");
    check_field_offset(lv, s56c6f3, ABISELECT(120,80), "S56C6.s56c6f3");
    check_field_offset(lv, s56c6f4, ABISELECT(136,92), "S56C6.s56c6f4");
    check_field_offset(lv, s56c6f5, ABISELECT(152,104), "S56C6.s56c6f5");
    check_field_offset(lv, s56c6f6, ABISELECT(160,108), "S56C6.s56c6f6");
    set_bf_and_test(lv, s56c6f7, ABISELECT(176,120), 0, 1, 1, "S56C6");
    set_bf_and_test(lv, s56c6f8, ABISELECT(176,120), 1, 1, 1, "S56C6");
    set_bf_and_test(lv, s56c6f9, ABISELECT(176,120), 2, 1, 1, "S56C6");
    set_bf_and_test(lv, s56c6f10, ABISELECT(176,120), 3, 1, 1, "S56C6");
    set_bf_and_test(lv, s56c6f11, ABISELECT(176,120), 4, 1, 1, "S56C6");
    check_field_offset(lv, s56c6f12, ABISELECT(180,124), "S56C6.s56c6f12");
    test_class_info(&lv, &cd_S56C6);
    dp->~S56C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C6(Test_S56C6, "S56C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S56C6C1Ev();
extern void _ZN5S56C6D1Ev();
Name_Map name_map_S56C6[] = {
  NSPAIR(_ZN5S56C6C1Ev),
  NSPAIR(_ZN5S56C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
static Base_Class bases_S56C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S56C6[];
extern void _ZN5S56C6D1Ev();
extern void _ZN5S56C6D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
static  VTBL_ENTRY vtc_S56C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C6[0]),
  (VTBL_ENTRY)&_ZN5S56C6D1Ev,
  (VTBL_ENTRY)&_ZN5S56C6D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
Class_Descriptor cd_S56C6 = {  "S56C6", // class name
  bases_S56C6, 1,
  &(vtc_S56C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S56C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S56C5  : S56C6 {
  unsigned int s56c5f0:1;
  unsigned int s56c5f1:1;
  unsigned int s56c5f2:1;
  ::S3350C17 s56c5f3;
  ::S3350C11 s56c5f4;
  ::S3350C5_nt s56c5f5;
  ::S287C27 s56c5f6;
  int s56c5f7[3];
  virtual  ~S56C5(); // _ZN5S56C5D1Ev
  virtual void  v89(); // _ZN5S56C53v89Ev
  virtual void  v90(); // _ZN5S56C53v90Ev
  virtual void  v91(); // _ZN5S56C53v91Ev
  virtual void  v92(); // _ZN5S56C53v92Ev
  virtual void  v93(); // _ZN5S56C53v93Ev
  virtual void  v94(); // _ZN5S56C53v94Ev
  virtual void  v95(); // _ZN5S56C53v95Ev
  virtual void  v96(); // _ZN5S56C53v96Ev
  virtual void  v97(); // _ZN5S56C53v97Ev
  virtual void  v98(); // _ZN5S56C53v98Ev
  virtual void  v99(); // _ZN5S56C53v99Ev
  virtual void  v100(); // _ZN5S56C54v100Ev
  virtual void  v101(); // _ZN5S56C54v101Ev
  virtual void  v102(); // _ZN5S56C54v102Ev
  virtual void  v103(); // _ZN5S56C54v103Ev
  virtual void  v104(); // _ZN5S56C54v104Ev
  virtual void  v105(); // _ZN5S56C54v105Ev
  virtual void  v106(); // _ZN5S56C54v106Ev
  virtual void  v107(); // _ZN5S56C54v107Ev
  virtual void  v108(); // _ZN5S56C54v108Ev
  S56C5(); // tgen
};
//SIG(-1 S56C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S56C5 ::~S56C5(){ note_dtor("S56C5", this);}
void  S56C5 ::v89(){vfunc_called(this, "_ZN5S56C53v89Ev");}
void  S56C5 ::v90(){vfunc_called(this, "_ZN5S56C53v90Ev");}
void  S56C5 ::v91(){vfunc_called(this, "_ZN5S56C53v91Ev");}
void  S56C5 ::v92(){vfunc_called(this, "_ZN5S56C53v92Ev");}
void  S56C5 ::v93(){vfunc_called(this, "_ZN5S56C53v93Ev");}
void  S56C5 ::v94(){vfunc_called(this, "_ZN5S56C53v94Ev");}
void  S56C5 ::v95(){vfunc_called(this, "_ZN5S56C53v95Ev");}
void  S56C5 ::v96(){vfunc_called(this, "_ZN5S56C53v96Ev");}
void  S56C5 ::v97(){vfunc_called(this, "_ZN5S56C53v97Ev");}
void  S56C5 ::v98(){vfunc_called(this, "_ZN5S56C53v98Ev");}
void  S56C5 ::v99(){vfunc_called(this, "_ZN5S56C53v99Ev");}
void  S56C5 ::v100(){vfunc_called(this, "_ZN5S56C54v100Ev");}
void  S56C5 ::v101(){vfunc_called(this, "_ZN5S56C54v101Ev");}
void  S56C5 ::v102(){vfunc_called(this, "_ZN5S56C54v102Ev");}
void  S56C5 ::v103(){vfunc_called(this, "_ZN5S56C54v103Ev");}
void  S56C5 ::v104(){vfunc_called(this, "_ZN5S56C54v104Ev");}
void  S56C5 ::v105(){vfunc_called(this, "_ZN5S56C54v105Ev");}
void  S56C5 ::v106(){vfunc_called(this, "_ZN5S56C54v106Ev");}
void  S56C5 ::v107(){vfunc_called(this, "_ZN5S56C54v107Ev");}
void  S56C5 ::v108(){vfunc_called(this, "_ZN5S56C54v108Ev");}
S56C5 ::S56C5(){ note_ctor("S56C5", this);} // tgen

static void Test_S56C5()
{
  extern Class_Descriptor cd_S56C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S56C5, buf);
    S56C5 *dp, &lv = *(dp=new (buf) S56C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S56C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C5)");
    check_base_class_offset(lv, (S56C7*)(S56C6*), 0, "S56C5");
    check_base_class_offset(lv, (S56C6*), 0, "S56C5");
    set_bf_and_test(lv, s56c5f0, ABISELECT(188,132), 0, 1, 1, "S56C5");
    set_bf_and_test(lv, s56c5f1, ABISELECT(188,132), 1, 1, 1, "S56C5");
    set_bf_and_test(lv, s56c5f2, ABISELECT(188,132), 2, 1, 1, "S56C5");
    check_field_offset(lv, s56c5f3, ABISELECT(192,136), "S56C5.s56c5f3");
    check_field_offset(lv, s56c5f4, ABISELECT(208,148), "S56C5.s56c5f4");
    check_field_offset(lv, s56c5f5, ABISELECT(224,160), "S56C5.s56c5f5");
    check_field_offset(lv, s56c5f6, ABISELECT(240,172), "S56C5.s56c5f6");
    check_field_offset(lv, s56c5f7, ABISELECT(256,184), "S56C5.s56c5f7");
    test_class_info(&lv, &cd_S56C5);
    dp->~S56C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C5(Test_S56C5, "S56C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S56C5C1Ev();
extern void _ZN5S56C5D1Ev();
Name_Map name_map_S56C5[] = {
  NSPAIR(_ZN5S56C5C1Ev),
  NSPAIR(_ZN5S56C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
static Base_Class bases_S56C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S56C5[];
extern void _ZN5S56C5D1Ev();
extern void _ZN5S56C5D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
static  VTBL_ENTRY vtc_S56C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C5[0]),
  (VTBL_ENTRY)&_ZN5S56C5D1Ev,
  (VTBL_ENTRY)&_ZN5S56C5D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
Class_Descriptor cd_S56C5 = {  "S56C5", // class name
  bases_S56C5, 2,
  &(vtc_S56C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S56C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S56C4  : S56C5 {
  void *s56c4f0[2];
  int s56c4f1[4];
  unsigned int s56c4f2:1;
  unsigned int s56c4f3:1;
  unsigned int s56c4f4:1;
  char s56c4f5;
  int s56c4f6;
  unsigned int s56c4f7:1;
  ::S287C23 s56c4f8;
  virtual  ~S56C4(); // _ZN5S56C4D1Ev
  virtual void  v109(); // _ZN5S56C44v109Ev
  virtual void  v110(); // _ZN5S56C44v110Ev
  virtual void  v111(); // _ZN5S56C44v111Ev
  virtual void  v112(); // _ZN5S56C44v112Ev
  virtual void  v113(); // _ZN5S56C44v113Ev
  virtual void  v114(); // _ZN5S56C44v114Ev
  virtual void  v115(); // _ZN5S56C44v115Ev
  virtual void  v116(); // _ZN5S56C44v116Ev
  virtual void  v117(); // _ZN5S56C44v117Ev
  virtual void  v118(); // _ZN5S56C44v118Ev
  virtual void  v119(); // _ZN5S56C44v119Ev
  virtual void  v120(); // _ZN5S56C44v120Ev
  virtual void  v121(); // _ZN5S56C44v121Ev
  virtual void  v122(); // _ZN5S56C44v122Ev
  S56C4(); // tgen
};
//SIG(-1 S56C4) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S56C4 ::~S56C4(){ note_dtor("S56C4", this);}
void  S56C4 ::v109(){vfunc_called(this, "_ZN5S56C44v109Ev");}
void  S56C4 ::v110(){vfunc_called(this, "_ZN5S56C44v110Ev");}
void  S56C4 ::v111(){vfunc_called(this, "_ZN5S56C44v111Ev");}
void  S56C4 ::v112(){vfunc_called(this, "_ZN5S56C44v112Ev");}
void  S56C4 ::v113(){vfunc_called(this, "_ZN5S56C44v113Ev");}
void  S56C4 ::v114(){vfunc_called(this, "_ZN5S56C44v114Ev");}
void  S56C4 ::v115(){vfunc_called(this, "_ZN5S56C44v115Ev");}
void  S56C4 ::v116(){vfunc_called(this, "_ZN5S56C44v116Ev");}
void  S56C4 ::v117(){vfunc_called(this, "_ZN5S56C44v117Ev");}
void  S56C4 ::v118(){vfunc_called(this, "_ZN5S56C44v118Ev");}
void  S56C4 ::v119(){vfunc_called(this, "_ZN5S56C44v119Ev");}
void  S56C4 ::v120(){vfunc_called(this, "_ZN5S56C44v120Ev");}
void  S56C4 ::v121(){vfunc_called(this, "_ZN5S56C44v121Ev");}
void  S56C4 ::v122(){vfunc_called(this, "_ZN5S56C44v122Ev");}
S56C4 ::S56C4(){ note_ctor("S56C4", this);} // tgen

static void Test_S56C4()
{
  extern Class_Descriptor cd_S56C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S56C4, buf);
    S56C4 *dp, &lv = *(dp=new (buf) S56C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S56C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C4)");
    check_base_class_offset(lv, (S56C7*)(S56C6*)(S56C5*), 0, "S56C4");
    check_base_class_offset(lv, (S56C6*)(S56C5*), 0, "S56C4");
    check_base_class_offset(lv, (S56C5*), 0, "S56C4");
    check_field_offset(lv, s56c4f0, ABISELECT(272,196), "S56C4.s56c4f0");
    check_field_offset(lv, s56c4f1, ABISELECT(288,204), "S56C4.s56c4f1");
    set_bf_and_test(lv, s56c4f2, ABISELECT(304,220), 0, 1, 1, "S56C4");
    set_bf_and_test(lv, s56c4f3, ABISELECT(304,220), 1, 1, 1, "S56C4");
    set_bf_and_test(lv, s56c4f4, ABISELECT(304,220), 2, 1, 1, "S56C4");
    check_field_offset(lv, s56c4f5, ABISELECT(305,221), "S56C4.s56c4f5");
    check_field_offset(lv, s56c4f6, ABISELECT(308,224), "S56C4.s56c4f6");
    set_bf_and_test(lv, s56c4f7, ABISELECT(312,228), 0, 1, 1, "S56C4");
    check_field_offset(lv, s56c4f8, ABISELECT(320,232), "S56C4.s56c4f8");
    test_class_info(&lv, &cd_S56C4);
    dp->~S56C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C4(Test_S56C4, "S56C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S56C4C1Ev();
extern void _ZN5S56C4D1Ev();
Name_Map name_map_S56C4[] = {
  NSPAIR(_ZN5S56C4C1Ev),
  NSPAIR(_ZN5S56C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
extern Class_Descriptor cd_S56C5;
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
static Base_Class bases_S56C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S56C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S56C4[];
extern void _ZN5S56C4D1Ev();
extern void _ZN5S56C4D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
extern void _ZN5S56C44v109Ev();
extern void _ZN5S56C44v110Ev();
extern void _ZN5S56C44v111Ev();
extern void _ZN5S56C44v112Ev();
extern void _ZN5S56C44v113Ev();
extern void _ZN5S56C44v114Ev();
extern void _ZN5S56C44v115Ev();
extern void _ZN5S56C44v116Ev();
extern void _ZN5S56C44v117Ev();
extern void _ZN5S56C44v118Ev();
extern void _ZN5S56C44v119Ev();
extern void _ZN5S56C44v120Ev();
extern void _ZN5S56C44v121Ev();
extern void _ZN5S56C44v122Ev();
static  VTBL_ENTRY vtc_S56C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C4[0]),
  (VTBL_ENTRY)&_ZN5S56C4D1Ev,
  (VTBL_ENTRY)&_ZN5S56C4D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
  (VTBL_ENTRY)&_ZN5S56C44v109Ev,
  (VTBL_ENTRY)&_ZN5S56C44v110Ev,
  (VTBL_ENTRY)&_ZN5S56C44v111Ev,
  (VTBL_ENTRY)&_ZN5S56C44v112Ev,
  (VTBL_ENTRY)&_ZN5S56C44v113Ev,
  (VTBL_ENTRY)&_ZN5S56C44v114Ev,
  (VTBL_ENTRY)&_ZN5S56C44v115Ev,
  (VTBL_ENTRY)&_ZN5S56C44v116Ev,
  (VTBL_ENTRY)&_ZN5S56C44v117Ev,
  (VTBL_ENTRY)&_ZN5S56C44v118Ev,
  (VTBL_ENTRY)&_ZN5S56C44v119Ev,
  (VTBL_ENTRY)&_ZN5S56C44v120Ev,
  (VTBL_ENTRY)&_ZN5S56C44v121Ev,
  (VTBL_ENTRY)&_ZN5S56C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S56C4[];
extern  VTBL_ENTRY _ZTV5S56C4[];
Class_Descriptor cd_S56C4 = {  "S56C4", // class name
  bases_S56C4, 3,
  &(vtc_S56C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S56C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C4),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S56C3  : S56C4 {
  void *s56c3f0[2];
  ::S287C8_nt s56c3f1;
  unsigned int s56c3f2:1;
  unsigned int s56c3f3:1;
  ::S3350C21_nt s56c3f4;
  virtual  ~S56C3(); // _ZN5S56C3D1Ev
  virtual void  v123(); // _ZN5S56C34v123Ev
  virtual void  v124(); // _ZN5S56C34v124Ev
  virtual void  v125(); // _ZN5S56C34v125Ev
  virtual void  v126(); // _ZN5S56C34v126Ev
  virtual void  v127(); // _ZN5S56C34v127Ev
  virtual void  v128(); // _ZN5S56C34v128Ev
  virtual void  v129(); // _ZN5S56C34v129Ev
  virtual void  v130(); // _ZN5S56C34v130Ev
  virtual void  v131(); // _ZN5S56C34v131Ev
  virtual void  v132(); // _ZN5S56C34v132Ev
  virtual void  v133(); // _ZN5S56C34v133Ev
  S56C3(); // tgen
};
//SIG(-1 S56C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S56C3 ::~S56C3(){ note_dtor("S56C3", this);}
void  S56C3 ::v123(){vfunc_called(this, "_ZN5S56C34v123Ev");}
void  S56C3 ::v124(){vfunc_called(this, "_ZN5S56C34v124Ev");}
void  S56C3 ::v125(){vfunc_called(this, "_ZN5S56C34v125Ev");}
void  S56C3 ::v126(){vfunc_called(this, "_ZN5S56C34v126Ev");}
void  S56C3 ::v127(){vfunc_called(this, "_ZN5S56C34v127Ev");}
void  S56C3 ::v128(){vfunc_called(this, "_ZN5S56C34v128Ev");}
void  S56C3 ::v129(){vfunc_called(this, "_ZN5S56C34v129Ev");}
void  S56C3 ::v130(){vfunc_called(this, "_ZN5S56C34v130Ev");}
void  S56C3 ::v131(){vfunc_called(this, "_ZN5S56C34v131Ev");}
void  S56C3 ::v132(){vfunc_called(this, "_ZN5S56C34v132Ev");}
void  S56C3 ::v133(){vfunc_called(this, "_ZN5S56C34v133Ev");}
S56C3 ::S56C3(){ note_ctor("S56C3", this);} // tgen

static void Test_S56C3()
{
  extern Class_Descriptor cd_S56C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S56C3, buf);
    S56C3 *dp, &lv = *(dp=new (buf) S56C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S56C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C3)");
    check_base_class_offset(lv, (S56C7*)(S56C6*)(S56C5*)(S56C4*), 0, "S56C3");
    check_base_class_offset(lv, (S56C6*)(S56C5*)(S56C4*), 0, "S56C3");
    check_base_class_offset(lv, (S56C5*)(S56C4*), 0, "S56C3");
    check_base_class_offset(lv, (S56C4*), 0, "S56C3");
    check_field_offset(lv, s56c3f0, ABISELECT(336,244), "S56C3.s56c3f0");
    check_field_offset(lv, s56c3f1, ABISELECT(352,252), "S56C3.s56c3f1");
    set_bf_and_test(lv, s56c3f2, ABISELECT(368,264), 0, 1, 1, "S56C3");
    set_bf_and_test(lv, s56c3f3, ABISELECT(368,264), 1, 1, 1, "S56C3");
    check_field_offset(lv, s56c3f4, ABISELECT(376,268), "S56C3.s56c3f4");
    test_class_info(&lv, &cd_S56C3);
    dp->~S56C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C3(Test_S56C3, "S56C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S56C3C1Ev();
extern void _ZN5S56C3D1Ev();
Name_Map name_map_S56C3[] = {
  NSPAIR(_ZN5S56C3C1Ev),
  NSPAIR(_ZN5S56C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
extern Class_Descriptor cd_S56C5;
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
extern Class_Descriptor cd_S56C4;
extern VTBL_ENTRY _ZTI5S56C4[];
extern  VTBL_ENTRY _ZTV5S56C4[];
static Base_Class bases_S56C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S56C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S56C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S56C3[];
extern void _ZN5S56C3D1Ev();
extern void _ZN5S56C3D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
extern void _ZN5S56C44v109Ev();
extern void _ZN5S56C44v110Ev();
extern void _ZN5S56C44v111Ev();
extern void _ZN5S56C44v112Ev();
extern void _ZN5S56C44v113Ev();
extern void _ZN5S56C44v114Ev();
extern void _ZN5S56C44v115Ev();
extern void _ZN5S56C44v116Ev();
extern void _ZN5S56C44v117Ev();
extern void _ZN5S56C44v118Ev();
extern void _ZN5S56C44v119Ev();
extern void _ZN5S56C44v120Ev();
extern void _ZN5S56C44v121Ev();
extern void _ZN5S56C44v122Ev();
extern void _ZN5S56C34v123Ev();
extern void _ZN5S56C34v124Ev();
extern void _ZN5S56C34v125Ev();
extern void _ZN5S56C34v126Ev();
extern void _ZN5S56C34v127Ev();
extern void _ZN5S56C34v128Ev();
extern void _ZN5S56C34v129Ev();
extern void _ZN5S56C34v130Ev();
extern void _ZN5S56C34v131Ev();
extern void _ZN5S56C34v132Ev();
extern void _ZN5S56C34v133Ev();
static  VTBL_ENTRY vtc_S56C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C3[0]),
  (VTBL_ENTRY)&_ZN5S56C3D1Ev,
  (VTBL_ENTRY)&_ZN5S56C3D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
  (VTBL_ENTRY)&_ZN5S56C44v109Ev,
  (VTBL_ENTRY)&_ZN5S56C44v110Ev,
  (VTBL_ENTRY)&_ZN5S56C44v111Ev,
  (VTBL_ENTRY)&_ZN5S56C44v112Ev,
  (VTBL_ENTRY)&_ZN5S56C44v113Ev,
  (VTBL_ENTRY)&_ZN5S56C44v114Ev,
  (VTBL_ENTRY)&_ZN5S56C44v115Ev,
  (VTBL_ENTRY)&_ZN5S56C44v116Ev,
  (VTBL_ENTRY)&_ZN5S56C44v117Ev,
  (VTBL_ENTRY)&_ZN5S56C44v118Ev,
  (VTBL_ENTRY)&_ZN5S56C44v119Ev,
  (VTBL_ENTRY)&_ZN5S56C44v120Ev,
  (VTBL_ENTRY)&_ZN5S56C44v121Ev,
  (VTBL_ENTRY)&_ZN5S56C44v122Ev,
  (VTBL_ENTRY)&_ZN5S56C34v123Ev,
  (VTBL_ENTRY)&_ZN5S56C34v124Ev,
  (VTBL_ENTRY)&_ZN5S56C34v125Ev,
  (VTBL_ENTRY)&_ZN5S56C34v126Ev,
  (VTBL_ENTRY)&_ZN5S56C34v127Ev,
  (VTBL_ENTRY)&_ZN5S56C34v128Ev,
  (VTBL_ENTRY)&_ZN5S56C34v129Ev,
  (VTBL_ENTRY)&_ZN5S56C34v130Ev,
  (VTBL_ENTRY)&_ZN5S56C34v131Ev,
  (VTBL_ENTRY)&_ZN5S56C34v132Ev,
  (VTBL_ENTRY)&_ZN5S56C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S56C3[];
extern  VTBL_ENTRY _ZTV5S56C3[];
Class_Descriptor cd_S56C3 = {  "S56C3", // class name
  bases_S56C3, 4,
  &(vtc_S56C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S56C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C3),135, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S56C2  : S56C3 {
  virtual  ~S56C2(); // _ZN5S56C2D1Ev
  virtual void  v134(); // _ZN5S56C24v134Ev
  virtual void  v135(); // _ZN5S56C24v135Ev
  S56C2(); // tgen
};
//SIG(-1 S56C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2}


 S56C2 ::~S56C2(){ note_dtor("S56C2", this);}
void  S56C2 ::v134(){vfunc_called(this, "_ZN5S56C24v134Ev");}
void  S56C2 ::v135(){vfunc_called(this, "_ZN5S56C24v135Ev");}
S56C2 ::S56C2(){ note_ctor("S56C2", this);} // tgen

static void Test_S56C2()
{
  extern Class_Descriptor cd_S56C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S56C2, buf);
    S56C2 *dp, &lv = *(dp=new (buf) S56C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S56C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C2)");
    check_base_class_offset(lv, (S56C7*)(S56C6*)(S56C5*)(S56C4*)(S56C3*), 0, "S56C2");
    check_base_class_offset(lv, (S56C6*)(S56C5*)(S56C4*)(S56C3*), 0, "S56C2");
    check_base_class_offset(lv, (S56C5*)(S56C4*)(S56C3*), 0, "S56C2");
    check_base_class_offset(lv, (S56C4*)(S56C3*), 0, "S56C2");
    check_base_class_offset(lv, (S56C3*), 0, "S56C2");
    test_class_info(&lv, &cd_S56C2);
    dp->~S56C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C2(Test_S56C2, "S56C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S56C2C1Ev();
extern void _ZN5S56C2D1Ev();
Name_Map name_map_S56C2[] = {
  NSPAIR(_ZN5S56C2C1Ev),
  NSPAIR(_ZN5S56C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
extern Class_Descriptor cd_S56C5;
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
extern Class_Descriptor cd_S56C4;
extern VTBL_ENTRY _ZTI5S56C4[];
extern  VTBL_ENTRY _ZTV5S56C4[];
extern Class_Descriptor cd_S56C3;
extern VTBL_ENTRY _ZTI5S56C3[];
extern  VTBL_ENTRY _ZTV5S56C3[];
static Base_Class bases_S56C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S56C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S56C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S56C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S56C2[];
extern void _ZN5S56C2D1Ev();
extern void _ZN5S56C2D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
extern void _ZN5S56C44v109Ev();
extern void _ZN5S56C44v110Ev();
extern void _ZN5S56C44v111Ev();
extern void _ZN5S56C44v112Ev();
extern void _ZN5S56C44v113Ev();
extern void _ZN5S56C44v114Ev();
extern void _ZN5S56C44v115Ev();
extern void _ZN5S56C44v116Ev();
extern void _ZN5S56C44v117Ev();
extern void _ZN5S56C44v118Ev();
extern void _ZN5S56C44v119Ev();
extern void _ZN5S56C44v120Ev();
extern void _ZN5S56C44v121Ev();
extern void _ZN5S56C44v122Ev();
extern void _ZN5S56C34v123Ev();
extern void _ZN5S56C34v124Ev();
extern void _ZN5S56C34v125Ev();
extern void _ZN5S56C34v126Ev();
extern void _ZN5S56C34v127Ev();
extern void _ZN5S56C34v128Ev();
extern void _ZN5S56C34v129Ev();
extern void _ZN5S56C34v130Ev();
extern void _ZN5S56C34v131Ev();
extern void _ZN5S56C34v132Ev();
extern void _ZN5S56C34v133Ev();
extern void _ZN5S56C24v134Ev();
extern void _ZN5S56C24v135Ev();
static  VTBL_ENTRY vtc_S56C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C2[0]),
  (VTBL_ENTRY)&_ZN5S56C2D1Ev,
  (VTBL_ENTRY)&_ZN5S56C2D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
  (VTBL_ENTRY)&_ZN5S56C44v109Ev,
  (VTBL_ENTRY)&_ZN5S56C44v110Ev,
  (VTBL_ENTRY)&_ZN5S56C44v111Ev,
  (VTBL_ENTRY)&_ZN5S56C44v112Ev,
  (VTBL_ENTRY)&_ZN5S56C44v113Ev,
  (VTBL_ENTRY)&_ZN5S56C44v114Ev,
  (VTBL_ENTRY)&_ZN5S56C44v115Ev,
  (VTBL_ENTRY)&_ZN5S56C44v116Ev,
  (VTBL_ENTRY)&_ZN5S56C44v117Ev,
  (VTBL_ENTRY)&_ZN5S56C44v118Ev,
  (VTBL_ENTRY)&_ZN5S56C44v119Ev,
  (VTBL_ENTRY)&_ZN5S56C44v120Ev,
  (VTBL_ENTRY)&_ZN5S56C44v121Ev,
  (VTBL_ENTRY)&_ZN5S56C44v122Ev,
  (VTBL_ENTRY)&_ZN5S56C34v123Ev,
  (VTBL_ENTRY)&_ZN5S56C34v124Ev,
  (VTBL_ENTRY)&_ZN5S56C34v125Ev,
  (VTBL_ENTRY)&_ZN5S56C34v126Ev,
  (VTBL_ENTRY)&_ZN5S56C34v127Ev,
  (VTBL_ENTRY)&_ZN5S56C34v128Ev,
  (VTBL_ENTRY)&_ZN5S56C34v129Ev,
  (VTBL_ENTRY)&_ZN5S56C34v130Ev,
  (VTBL_ENTRY)&_ZN5S56C34v131Ev,
  (VTBL_ENTRY)&_ZN5S56C34v132Ev,
  (VTBL_ENTRY)&_ZN5S56C34v133Ev,
  (VTBL_ENTRY)&_ZN5S56C24v134Ev,
  (VTBL_ENTRY)&_ZN5S56C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S56C2[];
extern  VTBL_ENTRY _ZTV5S56C2[];
Class_Descriptor cd_S56C2 = {  "S56C2", // class name
  bases_S56C2, 5,
  &(vtc_S56C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S56C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C2),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S56C1  : S56C2 {
  ::S287C8_nt s56c1f0;
  unsigned int s56c1f1:1;
  virtual  ~S56C1(); // _ZN5S56C1D1Ev
  virtual void  v1(); // _ZN5S56C12v1Ev
  virtual void  v2(); // _ZN5S56C12v2Ev
  S56C1(); // tgen
};
//SIG(1 S56C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135} vd v1 v2 FC9 Fi:1}


 S56C1 ::~S56C1(){ note_dtor("S56C1", this);}
void  S56C1 ::v1(){vfunc_called(this, "_ZN5S56C12v1Ev");}
void  S56C1 ::v2(){vfunc_called(this, "_ZN5S56C12v2Ev");}
S56C1 ::S56C1(){ note_ctor("S56C1", this);} // tgen

static void Test_S56C1()
{
  extern Class_Descriptor cd_S56C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,75)];
    init_test(&cd_S56C1, buf);
    S56C1 *dp, &lv = *(dp=new (buf) S56C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,296), "sizeof(S56C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S56C1)");
    check_base_class_offset(lv, (S56C7*)(S56C6*)(S56C5*)(S56C4*)(S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C6*)(S56C5*)(S56C4*)(S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C5*)(S56C4*)(S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C4*)(S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C3*)(S56C2*), 0, "S56C1");
    check_base_class_offset(lv, (S56C2*), 0, "S56C1");
    check_field_offset(lv, s56c1f0, ABISELECT(392,280), "S56C1.s56c1f0");
    set_bf_and_test(lv, s56c1f1, ABISELECT(408,292), 0, 1, 1, "S56C1");
    test_class_info(&lv, &cd_S56C1);
    dp->~S56C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS56C1(Test_S56C1, "S56C1", ABISELECT(416,296));

#else // __cplusplus

extern void _ZN5S56C1C1Ev();
extern void _ZN5S56C1D1Ev();
Name_Map name_map_S56C1[] = {
  NSPAIR(_ZN5S56C1C1Ev),
  NSPAIR(_ZN5S56C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S56C7;
extern VTBL_ENTRY _ZTI5S56C7[];
extern  VTBL_ENTRY _ZTV5S56C7[];
extern Class_Descriptor cd_S56C6;
extern VTBL_ENTRY _ZTI5S56C6[];
extern  VTBL_ENTRY _ZTV5S56C6[];
extern Class_Descriptor cd_S56C5;
extern VTBL_ENTRY _ZTI5S56C5[];
extern  VTBL_ENTRY _ZTV5S56C5[];
extern Class_Descriptor cd_S56C4;
extern VTBL_ENTRY _ZTI5S56C4[];
extern  VTBL_ENTRY _ZTV5S56C4[];
extern Class_Descriptor cd_S56C3;
extern VTBL_ENTRY _ZTI5S56C3[];
extern  VTBL_ENTRY _ZTV5S56C3[];
extern Class_Descriptor cd_S56C2;
extern VTBL_ENTRY _ZTI5S56C2[];
extern  VTBL_ENTRY _ZTV5S56C2[];
static Base_Class bases_S56C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S56C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S56C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S56C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S56C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S56C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S56C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S56C1[];
extern void _ZN5S56C1D1Ev();
extern void _ZN5S56C1D0Ev();
extern void _ZN5S56C72v3Ev();
extern void _ZN5S56C72v4Ev();
extern void _ZN5S56C72v5Ev();
extern void _ZN5S56C72v6Ev();
extern void _ZN5S56C72v7Ev();
extern void _ZN5S56C72v8Ev();
extern void _ZN5S56C72v9Ev();
extern void _ZN5S56C73v10Ev();
extern void _ZN5S56C73v11Ev();
extern void _ZN5S56C73v12Ev();
extern void _ZN5S56C73v13Ev();
extern void _ZN5S56C73v14Ev();
extern void _ZN5S56C73v15Ev();
extern void _ZN5S56C73v16Ev();
extern void _ZN5S56C73v17Ev();
extern void _ZN5S56C73v18Ev();
extern void _ZN5S56C73v19Ev();
extern void _ZN5S56C73v20Ev();
extern void _ZN5S56C73v21Ev();
extern void _ZN5S56C73v22Ev();
extern void _ZN5S56C73v23Ev();
extern void _ZN5S56C73v24Ev();
extern void _ZN5S56C73v25Ev();
extern void _ZN5S56C73v26Ev();
extern void _ZN5S56C73v27Ev();
extern void _ZN5S56C73v28Ev();
extern void _ZN5S56C73v29Ev();
extern void _ZN5S56C73v30Ev();
extern void _ZN5S56C73v31Ev();
extern void _ZN5S56C73v32Ev();
extern void _ZN5S56C73v33Ev();
extern void _ZN5S56C73v34Ev();
extern void _ZN5S56C73v35Ev();
extern void _ZN5S56C73v36Ev();
extern void _ZN5S56C73v37Ev();
extern void _ZN5S56C73v38Ev();
extern void _ZN5S56C73v39Ev();
extern void _ZN5S56C73v40Ev();
extern void _ZN5S56C73v41Ev();
extern void _ZN5S56C73v42Ev();
extern void _ZN5S56C73v43Ev();
extern void _ZN5S56C73v44Ev();
extern void _ZN5S56C73v45Ev();
extern void _ZN5S56C73v46Ev();
extern void _ZN5S56C73v47Ev();
extern void _ZN5S56C73v48Ev();
extern void _ZN5S56C73v49Ev();
extern void _ZN5S56C73v50Ev();
extern void _ZN5S56C73v51Ev();
extern void _ZN5S56C73v52Ev();
extern void _ZN5S56C73v53Ev();
extern void _ZN5S56C73v54Ev();
extern void _ZN5S56C73v55Ev();
extern void _ZN5S56C73v56Ev();
extern void _ZN5S56C73v57Ev();
extern void _ZN5S56C73v58Ev();
extern void _ZN5S56C73v59Ev();
extern void _ZN5S56C73v60Ev();
extern void _ZN5S56C73v61Ev();
extern void _ZN5S56C73v62Ev();
extern void _ZN5S56C73v63Ev();
extern void _ZN5S56C73v64Ev();
extern void _ZN5S56C73v65Ev();
extern void _ZN5S56C73v66Ev();
extern void _ZN5S56C63v67Ev();
extern void _ZN5S56C63v68Ev();
extern void _ZN5S56C63v69Ev();
extern void _ZN5S56C63v70Ev();
extern void _ZN5S56C63v71Ev();
extern void _ZN5S56C63v72Ev();
extern void _ZN5S56C63v73Ev();
extern void _ZN5S56C63v74Ev();
extern void _ZN5S56C63v75Ev();
extern void _ZN5S56C63v76Ev();
extern void _ZN5S56C63v77Ev();
extern void _ZN5S56C63v78Ev();
extern void _ZN5S56C63v79Ev();
extern void _ZN5S56C63v80Ev();
extern void _ZN5S56C63v81Ev();
extern void _ZN5S56C63v82Ev();
extern void _ZN5S56C63v83Ev();
extern void _ZN5S56C63v84Ev();
extern void _ZN5S56C63v85Ev();
extern void _ZN5S56C63v86Ev();
extern void _ZN5S56C63v87Ev();
extern void _ZN5S56C63v88Ev();
extern void _ZN5S56C53v89Ev();
extern void _ZN5S56C53v90Ev();
extern void _ZN5S56C53v91Ev();
extern void _ZN5S56C53v92Ev();
extern void _ZN5S56C53v93Ev();
extern void _ZN5S56C53v94Ev();
extern void _ZN5S56C53v95Ev();
extern void _ZN5S56C53v96Ev();
extern void _ZN5S56C53v97Ev();
extern void _ZN5S56C53v98Ev();
extern void _ZN5S56C53v99Ev();
extern void _ZN5S56C54v100Ev();
extern void _ZN5S56C54v101Ev();
extern void _ZN5S56C54v102Ev();
extern void _ZN5S56C54v103Ev();
extern void _ZN5S56C54v104Ev();
extern void _ZN5S56C54v105Ev();
extern void _ZN5S56C54v106Ev();
extern void _ZN5S56C54v107Ev();
extern void _ZN5S56C54v108Ev();
extern void _ZN5S56C44v109Ev();
extern void _ZN5S56C44v110Ev();
extern void _ZN5S56C44v111Ev();
extern void _ZN5S56C44v112Ev();
extern void _ZN5S56C44v113Ev();
extern void _ZN5S56C44v114Ev();
extern void _ZN5S56C44v115Ev();
extern void _ZN5S56C44v116Ev();
extern void _ZN5S56C44v117Ev();
extern void _ZN5S56C44v118Ev();
extern void _ZN5S56C44v119Ev();
extern void _ZN5S56C44v120Ev();
extern void _ZN5S56C44v121Ev();
extern void _ZN5S56C44v122Ev();
extern void _ZN5S56C34v123Ev();
extern void _ZN5S56C34v124Ev();
extern void _ZN5S56C34v125Ev();
extern void _ZN5S56C34v126Ev();
extern void _ZN5S56C34v127Ev();
extern void _ZN5S56C34v128Ev();
extern void _ZN5S56C34v129Ev();
extern void _ZN5S56C34v130Ev();
extern void _ZN5S56C34v131Ev();
extern void _ZN5S56C34v132Ev();
extern void _ZN5S56C34v133Ev();
extern void _ZN5S56C24v134Ev();
extern void _ZN5S56C24v135Ev();
extern void _ZN5S56C12v1Ev();
extern void _ZN5S56C12v2Ev();
static  VTBL_ENTRY vtc_S56C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S56C1[0]),
  (VTBL_ENTRY)&_ZN5S56C1D1Ev,
  (VTBL_ENTRY)&_ZN5S56C1D0Ev,
  (VTBL_ENTRY)&_ZN5S56C72v3Ev,
  (VTBL_ENTRY)&_ZN5S56C72v4Ev,
  (VTBL_ENTRY)&_ZN5S56C72v5Ev,
  (VTBL_ENTRY)&_ZN5S56C72v6Ev,
  (VTBL_ENTRY)&_ZN5S56C72v7Ev,
  (VTBL_ENTRY)&_ZN5S56C72v8Ev,
  (VTBL_ENTRY)&_ZN5S56C72v9Ev,
  (VTBL_ENTRY)&_ZN5S56C73v10Ev,
  (VTBL_ENTRY)&_ZN5S56C73v11Ev,
  (VTBL_ENTRY)&_ZN5S56C73v12Ev,
  (VTBL_ENTRY)&_ZN5S56C73v13Ev,
  (VTBL_ENTRY)&_ZN5S56C73v14Ev,
  (VTBL_ENTRY)&_ZN5S56C73v15Ev,
  (VTBL_ENTRY)&_ZN5S56C73v16Ev,
  (VTBL_ENTRY)&_ZN5S56C73v17Ev,
  (VTBL_ENTRY)&_ZN5S56C73v18Ev,
  (VTBL_ENTRY)&_ZN5S56C73v19Ev,
  (VTBL_ENTRY)&_ZN5S56C73v20Ev,
  (VTBL_ENTRY)&_ZN5S56C73v21Ev,
  (VTBL_ENTRY)&_ZN5S56C73v22Ev,
  (VTBL_ENTRY)&_ZN5S56C73v23Ev,
  (VTBL_ENTRY)&_ZN5S56C73v24Ev,
  (VTBL_ENTRY)&_ZN5S56C73v25Ev,
  (VTBL_ENTRY)&_ZN5S56C73v26Ev,
  (VTBL_ENTRY)&_ZN5S56C73v27Ev,
  (VTBL_ENTRY)&_ZN5S56C73v28Ev,
  (VTBL_ENTRY)&_ZN5S56C73v29Ev,
  (VTBL_ENTRY)&_ZN5S56C73v30Ev,
  (VTBL_ENTRY)&_ZN5S56C73v31Ev,
  (VTBL_ENTRY)&_ZN5S56C73v32Ev,
  (VTBL_ENTRY)&_ZN5S56C73v33Ev,
  (VTBL_ENTRY)&_ZN5S56C73v34Ev,
  (VTBL_ENTRY)&_ZN5S56C73v35Ev,
  (VTBL_ENTRY)&_ZN5S56C73v36Ev,
  (VTBL_ENTRY)&_ZN5S56C73v37Ev,
  (VTBL_ENTRY)&_ZN5S56C73v38Ev,
  (VTBL_ENTRY)&_ZN5S56C73v39Ev,
  (VTBL_ENTRY)&_ZN5S56C73v40Ev,
  (VTBL_ENTRY)&_ZN5S56C73v41Ev,
  (VTBL_ENTRY)&_ZN5S56C73v42Ev,
  (VTBL_ENTRY)&_ZN5S56C73v43Ev,
  (VTBL_ENTRY)&_ZN5S56C73v44Ev,
  (VTBL_ENTRY)&_ZN5S56C73v45Ev,
  (VTBL_ENTRY)&_ZN5S56C73v46Ev,
  (VTBL_ENTRY)&_ZN5S56C73v47Ev,
  (VTBL_ENTRY)&_ZN5S56C73v48Ev,
  (VTBL_ENTRY)&_ZN5S56C73v49Ev,
  (VTBL_ENTRY)&_ZN5S56C73v50Ev,
  (VTBL_ENTRY)&_ZN5S56C73v51Ev,
  (VTBL_ENTRY)&_ZN5S56C73v52Ev,
  (VTBL_ENTRY)&_ZN5S56C73v53Ev,
  (VTBL_ENTRY)&_ZN5S56C73v54Ev,
  (VTBL_ENTRY)&_ZN5S56C73v55Ev,
  (VTBL_ENTRY)&_ZN5S56C73v56Ev,
  (VTBL_ENTRY)&_ZN5S56C73v57Ev,
  (VTBL_ENTRY)&_ZN5S56C73v58Ev,
  (VTBL_ENTRY)&_ZN5S56C73v59Ev,
  (VTBL_ENTRY)&_ZN5S56C73v60Ev,
  (VTBL_ENTRY)&_ZN5S56C73v61Ev,
  (VTBL_ENTRY)&_ZN5S56C73v62Ev,
  (VTBL_ENTRY)&_ZN5S56C73v63Ev,
  (VTBL_ENTRY)&_ZN5S56C73v64Ev,
  (VTBL_ENTRY)&_ZN5S56C73v65Ev,
  (VTBL_ENTRY)&_ZN5S56C73v66Ev,
  (VTBL_ENTRY)&_ZN5S56C63v67Ev,
  (VTBL_ENTRY)&_ZN5S56C63v68Ev,
  (VTBL_ENTRY)&_ZN5S56C63v69Ev,
  (VTBL_ENTRY)&_ZN5S56C63v70Ev,
  (VTBL_ENTRY)&_ZN5S56C63v71Ev,
  (VTBL_ENTRY)&_ZN5S56C63v72Ev,
  (VTBL_ENTRY)&_ZN5S56C63v73Ev,
  (VTBL_ENTRY)&_ZN5S56C63v74Ev,
  (VTBL_ENTRY)&_ZN5S56C63v75Ev,
  (VTBL_ENTRY)&_ZN5S56C63v76Ev,
  (VTBL_ENTRY)&_ZN5S56C63v77Ev,
  (VTBL_ENTRY)&_ZN5S56C63v78Ev,
  (VTBL_ENTRY)&_ZN5S56C63v79Ev,
  (VTBL_ENTRY)&_ZN5S56C63v80Ev,
  (VTBL_ENTRY)&_ZN5S56C63v81Ev,
  (VTBL_ENTRY)&_ZN5S56C63v82Ev,
  (VTBL_ENTRY)&_ZN5S56C63v83Ev,
  (VTBL_ENTRY)&_ZN5S56C63v84Ev,
  (VTBL_ENTRY)&_ZN5S56C63v85Ev,
  (VTBL_ENTRY)&_ZN5S56C63v86Ev,
  (VTBL_ENTRY)&_ZN5S56C63v87Ev,
  (VTBL_ENTRY)&_ZN5S56C63v88Ev,
  (VTBL_ENTRY)&_ZN5S56C53v89Ev,
  (VTBL_ENTRY)&_ZN5S56C53v90Ev,
  (VTBL_ENTRY)&_ZN5S56C53v91Ev,
  (VTBL_ENTRY)&_ZN5S56C53v92Ev,
  (VTBL_ENTRY)&_ZN5S56C53v93Ev,
  (VTBL_ENTRY)&_ZN5S56C53v94Ev,
  (VTBL_ENTRY)&_ZN5S56C53v95Ev,
  (VTBL_ENTRY)&_ZN5S56C53v96Ev,
  (VTBL_ENTRY)&_ZN5S56C53v97Ev,
  (VTBL_ENTRY)&_ZN5S56C53v98Ev,
  (VTBL_ENTRY)&_ZN5S56C53v99Ev,
  (VTBL_ENTRY)&_ZN5S56C54v100Ev,
  (VTBL_ENTRY)&_ZN5S56C54v101Ev,
  (VTBL_ENTRY)&_ZN5S56C54v102Ev,
  (VTBL_ENTRY)&_ZN5S56C54v103Ev,
  (VTBL_ENTRY)&_ZN5S56C54v104Ev,
  (VTBL_ENTRY)&_ZN5S56C54v105Ev,
  (VTBL_ENTRY)&_ZN5S56C54v106Ev,
  (VTBL_ENTRY)&_ZN5S56C54v107Ev,
  (VTBL_ENTRY)&_ZN5S56C54v108Ev,
  (VTBL_ENTRY)&_ZN5S56C44v109Ev,
  (VTBL_ENTRY)&_ZN5S56C44v110Ev,
  (VTBL_ENTRY)&_ZN5S56C44v111Ev,
  (VTBL_ENTRY)&_ZN5S56C44v112Ev,
  (VTBL_ENTRY)&_ZN5S56C44v113Ev,
  (VTBL_ENTRY)&_ZN5S56C44v114Ev,
  (VTBL_ENTRY)&_ZN5S56C44v115Ev,
  (VTBL_ENTRY)&_ZN5S56C44v116Ev,
  (VTBL_ENTRY)&_ZN5S56C44v117Ev,
  (VTBL_ENTRY)&_ZN5S56C44v118Ev,
  (VTBL_ENTRY)&_ZN5S56C44v119Ev,
  (VTBL_ENTRY)&_ZN5S56C44v120Ev,
  (VTBL_ENTRY)&_ZN5S56C44v121Ev,
  (VTBL_ENTRY)&_ZN5S56C44v122Ev,
  (VTBL_ENTRY)&_ZN5S56C34v123Ev,
  (VTBL_ENTRY)&_ZN5S56C34v124Ev,
  (VTBL_ENTRY)&_ZN5S56C34v125Ev,
  (VTBL_ENTRY)&_ZN5S56C34v126Ev,
  (VTBL_ENTRY)&_ZN5S56C34v127Ev,
  (VTBL_ENTRY)&_ZN5S56C34v128Ev,
  (VTBL_ENTRY)&_ZN5S56C34v129Ev,
  (VTBL_ENTRY)&_ZN5S56C34v130Ev,
  (VTBL_ENTRY)&_ZN5S56C34v131Ev,
  (VTBL_ENTRY)&_ZN5S56C34v132Ev,
  (VTBL_ENTRY)&_ZN5S56C34v133Ev,
  (VTBL_ENTRY)&_ZN5S56C24v134Ev,
  (VTBL_ENTRY)&_ZN5S56C24v135Ev,
  (VTBL_ENTRY)&_ZN5S56C12v1Ev,
  (VTBL_ENTRY)&_ZN5S56C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S56C1[];
extern  VTBL_ENTRY _ZTV5S56C1[];
Class_Descriptor cd_S56C1 = {  "S56C1", // class name
  bases_S56C1, 6,
  &(vtc_S56C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(416,296), // object size
  NSPAIRA(_ZTI5S56C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S56C1),139, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S57C7  {
  int s57c7f0;
  __tsi64 s57c7f1;
  void *s57c7f2[4];
  int s57c7f3[2];
  void *s57c7f4;
  ::S3350C4_nt s57c7f5;
  void *s57c7f6[2];
  virtual  ~S57C7(); // _ZN5S57C7D1Ev
  virtual void  v3(); // _ZN5S57C72v3Ev
  virtual void  v4(); // _ZN5S57C72v4Ev
  virtual void  v5(); // _ZN5S57C72v5Ev
  virtual void  v6(); // _ZN5S57C72v6Ev
  virtual void  v7(); // _ZN5S57C72v7Ev
  virtual void  v8(); // _ZN5S57C72v8Ev
  virtual void  v9(); // _ZN5S57C72v9Ev
  virtual void  v10(); // _ZN5S57C73v10Ev
  virtual void  v11(); // _ZN5S57C73v11Ev
  virtual void  v12(); // _ZN5S57C73v12Ev
  virtual void  v13(); // _ZN5S57C73v13Ev
  virtual void  v14(); // _ZN5S57C73v14Ev
  virtual void  v15(); // _ZN5S57C73v15Ev
  virtual void  v16(); // _ZN5S57C73v16Ev
  virtual void  v17(); // _ZN5S57C73v17Ev
  virtual void  v18(); // _ZN5S57C73v18Ev
  virtual void  v19(); // _ZN5S57C73v19Ev
  virtual void  v20(); // _ZN5S57C73v20Ev
  virtual void  v21(); // _ZN5S57C73v21Ev
  virtual void  v22(); // _ZN5S57C73v22Ev
  virtual void  v23(); // _ZN5S57C73v23Ev
  virtual void  v24(); // _ZN5S57C73v24Ev
  virtual void  v25(); // _ZN5S57C73v25Ev
  virtual void  v26(); // _ZN5S57C73v26Ev
  virtual void  v27(); // _ZN5S57C73v27Ev
  virtual void  v28(); // _ZN5S57C73v28Ev
  virtual void  v29(); // _ZN5S57C73v29Ev
  virtual void  v30(); // _ZN5S57C73v30Ev
  virtual void  v31(); // _ZN5S57C73v31Ev
  virtual void  v32(); // _ZN5S57C73v32Ev
  virtual void  v33(); // _ZN5S57C73v33Ev
  virtual void  v34(); // _ZN5S57C73v34Ev
  virtual void  v35(); // _ZN5S57C73v35Ev
  virtual void  v36(); // _ZN5S57C73v36Ev
  virtual void  v37(); // _ZN5S57C73v37Ev
  virtual void  v38(); // _ZN5S57C73v38Ev
  virtual void  v39(); // _ZN5S57C73v39Ev
  virtual void  v40(); // _ZN5S57C73v40Ev
  virtual void  v41(); // _ZN5S57C73v41Ev
  virtual void  v42(); // _ZN5S57C73v42Ev
  virtual void  v43(); // _ZN5S57C73v43Ev
  virtual void  v44(); // _ZN5S57C73v44Ev
  virtual void  v45(); // _ZN5S57C73v45Ev
  virtual void  v46(); // _ZN5S57C73v46Ev
  virtual void  v47(); // _ZN5S57C73v47Ev
  virtual void  v48(); // _ZN5S57C73v48Ev
  virtual void  v49(); // _ZN5S57C73v49Ev
  virtual void  v50(); // _ZN5S57C73v50Ev
  virtual void  v51(); // _ZN5S57C73v51Ev
  virtual void  v52(); // _ZN5S57C73v52Ev
  virtual void  v53(); // _ZN5S57C73v53Ev
  virtual void  v54(); // _ZN5S57C73v54Ev
  virtual void  v55(); // _ZN5S57C73v55Ev
  virtual void  v56(); // _ZN5S57C73v56Ev
  virtual void  v57(); // _ZN5S57C73v57Ev
  virtual void  v58(); // _ZN5S57C73v58Ev
  virtual void  v59(); // _ZN5S57C73v59Ev
  virtual void  v60(); // _ZN5S57C73v60Ev
  virtual void  v61(); // _ZN5S57C73v61Ev
  virtual void  v62(); // _ZN5S57C73v62Ev
  virtual void  v63(); // _ZN5S57C73v63Ev
  virtual void  v64(); // _ZN5S57C73v64Ev
  virtual void  v65(); // _ZN5S57C73v65Ev
  virtual void  v66(); // _ZN5S57C73v66Ev
  S57C7(); // tgen
};
//SIG(-1 S57C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S57C7 ::~S57C7(){ note_dtor("S57C7", this);}
void  S57C7 ::v3(){vfunc_called(this, "_ZN5S57C72v3Ev");}
void  S57C7 ::v4(){vfunc_called(this, "_ZN5S57C72v4Ev");}
void  S57C7 ::v5(){vfunc_called(this, "_ZN5S57C72v5Ev");}
void  S57C7 ::v6(){vfunc_called(this, "_ZN5S57C72v6Ev");}
void  S57C7 ::v7(){vfunc_called(this, "_ZN5S57C72v7Ev");}
void  S57C7 ::v8(){vfunc_called(this, "_ZN5S57C72v8Ev");}
void  S57C7 ::v9(){vfunc_called(this, "_ZN5S57C72v9Ev");}
void  S57C7 ::v10(){vfunc_called(this, "_ZN5S57C73v10Ev");}
void  S57C7 ::v11(){vfunc_called(this, "_ZN5S57C73v11Ev");}
void  S57C7 ::v12(){vfunc_called(this, "_ZN5S57C73v12Ev");}
void  S57C7 ::v13(){vfunc_called(this, "_ZN5S57C73v13Ev");}
void  S57C7 ::v14(){vfunc_called(this, "_ZN5S57C73v14Ev");}
void  S57C7 ::v15(){vfunc_called(this, "_ZN5S57C73v15Ev");}
void  S57C7 ::v16(){vfunc_called(this, "_ZN5S57C73v16Ev");}
void  S57C7 ::v17(){vfunc_called(this, "_ZN5S57C73v17Ev");}
void  S57C7 ::v18(){vfunc_called(this, "_ZN5S57C73v18Ev");}
void  S57C7 ::v19(){vfunc_called(this, "_ZN5S57C73v19Ev");}
void  S57C7 ::v20(){vfunc_called(this, "_ZN5S57C73v20Ev");}
void  S57C7 ::v21(){vfunc_called(this, "_ZN5S57C73v21Ev");}
void  S57C7 ::v22(){vfunc_called(this, "_ZN5S57C73v22Ev");}
void  S57C7 ::v23(){vfunc_called(this, "_ZN5S57C73v23Ev");}
void  S57C7 ::v24(){vfunc_called(this, "_ZN5S57C73v24Ev");}
void  S57C7 ::v25(){vfunc_called(this, "_ZN5S57C73v25Ev");}
void  S57C7 ::v26(){vfunc_called(this, "_ZN5S57C73v26Ev");}
void  S57C7 ::v27(){vfunc_called(this, "_ZN5S57C73v27Ev");}
void  S57C7 ::v28(){vfunc_called(this, "_ZN5S57C73v28Ev");}
void  S57C7 ::v29(){vfunc_called(this, "_ZN5S57C73v29Ev");}
void  S57C7 ::v30(){vfunc_called(this, "_ZN5S57C73v30Ev");}
void  S57C7 ::v31(){vfunc_called(this, "_ZN5S57C73v31Ev");}
void  S57C7 ::v32(){vfunc_called(this, "_ZN5S57C73v32Ev");}
void  S57C7 ::v33(){vfunc_called(this, "_ZN5S57C73v33Ev");}
void  S57C7 ::v34(){vfunc_called(this, "_ZN5S57C73v34Ev");}
void  S57C7 ::v35(){vfunc_called(this, "_ZN5S57C73v35Ev");}
void  S57C7 ::v36(){vfunc_called(this, "_ZN5S57C73v36Ev");}
void  S57C7 ::v37(){vfunc_called(this, "_ZN5S57C73v37Ev");}
void  S57C7 ::v38(){vfunc_called(this, "_ZN5S57C73v38Ev");}
void  S57C7 ::v39(){vfunc_called(this, "_ZN5S57C73v39Ev");}
void  S57C7 ::v40(){vfunc_called(this, "_ZN5S57C73v40Ev");}
void  S57C7 ::v41(){vfunc_called(this, "_ZN5S57C73v41Ev");}
void  S57C7 ::v42(){vfunc_called(this, "_ZN5S57C73v42Ev");}
void  S57C7 ::v43(){vfunc_called(this, "_ZN5S57C73v43Ev");}
void  S57C7 ::v44(){vfunc_called(this, "_ZN5S57C73v44Ev");}
void  S57C7 ::v45(){vfunc_called(this, "_ZN5S57C73v45Ev");}
void  S57C7 ::v46(){vfunc_called(this, "_ZN5S57C73v46Ev");}
void  S57C7 ::v47(){vfunc_called(this, "_ZN5S57C73v47Ev");}
void  S57C7 ::v48(){vfunc_called(this, "_ZN5S57C73v48Ev");}
void  S57C7 ::v49(){vfunc_called(this, "_ZN5S57C73v49Ev");}
void  S57C7 ::v50(){vfunc_called(this, "_ZN5S57C73v50Ev");}
void  S57C7 ::v51(){vfunc_called(this, "_ZN5S57C73v51Ev");}
void  S57C7 ::v52(){vfunc_called(this, "_ZN5S57C73v52Ev");}
void  S57C7 ::v53(){vfunc_called(this, "_ZN5S57C73v53Ev");}
void  S57C7 ::v54(){vfunc_called(this, "_ZN5S57C73v54Ev");}
void  S57C7 ::v55(){vfunc_called(this, "_ZN5S57C73v55Ev");}
void  S57C7 ::v56(){vfunc_called(this, "_ZN5S57C73v56Ev");}
void  S57C7 ::v57(){vfunc_called(this, "_ZN5S57C73v57Ev");}
void  S57C7 ::v58(){vfunc_called(this, "_ZN5S57C73v58Ev");}
void  S57C7 ::v59(){vfunc_called(this, "_ZN5S57C73v59Ev");}
void  S57C7 ::v60(){vfunc_called(this, "_ZN5S57C73v60Ev");}
void  S57C7 ::v61(){vfunc_called(this, "_ZN5S57C73v61Ev");}
void  S57C7 ::v62(){vfunc_called(this, "_ZN5S57C73v62Ev");}
void  S57C7 ::v63(){vfunc_called(this, "_ZN5S57C73v63Ev");}
void  S57C7 ::v64(){vfunc_called(this, "_ZN5S57C73v64Ev");}
void  S57C7 ::v65(){vfunc_called(this, "_ZN5S57C73v65Ev");}
void  S57C7 ::v66(){vfunc_called(this, "_ZN5S57C73v66Ev");}
S57C7 ::S57C7(){ note_ctor("S57C7", this);} // tgen

static void Test_S57C7()
{
  extern Class_Descriptor cd_S57C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S57C7, buf);
    S57C7 *dp, &lv = *(dp=new (buf) S57C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S57C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C7)");
    check_field_offset(lv, s57c7f0, ABISELECT(8,4), "S57C7.s57c7f0");
    check_field_offset(lv, s57c7f1, ABISELECT(16,8), "S57C7.s57c7f1");
    check_field_offset(lv, s57c7f2, ABISELECT(24,16), "S57C7.s57c7f2");
    check_field_offset(lv, s57c7f3, ABISELECT(56,32), "S57C7.s57c7f3");
    check_field_offset(lv, s57c7f4, ABISELECT(64,40), "S57C7.s57c7f4");
    check_field_offset(lv, s57c7f5, ABISELECT(72,44), "S57C7.s57c7f5");
    check_field_offset(lv, s57c7f6, ABISELECT(80,52), "S57C7.s57c7f6");
    test_class_info(&lv, &cd_S57C7);
    dp->~S57C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C7(Test_S57C7, "S57C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S57C7C1Ev();
extern void _ZN5S57C7D1Ev();
Name_Map name_map_S57C7[] = {
  NSPAIR(_ZN5S57C7C1Ev),
  NSPAIR(_ZN5S57C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S57C7[];
extern void _ZN5S57C7D1Ev();
extern void _ZN5S57C7D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
static  VTBL_ENTRY vtc_S57C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C7[0]),
  (VTBL_ENTRY)&_ZN5S57C7D1Ev,
  (VTBL_ENTRY)&_ZN5S57C7D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
Class_Descriptor cd_S57C7 = {  "S57C7", // class name
  0,0,//no base classes
  &(vtc_S57C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S57C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S57C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S57C6  : S57C7 {
  int s57c6f0[2];
  void *s57c6f1;
  int s57c6f2[2];
  ::S287C8_nt s57c6f3;
  ::S287C8_nt s57c6f4;
  ::S2121C38 s57c6f5;
  ::S287C8_nt s57c6f6;
  unsigned int s57c6f7:1;
  unsigned int s57c6f8:1;
  unsigned int s57c6f9:1;
  unsigned int s57c6f10:1;
  unsigned int s57c6f11:1;
  int s57c6f12[2];
  virtual  ~S57C6(); // _ZN5S57C6D1Ev
  virtual void  v67(); // _ZN5S57C63v67Ev
  virtual void  v68(); // _ZN5S57C63v68Ev
  virtual void  v69(); // _ZN5S57C63v69Ev
  virtual void  v70(); // _ZN5S57C63v70Ev
  virtual void  v71(); // _ZN5S57C63v71Ev
  virtual void  v72(); // _ZN5S57C63v72Ev
  virtual void  v73(); // _ZN5S57C63v73Ev
  virtual void  v74(); // _ZN5S57C63v74Ev
  virtual void  v75(); // _ZN5S57C63v75Ev
  virtual void  v76(); // _ZN5S57C63v76Ev
  virtual void  v77(); // _ZN5S57C63v77Ev
  virtual void  v78(); // _ZN5S57C63v78Ev
  virtual void  v79(); // _ZN5S57C63v79Ev
  virtual void  v80(); // _ZN5S57C63v80Ev
  virtual void  v81(); // _ZN5S57C63v81Ev
  virtual void  v82(); // _ZN5S57C63v82Ev
  virtual void  v83(); // _ZN5S57C63v83Ev
  virtual void  v84(); // _ZN5S57C63v84Ev
  virtual void  v85(); // _ZN5S57C63v85Ev
  virtual void  v86(); // _ZN5S57C63v86Ev
  virtual void  v87(); // _ZN5S57C63v87Ev
  virtual void  v88(); // _ZN5S57C63v88Ev
  S57C6(); // tgen
};
//SIG(-1 S57C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S57C6 ::~S57C6(){ note_dtor("S57C6", this);}
void  S57C6 ::v67(){vfunc_called(this, "_ZN5S57C63v67Ev");}
void  S57C6 ::v68(){vfunc_called(this, "_ZN5S57C63v68Ev");}
void  S57C6 ::v69(){vfunc_called(this, "_ZN5S57C63v69Ev");}
void  S57C6 ::v70(){vfunc_called(this, "_ZN5S57C63v70Ev");}
void  S57C6 ::v71(){vfunc_called(this, "_ZN5S57C63v71Ev");}
void  S57C6 ::v72(){vfunc_called(this, "_ZN5S57C63v72Ev");}
void  S57C6 ::v73(){vfunc_called(this, "_ZN5S57C63v73Ev");}
void  S57C6 ::v74(){vfunc_called(this, "_ZN5S57C63v74Ev");}
void  S57C6 ::v75(){vfunc_called(this, "_ZN5S57C63v75Ev");}
void  S57C6 ::v76(){vfunc_called(this, "_ZN5S57C63v76Ev");}
void  S57C6 ::v77(){vfunc_called(this, "_ZN5S57C63v77Ev");}
void  S57C6 ::v78(){vfunc_called(this, "_ZN5S57C63v78Ev");}
void  S57C6 ::v79(){vfunc_called(this, "_ZN5S57C63v79Ev");}
void  S57C6 ::v80(){vfunc_called(this, "_ZN5S57C63v80Ev");}
void  S57C6 ::v81(){vfunc_called(this, "_ZN5S57C63v81Ev");}
void  S57C6 ::v82(){vfunc_called(this, "_ZN5S57C63v82Ev");}
void  S57C6 ::v83(){vfunc_called(this, "_ZN5S57C63v83Ev");}
void  S57C6 ::v84(){vfunc_called(this, "_ZN5S57C63v84Ev");}
void  S57C6 ::v85(){vfunc_called(this, "_ZN5S57C63v85Ev");}
void  S57C6 ::v86(){vfunc_called(this, "_ZN5S57C63v86Ev");}
void  S57C6 ::v87(){vfunc_called(this, "_ZN5S57C63v87Ev");}
void  S57C6 ::v88(){vfunc_called(this, "_ZN5S57C63v88Ev");}
S57C6 ::S57C6(){ note_ctor("S57C6", this);} // tgen

static void Test_S57C6()
{
  extern Class_Descriptor cd_S57C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S57C6, buf);
    S57C6 *dp, &lv = *(dp=new (buf) S57C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S57C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C6)");
    check_base_class_offset(lv, (S57C7*), 0, "S57C6");
    check_field_offset(lv, s57c6f0, ABISELECT(96,60), "S57C6.s57c6f0");
    check_field_offset(lv, s57c6f1, ABISELECT(104,68), "S57C6.s57c6f1");
    check_field_offset(lv, s57c6f2, ABISELECT(112,72), "S57C6.s57c6f2");
    check_field_offset(lv, s57c6f3, ABISELECT(120,80), "S57C6.s57c6f3");
    check_field_offset(lv, s57c6f4, ABISELECT(136,92), "S57C6.s57c6f4");
    check_field_offset(lv, s57c6f5, ABISELECT(152,104), "S57C6.s57c6f5");
    check_field_offset(lv, s57c6f6, ABISELECT(160,108), "S57C6.s57c6f6");
    set_bf_and_test(lv, s57c6f7, ABISELECT(176,120), 0, 1, 1, "S57C6");
    set_bf_and_test(lv, s57c6f8, ABISELECT(176,120), 1, 1, 1, "S57C6");
    set_bf_and_test(lv, s57c6f9, ABISELECT(176,120), 2, 1, 1, "S57C6");
    set_bf_and_test(lv, s57c6f10, ABISELECT(176,120), 3, 1, 1, "S57C6");
    set_bf_and_test(lv, s57c6f11, ABISELECT(176,120), 4, 1, 1, "S57C6");
    check_field_offset(lv, s57c6f12, ABISELECT(180,124), "S57C6.s57c6f12");
    test_class_info(&lv, &cd_S57C6);
    dp->~S57C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C6(Test_S57C6, "S57C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S57C6C1Ev();
extern void _ZN5S57C6D1Ev();
Name_Map name_map_S57C6[] = {
  NSPAIR(_ZN5S57C6C1Ev),
  NSPAIR(_ZN5S57C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
static Base_Class bases_S57C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S57C6[];
extern void _ZN5S57C6D1Ev();
extern void _ZN5S57C6D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
static  VTBL_ENTRY vtc_S57C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C6[0]),
  (VTBL_ENTRY)&_ZN5S57C6D1Ev,
  (VTBL_ENTRY)&_ZN5S57C6D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
Class_Descriptor cd_S57C6 = {  "S57C6", // class name
  bases_S57C6, 1,
  &(vtc_S57C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S57C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S57C5  : S57C6 {
  unsigned int s57c5f0:1;
  unsigned int s57c5f1:1;
  unsigned int s57c5f2:1;
  ::S3350C17 s57c5f3;
  ::S3350C11 s57c5f4;
  ::S3350C5_nt s57c5f5;
  ::S287C27 s57c5f6;
  int s57c5f7[3];
  virtual  ~S57C5(); // _ZN5S57C5D1Ev
  virtual void  v89(); // _ZN5S57C53v89Ev
  virtual void  v90(); // _ZN5S57C53v90Ev
  virtual void  v91(); // _ZN5S57C53v91Ev
  virtual void  v92(); // _ZN5S57C53v92Ev
  virtual void  v93(); // _ZN5S57C53v93Ev
  virtual void  v94(); // _ZN5S57C53v94Ev
  virtual void  v95(); // _ZN5S57C53v95Ev
  virtual void  v96(); // _ZN5S57C53v96Ev
  virtual void  v97(); // _ZN5S57C53v97Ev
  virtual void  v98(); // _ZN5S57C53v98Ev
  virtual void  v99(); // _ZN5S57C53v99Ev
  virtual void  v100(); // _ZN5S57C54v100Ev
  virtual void  v101(); // _ZN5S57C54v101Ev
  virtual void  v102(); // _ZN5S57C54v102Ev
  virtual void  v103(); // _ZN5S57C54v103Ev
  virtual void  v104(); // _ZN5S57C54v104Ev
  virtual void  v105(); // _ZN5S57C54v105Ev
  virtual void  v106(); // _ZN5S57C54v106Ev
  virtual void  v107(); // _ZN5S57C54v107Ev
  virtual void  v108(); // _ZN5S57C54v108Ev
  S57C5(); // tgen
};
//SIG(-1 S57C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S57C5 ::~S57C5(){ note_dtor("S57C5", this);}
void  S57C5 ::v89(){vfunc_called(this, "_ZN5S57C53v89Ev");}
void  S57C5 ::v90(){vfunc_called(this, "_ZN5S57C53v90Ev");}
void  S57C5 ::v91(){vfunc_called(this, "_ZN5S57C53v91Ev");}
void  S57C5 ::v92(){vfunc_called(this, "_ZN5S57C53v92Ev");}
void  S57C5 ::v93(){vfunc_called(this, "_ZN5S57C53v93Ev");}
void  S57C5 ::v94(){vfunc_called(this, "_ZN5S57C53v94Ev");}
void  S57C5 ::v95(){vfunc_called(this, "_ZN5S57C53v95Ev");}
void  S57C5 ::v96(){vfunc_called(this, "_ZN5S57C53v96Ev");}
void  S57C5 ::v97(){vfunc_called(this, "_ZN5S57C53v97Ev");}
void  S57C5 ::v98(){vfunc_called(this, "_ZN5S57C53v98Ev");}
void  S57C5 ::v99(){vfunc_called(this, "_ZN5S57C53v99Ev");}
void  S57C5 ::v100(){vfunc_called(this, "_ZN5S57C54v100Ev");}
void  S57C5 ::v101(){vfunc_called(this, "_ZN5S57C54v101Ev");}
void  S57C5 ::v102(){vfunc_called(this, "_ZN5S57C54v102Ev");}
void  S57C5 ::v103(){vfunc_called(this, "_ZN5S57C54v103Ev");}
void  S57C5 ::v104(){vfunc_called(this, "_ZN5S57C54v104Ev");}
void  S57C5 ::v105(){vfunc_called(this, "_ZN5S57C54v105Ev");}
void  S57C5 ::v106(){vfunc_called(this, "_ZN5S57C54v106Ev");}
void  S57C5 ::v107(){vfunc_called(this, "_ZN5S57C54v107Ev");}
void  S57C5 ::v108(){vfunc_called(this, "_ZN5S57C54v108Ev");}
S57C5 ::S57C5(){ note_ctor("S57C5", this);} // tgen

static void Test_S57C5()
{
  extern Class_Descriptor cd_S57C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S57C5, buf);
    S57C5 *dp, &lv = *(dp=new (buf) S57C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S57C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C5)");
    check_base_class_offset(lv, (S57C7*)(S57C6*), 0, "S57C5");
    check_base_class_offset(lv, (S57C6*), 0, "S57C5");
    set_bf_and_test(lv, s57c5f0, ABISELECT(188,132), 0, 1, 1, "S57C5");
    set_bf_and_test(lv, s57c5f1, ABISELECT(188,132), 1, 1, 1, "S57C5");
    set_bf_and_test(lv, s57c5f2, ABISELECT(188,132), 2, 1, 1, "S57C5");
    check_field_offset(lv, s57c5f3, ABISELECT(192,136), "S57C5.s57c5f3");
    check_field_offset(lv, s57c5f4, ABISELECT(208,148), "S57C5.s57c5f4");
    check_field_offset(lv, s57c5f5, ABISELECT(224,160), "S57C5.s57c5f5");
    check_field_offset(lv, s57c5f6, ABISELECT(240,172), "S57C5.s57c5f6");
    check_field_offset(lv, s57c5f7, ABISELECT(256,184), "S57C5.s57c5f7");
    test_class_info(&lv, &cd_S57C5);
    dp->~S57C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C5(Test_S57C5, "S57C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S57C5C1Ev();
extern void _ZN5S57C5D1Ev();
Name_Map name_map_S57C5[] = {
  NSPAIR(_ZN5S57C5C1Ev),
  NSPAIR(_ZN5S57C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
static Base_Class bases_S57C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S57C5[];
extern void _ZN5S57C5D1Ev();
extern void _ZN5S57C5D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
static  VTBL_ENTRY vtc_S57C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C5[0]),
  (VTBL_ENTRY)&_ZN5S57C5D1Ev,
  (VTBL_ENTRY)&_ZN5S57C5D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
Class_Descriptor cd_S57C5 = {  "S57C5", // class name
  bases_S57C5, 2,
  &(vtc_S57C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S57C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S57C4  : S57C5 {
  void *s57c4f0[2];
  int s57c4f1[4];
  unsigned int s57c4f2:1;
  unsigned int s57c4f3:1;
  unsigned int s57c4f4:1;
  char s57c4f5;
  int s57c4f6;
  unsigned int s57c4f7:1;
  ::S287C23 s57c4f8;
  virtual  ~S57C4(); // _ZN5S57C4D1Ev
  virtual void  v109(); // _ZN5S57C44v109Ev
  virtual void  v110(); // _ZN5S57C44v110Ev
  virtual void  v111(); // _ZN5S57C44v111Ev
  virtual void  v112(); // _ZN5S57C44v112Ev
  virtual void  v113(); // _ZN5S57C44v113Ev
  virtual void  v114(); // _ZN5S57C44v114Ev
  virtual void  v115(); // _ZN5S57C44v115Ev
  virtual void  v116(); // _ZN5S57C44v116Ev
  virtual void  v117(); // _ZN5S57C44v117Ev
  virtual void  v118(); // _ZN5S57C44v118Ev
  virtual void  v119(); // _ZN5S57C44v119Ev
  virtual void  v120(); // _ZN5S57C44v120Ev
  virtual void  v121(); // _ZN5S57C44v121Ev
  virtual void  v122(); // _ZN5S57C44v122Ev
  S57C4(); // tgen
};
//SIG(-1 S57C4) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S57C4 ::~S57C4(){ note_dtor("S57C4", this);}
void  S57C4 ::v109(){vfunc_called(this, "_ZN5S57C44v109Ev");}
void  S57C4 ::v110(){vfunc_called(this, "_ZN5S57C44v110Ev");}
void  S57C4 ::v111(){vfunc_called(this, "_ZN5S57C44v111Ev");}
void  S57C4 ::v112(){vfunc_called(this, "_ZN5S57C44v112Ev");}
void  S57C4 ::v113(){vfunc_called(this, "_ZN5S57C44v113Ev");}
void  S57C4 ::v114(){vfunc_called(this, "_ZN5S57C44v114Ev");}
void  S57C4 ::v115(){vfunc_called(this, "_ZN5S57C44v115Ev");}
void  S57C4 ::v116(){vfunc_called(this, "_ZN5S57C44v116Ev");}
void  S57C4 ::v117(){vfunc_called(this, "_ZN5S57C44v117Ev");}
void  S57C4 ::v118(){vfunc_called(this, "_ZN5S57C44v118Ev");}
void  S57C4 ::v119(){vfunc_called(this, "_ZN5S57C44v119Ev");}
void  S57C4 ::v120(){vfunc_called(this, "_ZN5S57C44v120Ev");}
void  S57C4 ::v121(){vfunc_called(this, "_ZN5S57C44v121Ev");}
void  S57C4 ::v122(){vfunc_called(this, "_ZN5S57C44v122Ev");}
S57C4 ::S57C4(){ note_ctor("S57C4", this);} // tgen

static void Test_S57C4()
{
  extern Class_Descriptor cd_S57C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S57C4, buf);
    S57C4 *dp, &lv = *(dp=new (buf) S57C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S57C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C4)");
    check_base_class_offset(lv, (S57C7*)(S57C6*)(S57C5*), 0, "S57C4");
    check_base_class_offset(lv, (S57C6*)(S57C5*), 0, "S57C4");
    check_base_class_offset(lv, (S57C5*), 0, "S57C4");
    check_field_offset(lv, s57c4f0, ABISELECT(272,196), "S57C4.s57c4f0");
    check_field_offset(lv, s57c4f1, ABISELECT(288,204), "S57C4.s57c4f1");
    set_bf_and_test(lv, s57c4f2, ABISELECT(304,220), 0, 1, 1, "S57C4");
    set_bf_and_test(lv, s57c4f3, ABISELECT(304,220), 1, 1, 1, "S57C4");
    set_bf_and_test(lv, s57c4f4, ABISELECT(304,220), 2, 1, 1, "S57C4");
    check_field_offset(lv, s57c4f5, ABISELECT(305,221), "S57C4.s57c4f5");
    check_field_offset(lv, s57c4f6, ABISELECT(308,224), "S57C4.s57c4f6");
    set_bf_and_test(lv, s57c4f7, ABISELECT(312,228), 0, 1, 1, "S57C4");
    check_field_offset(lv, s57c4f8, ABISELECT(320,232), "S57C4.s57c4f8");
    test_class_info(&lv, &cd_S57C4);
    dp->~S57C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C4(Test_S57C4, "S57C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S57C4C1Ev();
extern void _ZN5S57C4D1Ev();
Name_Map name_map_S57C4[] = {
  NSPAIR(_ZN5S57C4C1Ev),
  NSPAIR(_ZN5S57C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
extern Class_Descriptor cd_S57C5;
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
static Base_Class bases_S57C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S57C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S57C4[];
extern void _ZN5S57C4D1Ev();
extern void _ZN5S57C4D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
extern void _ZN5S57C44v109Ev();
extern void _ZN5S57C44v110Ev();
extern void _ZN5S57C44v111Ev();
extern void _ZN5S57C44v112Ev();
extern void _ZN5S57C44v113Ev();
extern void _ZN5S57C44v114Ev();
extern void _ZN5S57C44v115Ev();
extern void _ZN5S57C44v116Ev();
extern void _ZN5S57C44v117Ev();
extern void _ZN5S57C44v118Ev();
extern void _ZN5S57C44v119Ev();
extern void _ZN5S57C44v120Ev();
extern void _ZN5S57C44v121Ev();
extern void _ZN5S57C44v122Ev();
static  VTBL_ENTRY vtc_S57C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C4[0]),
  (VTBL_ENTRY)&_ZN5S57C4D1Ev,
  (VTBL_ENTRY)&_ZN5S57C4D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
  (VTBL_ENTRY)&_ZN5S57C44v109Ev,
  (VTBL_ENTRY)&_ZN5S57C44v110Ev,
  (VTBL_ENTRY)&_ZN5S57C44v111Ev,
  (VTBL_ENTRY)&_ZN5S57C44v112Ev,
  (VTBL_ENTRY)&_ZN5S57C44v113Ev,
  (VTBL_ENTRY)&_ZN5S57C44v114Ev,
  (VTBL_ENTRY)&_ZN5S57C44v115Ev,
  (VTBL_ENTRY)&_ZN5S57C44v116Ev,
  (VTBL_ENTRY)&_ZN5S57C44v117Ev,
  (VTBL_ENTRY)&_ZN5S57C44v118Ev,
  (VTBL_ENTRY)&_ZN5S57C44v119Ev,
  (VTBL_ENTRY)&_ZN5S57C44v120Ev,
  (VTBL_ENTRY)&_ZN5S57C44v121Ev,
  (VTBL_ENTRY)&_ZN5S57C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S57C4[];
extern  VTBL_ENTRY _ZTV5S57C4[];
Class_Descriptor cd_S57C4 = {  "S57C4", // class name
  bases_S57C4, 3,
  &(vtc_S57C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S57C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C4),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S57C3  : S57C4 {
  void *s57c3f0[2];
  ::S287C8_nt s57c3f1;
  unsigned int s57c3f2:1;
  unsigned int s57c3f3:1;
  ::S3350C21_nt s57c3f4;
  virtual  ~S57C3(); // _ZN5S57C3D1Ev
  virtual void  v123(); // _ZN5S57C34v123Ev
  virtual void  v124(); // _ZN5S57C34v124Ev
  virtual void  v125(); // _ZN5S57C34v125Ev
  virtual void  v126(); // _ZN5S57C34v126Ev
  virtual void  v127(); // _ZN5S57C34v127Ev
  virtual void  v128(); // _ZN5S57C34v128Ev
  virtual void  v129(); // _ZN5S57C34v129Ev
  virtual void  v130(); // _ZN5S57C34v130Ev
  virtual void  v131(); // _ZN5S57C34v131Ev
  virtual void  v132(); // _ZN5S57C34v132Ev
  virtual void  v133(); // _ZN5S57C34v133Ev
  S57C3(); // tgen
};
//SIG(-1 S57C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S57C3 ::~S57C3(){ note_dtor("S57C3", this);}
void  S57C3 ::v123(){vfunc_called(this, "_ZN5S57C34v123Ev");}
void  S57C3 ::v124(){vfunc_called(this, "_ZN5S57C34v124Ev");}
void  S57C3 ::v125(){vfunc_called(this, "_ZN5S57C34v125Ev");}
void  S57C3 ::v126(){vfunc_called(this, "_ZN5S57C34v126Ev");}
void  S57C3 ::v127(){vfunc_called(this, "_ZN5S57C34v127Ev");}
void  S57C3 ::v128(){vfunc_called(this, "_ZN5S57C34v128Ev");}
void  S57C3 ::v129(){vfunc_called(this, "_ZN5S57C34v129Ev");}
void  S57C3 ::v130(){vfunc_called(this, "_ZN5S57C34v130Ev");}
void  S57C3 ::v131(){vfunc_called(this, "_ZN5S57C34v131Ev");}
void  S57C3 ::v132(){vfunc_called(this, "_ZN5S57C34v132Ev");}
void  S57C3 ::v133(){vfunc_called(this, "_ZN5S57C34v133Ev");}
S57C3 ::S57C3(){ note_ctor("S57C3", this);} // tgen

static void Test_S57C3()
{
  extern Class_Descriptor cd_S57C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S57C3, buf);
    S57C3 *dp, &lv = *(dp=new (buf) S57C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S57C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C3)");
    check_base_class_offset(lv, (S57C7*)(S57C6*)(S57C5*)(S57C4*), 0, "S57C3");
    check_base_class_offset(lv, (S57C6*)(S57C5*)(S57C4*), 0, "S57C3");
    check_base_class_offset(lv, (S57C5*)(S57C4*), 0, "S57C3");
    check_base_class_offset(lv, (S57C4*), 0, "S57C3");
    check_field_offset(lv, s57c3f0, ABISELECT(336,244), "S57C3.s57c3f0");
    check_field_offset(lv, s57c3f1, ABISELECT(352,252), "S57C3.s57c3f1");
    set_bf_and_test(lv, s57c3f2, ABISELECT(368,264), 0, 1, 1, "S57C3");
    set_bf_and_test(lv, s57c3f3, ABISELECT(368,264), 1, 1, 1, "S57C3");
    check_field_offset(lv, s57c3f4, ABISELECT(376,268), "S57C3.s57c3f4");
    test_class_info(&lv, &cd_S57C3);
    dp->~S57C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C3(Test_S57C3, "S57C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S57C3C1Ev();
extern void _ZN5S57C3D1Ev();
Name_Map name_map_S57C3[] = {
  NSPAIR(_ZN5S57C3C1Ev),
  NSPAIR(_ZN5S57C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
extern Class_Descriptor cd_S57C5;
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
extern Class_Descriptor cd_S57C4;
extern VTBL_ENTRY _ZTI5S57C4[];
extern  VTBL_ENTRY _ZTV5S57C4[];
static Base_Class bases_S57C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S57C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S57C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S57C3[];
extern void _ZN5S57C3D1Ev();
extern void _ZN5S57C3D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
extern void _ZN5S57C44v109Ev();
extern void _ZN5S57C44v110Ev();
extern void _ZN5S57C44v111Ev();
extern void _ZN5S57C44v112Ev();
extern void _ZN5S57C44v113Ev();
extern void _ZN5S57C44v114Ev();
extern void _ZN5S57C44v115Ev();
extern void _ZN5S57C44v116Ev();
extern void _ZN5S57C44v117Ev();
extern void _ZN5S57C44v118Ev();
extern void _ZN5S57C44v119Ev();
extern void _ZN5S57C44v120Ev();
extern void _ZN5S57C44v121Ev();
extern void _ZN5S57C44v122Ev();
extern void _ZN5S57C34v123Ev();
extern void _ZN5S57C34v124Ev();
extern void _ZN5S57C34v125Ev();
extern void _ZN5S57C34v126Ev();
extern void _ZN5S57C34v127Ev();
extern void _ZN5S57C34v128Ev();
extern void _ZN5S57C34v129Ev();
extern void _ZN5S57C34v130Ev();
extern void _ZN5S57C34v131Ev();
extern void _ZN5S57C34v132Ev();
extern void _ZN5S57C34v133Ev();
static  VTBL_ENTRY vtc_S57C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C3[0]),
  (VTBL_ENTRY)&_ZN5S57C3D1Ev,
  (VTBL_ENTRY)&_ZN5S57C3D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
  (VTBL_ENTRY)&_ZN5S57C44v109Ev,
  (VTBL_ENTRY)&_ZN5S57C44v110Ev,
  (VTBL_ENTRY)&_ZN5S57C44v111Ev,
  (VTBL_ENTRY)&_ZN5S57C44v112Ev,
  (VTBL_ENTRY)&_ZN5S57C44v113Ev,
  (VTBL_ENTRY)&_ZN5S57C44v114Ev,
  (VTBL_ENTRY)&_ZN5S57C44v115Ev,
  (VTBL_ENTRY)&_ZN5S57C44v116Ev,
  (VTBL_ENTRY)&_ZN5S57C44v117Ev,
  (VTBL_ENTRY)&_ZN5S57C44v118Ev,
  (VTBL_ENTRY)&_ZN5S57C44v119Ev,
  (VTBL_ENTRY)&_ZN5S57C44v120Ev,
  (VTBL_ENTRY)&_ZN5S57C44v121Ev,
  (VTBL_ENTRY)&_ZN5S57C44v122Ev,
  (VTBL_ENTRY)&_ZN5S57C34v123Ev,
  (VTBL_ENTRY)&_ZN5S57C34v124Ev,
  (VTBL_ENTRY)&_ZN5S57C34v125Ev,
  (VTBL_ENTRY)&_ZN5S57C34v126Ev,
  (VTBL_ENTRY)&_ZN5S57C34v127Ev,
  (VTBL_ENTRY)&_ZN5S57C34v128Ev,
  (VTBL_ENTRY)&_ZN5S57C34v129Ev,
  (VTBL_ENTRY)&_ZN5S57C34v130Ev,
  (VTBL_ENTRY)&_ZN5S57C34v131Ev,
  (VTBL_ENTRY)&_ZN5S57C34v132Ev,
  (VTBL_ENTRY)&_ZN5S57C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S57C3[];
extern  VTBL_ENTRY _ZTV5S57C3[];
Class_Descriptor cd_S57C3 = {  "S57C3", // class name
  bases_S57C3, 4,
  &(vtc_S57C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S57C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C3),135, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S57C2  : S57C3 {
  virtual  ~S57C2(); // _ZN5S57C2D1Ev
  virtual void  v134(); // _ZN5S57C24v134Ev
  virtual void  v135(); // _ZN5S57C24v135Ev
  S57C2(); // tgen
};
//SIG(-1 S57C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2}


 S57C2 ::~S57C2(){ note_dtor("S57C2", this);}
void  S57C2 ::v134(){vfunc_called(this, "_ZN5S57C24v134Ev");}
void  S57C2 ::v135(){vfunc_called(this, "_ZN5S57C24v135Ev");}
S57C2 ::S57C2(){ note_ctor("S57C2", this);} // tgen

static void Test_S57C2()
{
  extern Class_Descriptor cd_S57C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S57C2, buf);
    S57C2 *dp, &lv = *(dp=new (buf) S57C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S57C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C2)");
    check_base_class_offset(lv, (S57C7*)(S57C6*)(S57C5*)(S57C4*)(S57C3*), 0, "S57C2");
    check_base_class_offset(lv, (S57C6*)(S57C5*)(S57C4*)(S57C3*), 0, "S57C2");
    check_base_class_offset(lv, (S57C5*)(S57C4*)(S57C3*), 0, "S57C2");
    check_base_class_offset(lv, (S57C4*)(S57C3*), 0, "S57C2");
    check_base_class_offset(lv, (S57C3*), 0, "S57C2");
    test_class_info(&lv, &cd_S57C2);
    dp->~S57C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C2(Test_S57C2, "S57C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S57C2C1Ev();
extern void _ZN5S57C2D1Ev();
Name_Map name_map_S57C2[] = {
  NSPAIR(_ZN5S57C2C1Ev),
  NSPAIR(_ZN5S57C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
extern Class_Descriptor cd_S57C5;
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
extern Class_Descriptor cd_S57C4;
extern VTBL_ENTRY _ZTI5S57C4[];
extern  VTBL_ENTRY _ZTV5S57C4[];
extern Class_Descriptor cd_S57C3;
extern VTBL_ENTRY _ZTI5S57C3[];
extern  VTBL_ENTRY _ZTV5S57C3[];
static Base_Class bases_S57C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S57C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S57C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S57C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S57C2[];
extern void _ZN5S57C2D1Ev();
extern void _ZN5S57C2D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
extern void _ZN5S57C44v109Ev();
extern void _ZN5S57C44v110Ev();
extern void _ZN5S57C44v111Ev();
extern void _ZN5S57C44v112Ev();
extern void _ZN5S57C44v113Ev();
extern void _ZN5S57C44v114Ev();
extern void _ZN5S57C44v115Ev();
extern void _ZN5S57C44v116Ev();
extern void _ZN5S57C44v117Ev();
extern void _ZN5S57C44v118Ev();
extern void _ZN5S57C44v119Ev();
extern void _ZN5S57C44v120Ev();
extern void _ZN5S57C44v121Ev();
extern void _ZN5S57C44v122Ev();
extern void _ZN5S57C34v123Ev();
extern void _ZN5S57C34v124Ev();
extern void _ZN5S57C34v125Ev();
extern void _ZN5S57C34v126Ev();
extern void _ZN5S57C34v127Ev();
extern void _ZN5S57C34v128Ev();
extern void _ZN5S57C34v129Ev();
extern void _ZN5S57C34v130Ev();
extern void _ZN5S57C34v131Ev();
extern void _ZN5S57C34v132Ev();
extern void _ZN5S57C34v133Ev();
extern void _ZN5S57C24v134Ev();
extern void _ZN5S57C24v135Ev();
static  VTBL_ENTRY vtc_S57C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C2[0]),
  (VTBL_ENTRY)&_ZN5S57C2D1Ev,
  (VTBL_ENTRY)&_ZN5S57C2D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
  (VTBL_ENTRY)&_ZN5S57C44v109Ev,
  (VTBL_ENTRY)&_ZN5S57C44v110Ev,
  (VTBL_ENTRY)&_ZN5S57C44v111Ev,
  (VTBL_ENTRY)&_ZN5S57C44v112Ev,
  (VTBL_ENTRY)&_ZN5S57C44v113Ev,
  (VTBL_ENTRY)&_ZN5S57C44v114Ev,
  (VTBL_ENTRY)&_ZN5S57C44v115Ev,
  (VTBL_ENTRY)&_ZN5S57C44v116Ev,
  (VTBL_ENTRY)&_ZN5S57C44v117Ev,
  (VTBL_ENTRY)&_ZN5S57C44v118Ev,
  (VTBL_ENTRY)&_ZN5S57C44v119Ev,
  (VTBL_ENTRY)&_ZN5S57C44v120Ev,
  (VTBL_ENTRY)&_ZN5S57C44v121Ev,
  (VTBL_ENTRY)&_ZN5S57C44v122Ev,
  (VTBL_ENTRY)&_ZN5S57C34v123Ev,
  (VTBL_ENTRY)&_ZN5S57C34v124Ev,
  (VTBL_ENTRY)&_ZN5S57C34v125Ev,
  (VTBL_ENTRY)&_ZN5S57C34v126Ev,
  (VTBL_ENTRY)&_ZN5S57C34v127Ev,
  (VTBL_ENTRY)&_ZN5S57C34v128Ev,
  (VTBL_ENTRY)&_ZN5S57C34v129Ev,
  (VTBL_ENTRY)&_ZN5S57C34v130Ev,
  (VTBL_ENTRY)&_ZN5S57C34v131Ev,
  (VTBL_ENTRY)&_ZN5S57C34v132Ev,
  (VTBL_ENTRY)&_ZN5S57C34v133Ev,
  (VTBL_ENTRY)&_ZN5S57C24v134Ev,
  (VTBL_ENTRY)&_ZN5S57C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S57C2[];
extern  VTBL_ENTRY _ZTV5S57C2[];
Class_Descriptor cd_S57C2 = {  "S57C2", // class name
  bases_S57C2, 5,
  &(vtc_S57C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S57C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C2),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S57C1  : S57C2 {
  int s57c1f0[2];
  virtual  ~S57C1(); // _ZN5S57C1D1Ev
  virtual void  v1(); // _ZN5S57C12v1Ev
  virtual void  v2(); // _ZN5S57C12v2Ev
  S57C1(); // tgen
};
//SIG(1 S57C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135} vd v1 v2 Fi[2]}


 S57C1 ::~S57C1(){ note_dtor("S57C1", this);}
void  S57C1 ::v1(){vfunc_called(this, "_ZN5S57C12v1Ev");}
void  S57C1 ::v2(){vfunc_called(this, "_ZN5S57C12v2Ev");}
S57C1 ::S57C1(){ note_ctor("S57C1", this);} // tgen

static void Test_S57C1()
{
  extern Class_Descriptor cd_S57C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,73)];
    init_test(&cd_S57C1, buf);
    S57C1 *dp, &lv = *(dp=new (buf) S57C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S57C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S57C1)");
    check_base_class_offset(lv, (S57C7*)(S57C6*)(S57C5*)(S57C4*)(S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C6*)(S57C5*)(S57C4*)(S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C5*)(S57C4*)(S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C4*)(S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C3*)(S57C2*), 0, "S57C1");
    check_base_class_offset(lv, (S57C2*), 0, "S57C1");
    check_field_offset(lv, s57c1f0, ABISELECT(392,280), "S57C1.s57c1f0");
    test_class_info(&lv, &cd_S57C1);
    dp->~S57C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS57C1(Test_S57C1, "S57C1", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN5S57C1C1Ev();
extern void _ZN5S57C1D1Ev();
Name_Map name_map_S57C1[] = {
  NSPAIR(_ZN5S57C1C1Ev),
  NSPAIR(_ZN5S57C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S57C7;
extern VTBL_ENTRY _ZTI5S57C7[];
extern  VTBL_ENTRY _ZTV5S57C7[];
extern Class_Descriptor cd_S57C6;
extern VTBL_ENTRY _ZTI5S57C6[];
extern  VTBL_ENTRY _ZTV5S57C6[];
extern Class_Descriptor cd_S57C5;
extern VTBL_ENTRY _ZTI5S57C5[];
extern  VTBL_ENTRY _ZTV5S57C5[];
extern Class_Descriptor cd_S57C4;
extern VTBL_ENTRY _ZTI5S57C4[];
extern  VTBL_ENTRY _ZTV5S57C4[];
extern Class_Descriptor cd_S57C3;
extern VTBL_ENTRY _ZTI5S57C3[];
extern  VTBL_ENTRY _ZTV5S57C3[];
extern Class_Descriptor cd_S57C2;
extern VTBL_ENTRY _ZTI5S57C2[];
extern  VTBL_ENTRY _ZTV5S57C2[];
static Base_Class bases_S57C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S57C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S57C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S57C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S57C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S57C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S57C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S57C1[];
extern void _ZN5S57C1D1Ev();
extern void _ZN5S57C1D0Ev();
extern void _ZN5S57C72v3Ev();
extern void _ZN5S57C72v4Ev();
extern void _ZN5S57C72v5Ev();
extern void _ZN5S57C72v6Ev();
extern void _ZN5S57C72v7Ev();
extern void _ZN5S57C72v8Ev();
extern void _ZN5S57C72v9Ev();
extern void _ZN5S57C73v10Ev();
extern void _ZN5S57C73v11Ev();
extern void _ZN5S57C73v12Ev();
extern void _ZN5S57C73v13Ev();
extern void _ZN5S57C73v14Ev();
extern void _ZN5S57C73v15Ev();
extern void _ZN5S57C73v16Ev();
extern void _ZN5S57C73v17Ev();
extern void _ZN5S57C73v18Ev();
extern void _ZN5S57C73v19Ev();
extern void _ZN5S57C73v20Ev();
extern void _ZN5S57C73v21Ev();
extern void _ZN5S57C73v22Ev();
extern void _ZN5S57C73v23Ev();
extern void _ZN5S57C73v24Ev();
extern void _ZN5S57C73v25Ev();
extern void _ZN5S57C73v26Ev();
extern void _ZN5S57C73v27Ev();
extern void _ZN5S57C73v28Ev();
extern void _ZN5S57C73v29Ev();
extern void _ZN5S57C73v30Ev();
extern void _ZN5S57C73v31Ev();
extern void _ZN5S57C73v32Ev();
extern void _ZN5S57C73v33Ev();
extern void _ZN5S57C73v34Ev();
extern void _ZN5S57C73v35Ev();
extern void _ZN5S57C73v36Ev();
extern void _ZN5S57C73v37Ev();
extern void _ZN5S57C73v38Ev();
extern void _ZN5S57C73v39Ev();
extern void _ZN5S57C73v40Ev();
extern void _ZN5S57C73v41Ev();
extern void _ZN5S57C73v42Ev();
extern void _ZN5S57C73v43Ev();
extern void _ZN5S57C73v44Ev();
extern void _ZN5S57C73v45Ev();
extern void _ZN5S57C73v46Ev();
extern void _ZN5S57C73v47Ev();
extern void _ZN5S57C73v48Ev();
extern void _ZN5S57C73v49Ev();
extern void _ZN5S57C73v50Ev();
extern void _ZN5S57C73v51Ev();
extern void _ZN5S57C73v52Ev();
extern void _ZN5S57C73v53Ev();
extern void _ZN5S57C73v54Ev();
extern void _ZN5S57C73v55Ev();
extern void _ZN5S57C73v56Ev();
extern void _ZN5S57C73v57Ev();
extern void _ZN5S57C73v58Ev();
extern void _ZN5S57C73v59Ev();
extern void _ZN5S57C73v60Ev();
extern void _ZN5S57C73v61Ev();
extern void _ZN5S57C73v62Ev();
extern void _ZN5S57C73v63Ev();
extern void _ZN5S57C73v64Ev();
extern void _ZN5S57C73v65Ev();
extern void _ZN5S57C73v66Ev();
extern void _ZN5S57C63v67Ev();
extern void _ZN5S57C63v68Ev();
extern void _ZN5S57C63v69Ev();
extern void _ZN5S57C63v70Ev();
extern void _ZN5S57C63v71Ev();
extern void _ZN5S57C63v72Ev();
extern void _ZN5S57C63v73Ev();
extern void _ZN5S57C63v74Ev();
extern void _ZN5S57C63v75Ev();
extern void _ZN5S57C63v76Ev();
extern void _ZN5S57C63v77Ev();
extern void _ZN5S57C63v78Ev();
extern void _ZN5S57C63v79Ev();
extern void _ZN5S57C63v80Ev();
extern void _ZN5S57C63v81Ev();
extern void _ZN5S57C63v82Ev();
extern void _ZN5S57C63v83Ev();
extern void _ZN5S57C63v84Ev();
extern void _ZN5S57C63v85Ev();
extern void _ZN5S57C63v86Ev();
extern void _ZN5S57C63v87Ev();
extern void _ZN5S57C63v88Ev();
extern void _ZN5S57C53v89Ev();
extern void _ZN5S57C53v90Ev();
extern void _ZN5S57C53v91Ev();
extern void _ZN5S57C53v92Ev();
extern void _ZN5S57C53v93Ev();
extern void _ZN5S57C53v94Ev();
extern void _ZN5S57C53v95Ev();
extern void _ZN5S57C53v96Ev();
extern void _ZN5S57C53v97Ev();
extern void _ZN5S57C53v98Ev();
extern void _ZN5S57C53v99Ev();
extern void _ZN5S57C54v100Ev();
extern void _ZN5S57C54v101Ev();
extern void _ZN5S57C54v102Ev();
extern void _ZN5S57C54v103Ev();
extern void _ZN5S57C54v104Ev();
extern void _ZN5S57C54v105Ev();
extern void _ZN5S57C54v106Ev();
extern void _ZN5S57C54v107Ev();
extern void _ZN5S57C54v108Ev();
extern void _ZN5S57C44v109Ev();
extern void _ZN5S57C44v110Ev();
extern void _ZN5S57C44v111Ev();
extern void _ZN5S57C44v112Ev();
extern void _ZN5S57C44v113Ev();
extern void _ZN5S57C44v114Ev();
extern void _ZN5S57C44v115Ev();
extern void _ZN5S57C44v116Ev();
extern void _ZN5S57C44v117Ev();
extern void _ZN5S57C44v118Ev();
extern void _ZN5S57C44v119Ev();
extern void _ZN5S57C44v120Ev();
extern void _ZN5S57C44v121Ev();
extern void _ZN5S57C44v122Ev();
extern void _ZN5S57C34v123Ev();
extern void _ZN5S57C34v124Ev();
extern void _ZN5S57C34v125Ev();
extern void _ZN5S57C34v126Ev();
extern void _ZN5S57C34v127Ev();
extern void _ZN5S57C34v128Ev();
extern void _ZN5S57C34v129Ev();
extern void _ZN5S57C34v130Ev();
extern void _ZN5S57C34v131Ev();
extern void _ZN5S57C34v132Ev();
extern void _ZN5S57C34v133Ev();
extern void _ZN5S57C24v134Ev();
extern void _ZN5S57C24v135Ev();
extern void _ZN5S57C12v1Ev();
extern void _ZN5S57C12v2Ev();
static  VTBL_ENTRY vtc_S57C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S57C1[0]),
  (VTBL_ENTRY)&_ZN5S57C1D1Ev,
  (VTBL_ENTRY)&_ZN5S57C1D0Ev,
  (VTBL_ENTRY)&_ZN5S57C72v3Ev,
  (VTBL_ENTRY)&_ZN5S57C72v4Ev,
  (VTBL_ENTRY)&_ZN5S57C72v5Ev,
  (VTBL_ENTRY)&_ZN5S57C72v6Ev,
  (VTBL_ENTRY)&_ZN5S57C72v7Ev,
  (VTBL_ENTRY)&_ZN5S57C72v8Ev,
  (VTBL_ENTRY)&_ZN5S57C72v9Ev,
  (VTBL_ENTRY)&_ZN5S57C73v10Ev,
  (VTBL_ENTRY)&_ZN5S57C73v11Ev,
  (VTBL_ENTRY)&_ZN5S57C73v12Ev,
  (VTBL_ENTRY)&_ZN5S57C73v13Ev,
  (VTBL_ENTRY)&_ZN5S57C73v14Ev,
  (VTBL_ENTRY)&_ZN5S57C73v15Ev,
  (VTBL_ENTRY)&_ZN5S57C73v16Ev,
  (VTBL_ENTRY)&_ZN5S57C73v17Ev,
  (VTBL_ENTRY)&_ZN5S57C73v18Ev,
  (VTBL_ENTRY)&_ZN5S57C73v19Ev,
  (VTBL_ENTRY)&_ZN5S57C73v20Ev,
  (VTBL_ENTRY)&_ZN5S57C73v21Ev,
  (VTBL_ENTRY)&_ZN5S57C73v22Ev,
  (VTBL_ENTRY)&_ZN5S57C73v23Ev,
  (VTBL_ENTRY)&_ZN5S57C73v24Ev,
  (VTBL_ENTRY)&_ZN5S57C73v25Ev,
  (VTBL_ENTRY)&_ZN5S57C73v26Ev,
  (VTBL_ENTRY)&_ZN5S57C73v27Ev,
  (VTBL_ENTRY)&_ZN5S57C73v28Ev,
  (VTBL_ENTRY)&_ZN5S57C73v29Ev,
  (VTBL_ENTRY)&_ZN5S57C73v30Ev,
  (VTBL_ENTRY)&_ZN5S57C73v31Ev,
  (VTBL_ENTRY)&_ZN5S57C73v32Ev,
  (VTBL_ENTRY)&_ZN5S57C73v33Ev,
  (VTBL_ENTRY)&_ZN5S57C73v34Ev,
  (VTBL_ENTRY)&_ZN5S57C73v35Ev,
  (VTBL_ENTRY)&_ZN5S57C73v36Ev,
  (VTBL_ENTRY)&_ZN5S57C73v37Ev,
  (VTBL_ENTRY)&_ZN5S57C73v38Ev,
  (VTBL_ENTRY)&_ZN5S57C73v39Ev,
  (VTBL_ENTRY)&_ZN5S57C73v40Ev,
  (VTBL_ENTRY)&_ZN5S57C73v41Ev,
  (VTBL_ENTRY)&_ZN5S57C73v42Ev,
  (VTBL_ENTRY)&_ZN5S57C73v43Ev,
  (VTBL_ENTRY)&_ZN5S57C73v44Ev,
  (VTBL_ENTRY)&_ZN5S57C73v45Ev,
  (VTBL_ENTRY)&_ZN5S57C73v46Ev,
  (VTBL_ENTRY)&_ZN5S57C73v47Ev,
  (VTBL_ENTRY)&_ZN5S57C73v48Ev,
  (VTBL_ENTRY)&_ZN5S57C73v49Ev,
  (VTBL_ENTRY)&_ZN5S57C73v50Ev,
  (VTBL_ENTRY)&_ZN5S57C73v51Ev,
  (VTBL_ENTRY)&_ZN5S57C73v52Ev,
  (VTBL_ENTRY)&_ZN5S57C73v53Ev,
  (VTBL_ENTRY)&_ZN5S57C73v54Ev,
  (VTBL_ENTRY)&_ZN5S57C73v55Ev,
  (VTBL_ENTRY)&_ZN5S57C73v56Ev,
  (VTBL_ENTRY)&_ZN5S57C73v57Ev,
  (VTBL_ENTRY)&_ZN5S57C73v58Ev,
  (VTBL_ENTRY)&_ZN5S57C73v59Ev,
  (VTBL_ENTRY)&_ZN5S57C73v60Ev,
  (VTBL_ENTRY)&_ZN5S57C73v61Ev,
  (VTBL_ENTRY)&_ZN5S57C73v62Ev,
  (VTBL_ENTRY)&_ZN5S57C73v63Ev,
  (VTBL_ENTRY)&_ZN5S57C73v64Ev,
  (VTBL_ENTRY)&_ZN5S57C73v65Ev,
  (VTBL_ENTRY)&_ZN5S57C73v66Ev,
  (VTBL_ENTRY)&_ZN5S57C63v67Ev,
  (VTBL_ENTRY)&_ZN5S57C63v68Ev,
  (VTBL_ENTRY)&_ZN5S57C63v69Ev,
  (VTBL_ENTRY)&_ZN5S57C63v70Ev,
  (VTBL_ENTRY)&_ZN5S57C63v71Ev,
  (VTBL_ENTRY)&_ZN5S57C63v72Ev,
  (VTBL_ENTRY)&_ZN5S57C63v73Ev,
  (VTBL_ENTRY)&_ZN5S57C63v74Ev,
  (VTBL_ENTRY)&_ZN5S57C63v75Ev,
  (VTBL_ENTRY)&_ZN5S57C63v76Ev,
  (VTBL_ENTRY)&_ZN5S57C63v77Ev,
  (VTBL_ENTRY)&_ZN5S57C63v78Ev,
  (VTBL_ENTRY)&_ZN5S57C63v79Ev,
  (VTBL_ENTRY)&_ZN5S57C63v80Ev,
  (VTBL_ENTRY)&_ZN5S57C63v81Ev,
  (VTBL_ENTRY)&_ZN5S57C63v82Ev,
  (VTBL_ENTRY)&_ZN5S57C63v83Ev,
  (VTBL_ENTRY)&_ZN5S57C63v84Ev,
  (VTBL_ENTRY)&_ZN5S57C63v85Ev,
  (VTBL_ENTRY)&_ZN5S57C63v86Ev,
  (VTBL_ENTRY)&_ZN5S57C63v87Ev,
  (VTBL_ENTRY)&_ZN5S57C63v88Ev,
  (VTBL_ENTRY)&_ZN5S57C53v89Ev,
  (VTBL_ENTRY)&_ZN5S57C53v90Ev,
  (VTBL_ENTRY)&_ZN5S57C53v91Ev,
  (VTBL_ENTRY)&_ZN5S57C53v92Ev,
  (VTBL_ENTRY)&_ZN5S57C53v93Ev,
  (VTBL_ENTRY)&_ZN5S57C53v94Ev,
  (VTBL_ENTRY)&_ZN5S57C53v95Ev,
  (VTBL_ENTRY)&_ZN5S57C53v96Ev,
  (VTBL_ENTRY)&_ZN5S57C53v97Ev,
  (VTBL_ENTRY)&_ZN5S57C53v98Ev,
  (VTBL_ENTRY)&_ZN5S57C53v99Ev,
  (VTBL_ENTRY)&_ZN5S57C54v100Ev,
  (VTBL_ENTRY)&_ZN5S57C54v101Ev,
  (VTBL_ENTRY)&_ZN5S57C54v102Ev,
  (VTBL_ENTRY)&_ZN5S57C54v103Ev,
  (VTBL_ENTRY)&_ZN5S57C54v104Ev,
  (VTBL_ENTRY)&_ZN5S57C54v105Ev,
  (VTBL_ENTRY)&_ZN5S57C54v106Ev,
  (VTBL_ENTRY)&_ZN5S57C54v107Ev,
  (VTBL_ENTRY)&_ZN5S57C54v108Ev,
  (VTBL_ENTRY)&_ZN5S57C44v109Ev,
  (VTBL_ENTRY)&_ZN5S57C44v110Ev,
  (VTBL_ENTRY)&_ZN5S57C44v111Ev,
  (VTBL_ENTRY)&_ZN5S57C44v112Ev,
  (VTBL_ENTRY)&_ZN5S57C44v113Ev,
  (VTBL_ENTRY)&_ZN5S57C44v114Ev,
  (VTBL_ENTRY)&_ZN5S57C44v115Ev,
  (VTBL_ENTRY)&_ZN5S57C44v116Ev,
  (VTBL_ENTRY)&_ZN5S57C44v117Ev,
  (VTBL_ENTRY)&_ZN5S57C44v118Ev,
  (VTBL_ENTRY)&_ZN5S57C44v119Ev,
  (VTBL_ENTRY)&_ZN5S57C44v120Ev,
  (VTBL_ENTRY)&_ZN5S57C44v121Ev,
  (VTBL_ENTRY)&_ZN5S57C44v122Ev,
  (VTBL_ENTRY)&_ZN5S57C34v123Ev,
  (VTBL_ENTRY)&_ZN5S57C34v124Ev,
  (VTBL_ENTRY)&_ZN5S57C34v125Ev,
  (VTBL_ENTRY)&_ZN5S57C34v126Ev,
  (VTBL_ENTRY)&_ZN5S57C34v127Ev,
  (VTBL_ENTRY)&_ZN5S57C34v128Ev,
  (VTBL_ENTRY)&_ZN5S57C34v129Ev,
  (VTBL_ENTRY)&_ZN5S57C34v130Ev,
  (VTBL_ENTRY)&_ZN5S57C34v131Ev,
  (VTBL_ENTRY)&_ZN5S57C34v132Ev,
  (VTBL_ENTRY)&_ZN5S57C34v133Ev,
  (VTBL_ENTRY)&_ZN5S57C24v134Ev,
  (VTBL_ENTRY)&_ZN5S57C24v135Ev,
  (VTBL_ENTRY)&_ZN5S57C12v1Ev,
  (VTBL_ENTRY)&_ZN5S57C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S57C1[];
extern  VTBL_ENTRY _ZTV5S57C1[];
Class_Descriptor cd_S57C1 = {  "S57C1", // class name
  bases_S57C1, 6,
  &(vtc_S57C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI5S57C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S57C1),139, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S55C7  {
  int s55c7f0;
  __tsi64 s55c7f1;
  void *s55c7f2[4];
  int s55c7f3[2];
  void *s55c7f4;
  ::S3350C4_nt s55c7f5;
  void *s55c7f6[2];
  virtual  ~S55C7(); // _ZN5S55C7D1Ev
  virtual void  v3(); // _ZN5S55C72v3Ev
  virtual void  v4(); // _ZN5S55C72v4Ev
  virtual void  v5(); // _ZN5S55C72v5Ev
  virtual void  v6(); // _ZN5S55C72v6Ev
  virtual void  v7(); // _ZN5S55C72v7Ev
  virtual void  v8(); // _ZN5S55C72v8Ev
  virtual void  v9(); // _ZN5S55C72v9Ev
  virtual void  v10(); // _ZN5S55C73v10Ev
  virtual void  v11(); // _ZN5S55C73v11Ev
  virtual void  v12(); // _ZN5S55C73v12Ev
  virtual void  v13(); // _ZN5S55C73v13Ev
  virtual void  v14(); // _ZN5S55C73v14Ev
  virtual void  v15(); // _ZN5S55C73v15Ev
  virtual void  v16(); // _ZN5S55C73v16Ev
  virtual void  v17(); // _ZN5S55C73v17Ev
  virtual void  v18(); // _ZN5S55C73v18Ev
  virtual void  v19(); // _ZN5S55C73v19Ev
  virtual void  v20(); // _ZN5S55C73v20Ev
  virtual void  v21(); // _ZN5S55C73v21Ev
  virtual void  v22(); // _ZN5S55C73v22Ev
  virtual void  v23(); // _ZN5S55C73v23Ev
  virtual void  v24(); // _ZN5S55C73v24Ev
  virtual void  v25(); // _ZN5S55C73v25Ev
  virtual void  v26(); // _ZN5S55C73v26Ev
  virtual void  v27(); // _ZN5S55C73v27Ev
  virtual void  v28(); // _ZN5S55C73v28Ev
  virtual void  v29(); // _ZN5S55C73v29Ev
  virtual void  v30(); // _ZN5S55C73v30Ev
  virtual void  v31(); // _ZN5S55C73v31Ev
  virtual void  v32(); // _ZN5S55C73v32Ev
  virtual void  v33(); // _ZN5S55C73v33Ev
  virtual void  v34(); // _ZN5S55C73v34Ev
  virtual void  v35(); // _ZN5S55C73v35Ev
  virtual void  v36(); // _ZN5S55C73v36Ev
  virtual void  v37(); // _ZN5S55C73v37Ev
  virtual void  v38(); // _ZN5S55C73v38Ev
  virtual void  v39(); // _ZN5S55C73v39Ev
  virtual void  v40(); // _ZN5S55C73v40Ev
  virtual void  v41(); // _ZN5S55C73v41Ev
  virtual void  v42(); // _ZN5S55C73v42Ev
  virtual void  v43(); // _ZN5S55C73v43Ev
  virtual void  v44(); // _ZN5S55C73v44Ev
  virtual void  v45(); // _ZN5S55C73v45Ev
  virtual void  v46(); // _ZN5S55C73v46Ev
  virtual void  v47(); // _ZN5S55C73v47Ev
  virtual void  v48(); // _ZN5S55C73v48Ev
  virtual void  v49(); // _ZN5S55C73v49Ev
  virtual void  v50(); // _ZN5S55C73v50Ev
  virtual void  v51(); // _ZN5S55C73v51Ev
  virtual void  v52(); // _ZN5S55C73v52Ev
  virtual void  v53(); // _ZN5S55C73v53Ev
  virtual void  v54(); // _ZN5S55C73v54Ev
  virtual void  v55(); // _ZN5S55C73v55Ev
  virtual void  v56(); // _ZN5S55C73v56Ev
  virtual void  v57(); // _ZN5S55C73v57Ev
  virtual void  v58(); // _ZN5S55C73v58Ev
  virtual void  v59(); // _ZN5S55C73v59Ev
  virtual void  v60(); // _ZN5S55C73v60Ev
  virtual void  v61(); // _ZN5S55C73v61Ev
  virtual void  v62(); // _ZN5S55C73v62Ev
  virtual void  v63(); // _ZN5S55C73v63Ev
  virtual void  v64(); // _ZN5S55C73v64Ev
  virtual void  v65(); // _ZN5S55C73v65Ev
  virtual void  v66(); // _ZN5S55C73v66Ev
  S55C7(); // tgen
};
//SIG(-1 S55C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S55C7 ::~S55C7(){ note_dtor("S55C7", this);}
void  S55C7 ::v3(){vfunc_called(this, "_ZN5S55C72v3Ev");}
void  S55C7 ::v4(){vfunc_called(this, "_ZN5S55C72v4Ev");}
void  S55C7 ::v5(){vfunc_called(this, "_ZN5S55C72v5Ev");}
void  S55C7 ::v6(){vfunc_called(this, "_ZN5S55C72v6Ev");}
void  S55C7 ::v7(){vfunc_called(this, "_ZN5S55C72v7Ev");}
void  S55C7 ::v8(){vfunc_called(this, "_ZN5S55C72v8Ev");}
void  S55C7 ::v9(){vfunc_called(this, "_ZN5S55C72v9Ev");}
void  S55C7 ::v10(){vfunc_called(this, "_ZN5S55C73v10Ev");}
void  S55C7 ::v11(){vfunc_called(this, "_ZN5S55C73v11Ev");}
void  S55C7 ::v12(){vfunc_called(this, "_ZN5S55C73v12Ev");}
void  S55C7 ::v13(){vfunc_called(this, "_ZN5S55C73v13Ev");}
void  S55C7 ::v14(){vfunc_called(this, "_ZN5S55C73v14Ev");}
void  S55C7 ::v15(){vfunc_called(this, "_ZN5S55C73v15Ev");}
void  S55C7 ::v16(){vfunc_called(this, "_ZN5S55C73v16Ev");}
void  S55C7 ::v17(){vfunc_called(this, "_ZN5S55C73v17Ev");}
void  S55C7 ::v18(){vfunc_called(this, "_ZN5S55C73v18Ev");}
void  S55C7 ::v19(){vfunc_called(this, "_ZN5S55C73v19Ev");}
void  S55C7 ::v20(){vfunc_called(this, "_ZN5S55C73v20Ev");}
void  S55C7 ::v21(){vfunc_called(this, "_ZN5S55C73v21Ev");}
void  S55C7 ::v22(){vfunc_called(this, "_ZN5S55C73v22Ev");}
void  S55C7 ::v23(){vfunc_called(this, "_ZN5S55C73v23Ev");}
void  S55C7 ::v24(){vfunc_called(this, "_ZN5S55C73v24Ev");}
void  S55C7 ::v25(){vfunc_called(this, "_ZN5S55C73v25Ev");}
void  S55C7 ::v26(){vfunc_called(this, "_ZN5S55C73v26Ev");}
void  S55C7 ::v27(){vfunc_called(this, "_ZN5S55C73v27Ev");}
void  S55C7 ::v28(){vfunc_called(this, "_ZN5S55C73v28Ev");}
void  S55C7 ::v29(){vfunc_called(this, "_ZN5S55C73v29Ev");}
void  S55C7 ::v30(){vfunc_called(this, "_ZN5S55C73v30Ev");}
void  S55C7 ::v31(){vfunc_called(this, "_ZN5S55C73v31Ev");}
void  S55C7 ::v32(){vfunc_called(this, "_ZN5S55C73v32Ev");}
void  S55C7 ::v33(){vfunc_called(this, "_ZN5S55C73v33Ev");}
void  S55C7 ::v34(){vfunc_called(this, "_ZN5S55C73v34Ev");}
void  S55C7 ::v35(){vfunc_called(this, "_ZN5S55C73v35Ev");}
void  S55C7 ::v36(){vfunc_called(this, "_ZN5S55C73v36Ev");}
void  S55C7 ::v37(){vfunc_called(this, "_ZN5S55C73v37Ev");}
void  S55C7 ::v38(){vfunc_called(this, "_ZN5S55C73v38Ev");}
void  S55C7 ::v39(){vfunc_called(this, "_ZN5S55C73v39Ev");}
void  S55C7 ::v40(){vfunc_called(this, "_ZN5S55C73v40Ev");}
void  S55C7 ::v41(){vfunc_called(this, "_ZN5S55C73v41Ev");}
void  S55C7 ::v42(){vfunc_called(this, "_ZN5S55C73v42Ev");}
void  S55C7 ::v43(){vfunc_called(this, "_ZN5S55C73v43Ev");}
void  S55C7 ::v44(){vfunc_called(this, "_ZN5S55C73v44Ev");}
void  S55C7 ::v45(){vfunc_called(this, "_ZN5S55C73v45Ev");}
void  S55C7 ::v46(){vfunc_called(this, "_ZN5S55C73v46Ev");}
void  S55C7 ::v47(){vfunc_called(this, "_ZN5S55C73v47Ev");}
void  S55C7 ::v48(){vfunc_called(this, "_ZN5S55C73v48Ev");}
void  S55C7 ::v49(){vfunc_called(this, "_ZN5S55C73v49Ev");}
void  S55C7 ::v50(){vfunc_called(this, "_ZN5S55C73v50Ev");}
void  S55C7 ::v51(){vfunc_called(this, "_ZN5S55C73v51Ev");}
void  S55C7 ::v52(){vfunc_called(this, "_ZN5S55C73v52Ev");}
void  S55C7 ::v53(){vfunc_called(this, "_ZN5S55C73v53Ev");}
void  S55C7 ::v54(){vfunc_called(this, "_ZN5S55C73v54Ev");}
void  S55C7 ::v55(){vfunc_called(this, "_ZN5S55C73v55Ev");}
void  S55C7 ::v56(){vfunc_called(this, "_ZN5S55C73v56Ev");}
void  S55C7 ::v57(){vfunc_called(this, "_ZN5S55C73v57Ev");}
void  S55C7 ::v58(){vfunc_called(this, "_ZN5S55C73v58Ev");}
void  S55C7 ::v59(){vfunc_called(this, "_ZN5S55C73v59Ev");}
void  S55C7 ::v60(){vfunc_called(this, "_ZN5S55C73v60Ev");}
void  S55C7 ::v61(){vfunc_called(this, "_ZN5S55C73v61Ev");}
void  S55C7 ::v62(){vfunc_called(this, "_ZN5S55C73v62Ev");}
void  S55C7 ::v63(){vfunc_called(this, "_ZN5S55C73v63Ev");}
void  S55C7 ::v64(){vfunc_called(this, "_ZN5S55C73v64Ev");}
void  S55C7 ::v65(){vfunc_called(this, "_ZN5S55C73v65Ev");}
void  S55C7 ::v66(){vfunc_called(this, "_ZN5S55C73v66Ev");}
S55C7 ::S55C7(){ note_ctor("S55C7", this);} // tgen

static void Test_S55C7()
{
  extern Class_Descriptor cd_S55C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S55C7, buf);
    S55C7 *dp, &lv = *(dp=new (buf) S55C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S55C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C7)");
    check_field_offset(lv, s55c7f0, ABISELECT(8,4), "S55C7.s55c7f0");
    check_field_offset(lv, s55c7f1, ABISELECT(16,8), "S55C7.s55c7f1");
    check_field_offset(lv, s55c7f2, ABISELECT(24,16), "S55C7.s55c7f2");
    check_field_offset(lv, s55c7f3, ABISELECT(56,32), "S55C7.s55c7f3");
    check_field_offset(lv, s55c7f4, ABISELECT(64,40), "S55C7.s55c7f4");
    check_field_offset(lv, s55c7f5, ABISELECT(72,44), "S55C7.s55c7f5");
    check_field_offset(lv, s55c7f6, ABISELECT(80,52), "S55C7.s55c7f6");
    test_class_info(&lv, &cd_S55C7);
    dp->~S55C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C7(Test_S55C7, "S55C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S55C7C1Ev();
extern void _ZN5S55C7D1Ev();
Name_Map name_map_S55C7[] = {
  NSPAIR(_ZN5S55C7C1Ev),
  NSPAIR(_ZN5S55C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S55C7[];
extern void _ZN5S55C7D1Ev();
extern void _ZN5S55C7D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
static  VTBL_ENTRY vtc_S55C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C7[0]),
  (VTBL_ENTRY)&_ZN5S55C7D1Ev,
  (VTBL_ENTRY)&_ZN5S55C7D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
Class_Descriptor cd_S55C7 = {  "S55C7", // class name
  0,0,//no base classes
  &(vtc_S55C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S55C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S55C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S55C6  : S55C7 {
  int s55c6f0[2];
  void *s55c6f1;
  int s55c6f2[2];
  ::S287C8_nt s55c6f3;
  ::S287C8_nt s55c6f4;
  ::S2121C38 s55c6f5;
  ::S287C8_nt s55c6f6;
  unsigned int s55c6f7:1;
  unsigned int s55c6f8:1;
  unsigned int s55c6f9:1;
  unsigned int s55c6f10:1;
  unsigned int s55c6f11:1;
  int s55c6f12[2];
  virtual  ~S55C6(); // _ZN5S55C6D1Ev
  virtual void  v67(); // _ZN5S55C63v67Ev
  virtual void  v68(); // _ZN5S55C63v68Ev
  virtual void  v69(); // _ZN5S55C63v69Ev
  virtual void  v70(); // _ZN5S55C63v70Ev
  virtual void  v71(); // _ZN5S55C63v71Ev
  virtual void  v72(); // _ZN5S55C63v72Ev
  virtual void  v73(); // _ZN5S55C63v73Ev
  virtual void  v74(); // _ZN5S55C63v74Ev
  virtual void  v75(); // _ZN5S55C63v75Ev
  virtual void  v76(); // _ZN5S55C63v76Ev
  virtual void  v77(); // _ZN5S55C63v77Ev
  virtual void  v78(); // _ZN5S55C63v78Ev
  virtual void  v79(); // _ZN5S55C63v79Ev
  virtual void  v80(); // _ZN5S55C63v80Ev
  virtual void  v81(); // _ZN5S55C63v81Ev
  virtual void  v82(); // _ZN5S55C63v82Ev
  virtual void  v83(); // _ZN5S55C63v83Ev
  virtual void  v84(); // _ZN5S55C63v84Ev
  virtual void  v85(); // _ZN5S55C63v85Ev
  virtual void  v86(); // _ZN5S55C63v86Ev
  virtual void  v87(); // _ZN5S55C63v87Ev
  virtual void  v88(); // _ZN5S55C63v88Ev
  S55C6(); // tgen
};
//SIG(-1 S55C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S55C6 ::~S55C6(){ note_dtor("S55C6", this);}
void  S55C6 ::v67(){vfunc_called(this, "_ZN5S55C63v67Ev");}
void  S55C6 ::v68(){vfunc_called(this, "_ZN5S55C63v68Ev");}
void  S55C6 ::v69(){vfunc_called(this, "_ZN5S55C63v69Ev");}
void  S55C6 ::v70(){vfunc_called(this, "_ZN5S55C63v70Ev");}
void  S55C6 ::v71(){vfunc_called(this, "_ZN5S55C63v71Ev");}
void  S55C6 ::v72(){vfunc_called(this, "_ZN5S55C63v72Ev");}
void  S55C6 ::v73(){vfunc_called(this, "_ZN5S55C63v73Ev");}
void  S55C6 ::v74(){vfunc_called(this, "_ZN5S55C63v74Ev");}
void  S55C6 ::v75(){vfunc_called(this, "_ZN5S55C63v75Ev");}
void  S55C6 ::v76(){vfunc_called(this, "_ZN5S55C63v76Ev");}
void  S55C6 ::v77(){vfunc_called(this, "_ZN5S55C63v77Ev");}
void  S55C6 ::v78(){vfunc_called(this, "_ZN5S55C63v78Ev");}
void  S55C6 ::v79(){vfunc_called(this, "_ZN5S55C63v79Ev");}
void  S55C6 ::v80(){vfunc_called(this, "_ZN5S55C63v80Ev");}
void  S55C6 ::v81(){vfunc_called(this, "_ZN5S55C63v81Ev");}
void  S55C6 ::v82(){vfunc_called(this, "_ZN5S55C63v82Ev");}
void  S55C6 ::v83(){vfunc_called(this, "_ZN5S55C63v83Ev");}
void  S55C6 ::v84(){vfunc_called(this, "_ZN5S55C63v84Ev");}
void  S55C6 ::v85(){vfunc_called(this, "_ZN5S55C63v85Ev");}
void  S55C6 ::v86(){vfunc_called(this, "_ZN5S55C63v86Ev");}
void  S55C6 ::v87(){vfunc_called(this, "_ZN5S55C63v87Ev");}
void  S55C6 ::v88(){vfunc_called(this, "_ZN5S55C63v88Ev");}
S55C6 ::S55C6(){ note_ctor("S55C6", this);} // tgen

static void Test_S55C6()
{
  extern Class_Descriptor cd_S55C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S55C6, buf);
    S55C6 *dp, &lv = *(dp=new (buf) S55C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S55C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C6)");
    check_base_class_offset(lv, (S55C7*), 0, "S55C6");
    check_field_offset(lv, s55c6f0, ABISELECT(96,60), "S55C6.s55c6f0");
    check_field_offset(lv, s55c6f1, ABISELECT(104,68), "S55C6.s55c6f1");
    check_field_offset(lv, s55c6f2, ABISELECT(112,72), "S55C6.s55c6f2");
    check_field_offset(lv, s55c6f3, ABISELECT(120,80), "S55C6.s55c6f3");
    check_field_offset(lv, s55c6f4, ABISELECT(136,92), "S55C6.s55c6f4");
    check_field_offset(lv, s55c6f5, ABISELECT(152,104), "S55C6.s55c6f5");
    check_field_offset(lv, s55c6f6, ABISELECT(160,108), "S55C6.s55c6f6");
    set_bf_and_test(lv, s55c6f7, ABISELECT(176,120), 0, 1, 1, "S55C6");
    set_bf_and_test(lv, s55c6f8, ABISELECT(176,120), 1, 1, 1, "S55C6");
    set_bf_and_test(lv, s55c6f9, ABISELECT(176,120), 2, 1, 1, "S55C6");
    set_bf_and_test(lv, s55c6f10, ABISELECT(176,120), 3, 1, 1, "S55C6");
    set_bf_and_test(lv, s55c6f11, ABISELECT(176,120), 4, 1, 1, "S55C6");
    check_field_offset(lv, s55c6f12, ABISELECT(180,124), "S55C6.s55c6f12");
    test_class_info(&lv, &cd_S55C6);
    dp->~S55C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C6(Test_S55C6, "S55C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S55C6C1Ev();
extern void _ZN5S55C6D1Ev();
Name_Map name_map_S55C6[] = {
  NSPAIR(_ZN5S55C6C1Ev),
  NSPAIR(_ZN5S55C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
static Base_Class bases_S55C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S55C6[];
extern void _ZN5S55C6D1Ev();
extern void _ZN5S55C6D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
static  VTBL_ENTRY vtc_S55C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C6[0]),
  (VTBL_ENTRY)&_ZN5S55C6D1Ev,
  (VTBL_ENTRY)&_ZN5S55C6D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
Class_Descriptor cd_S55C6 = {  "S55C6", // class name
  bases_S55C6, 1,
  &(vtc_S55C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S55C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S55C5  : S55C6 {
  unsigned int s55c5f0:1;
  unsigned int s55c5f1:1;
  unsigned int s55c5f2:1;
  ::S3350C17 s55c5f3;
  ::S3350C11 s55c5f4;
  ::S3350C5_nt s55c5f5;
  ::S287C27 s55c5f6;
  int s55c5f7[3];
  virtual  ~S55C5(); // _ZN5S55C5D1Ev
  virtual void  v89(); // _ZN5S55C53v89Ev
  virtual void  v90(); // _ZN5S55C53v90Ev
  virtual void  v91(); // _ZN5S55C53v91Ev
  virtual void  v92(); // _ZN5S55C53v92Ev
  virtual void  v93(); // _ZN5S55C53v93Ev
  virtual void  v94(); // _ZN5S55C53v94Ev
  virtual void  v95(); // _ZN5S55C53v95Ev
  virtual void  v96(); // _ZN5S55C53v96Ev
  virtual void  v97(); // _ZN5S55C53v97Ev
  virtual void  v98(); // _ZN5S55C53v98Ev
  virtual void  v99(); // _ZN5S55C53v99Ev
  virtual void  v100(); // _ZN5S55C54v100Ev
  virtual void  v101(); // _ZN5S55C54v101Ev
  virtual void  v102(); // _ZN5S55C54v102Ev
  virtual void  v103(); // _ZN5S55C54v103Ev
  virtual void  v104(); // _ZN5S55C54v104Ev
  virtual void  v105(); // _ZN5S55C54v105Ev
  virtual void  v106(); // _ZN5S55C54v106Ev
  virtual void  v107(); // _ZN5S55C54v107Ev
  virtual void  v108(); // _ZN5S55C54v108Ev
  S55C5(); // tgen
};
//SIG(-1 S55C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S55C5 ::~S55C5(){ note_dtor("S55C5", this);}
void  S55C5 ::v89(){vfunc_called(this, "_ZN5S55C53v89Ev");}
void  S55C5 ::v90(){vfunc_called(this, "_ZN5S55C53v90Ev");}
void  S55C5 ::v91(){vfunc_called(this, "_ZN5S55C53v91Ev");}
void  S55C5 ::v92(){vfunc_called(this, "_ZN5S55C53v92Ev");}
void  S55C5 ::v93(){vfunc_called(this, "_ZN5S55C53v93Ev");}
void  S55C5 ::v94(){vfunc_called(this, "_ZN5S55C53v94Ev");}
void  S55C5 ::v95(){vfunc_called(this, "_ZN5S55C53v95Ev");}
void  S55C5 ::v96(){vfunc_called(this, "_ZN5S55C53v96Ev");}
void  S55C5 ::v97(){vfunc_called(this, "_ZN5S55C53v97Ev");}
void  S55C5 ::v98(){vfunc_called(this, "_ZN5S55C53v98Ev");}
void  S55C5 ::v99(){vfunc_called(this, "_ZN5S55C53v99Ev");}
void  S55C5 ::v100(){vfunc_called(this, "_ZN5S55C54v100Ev");}
void  S55C5 ::v101(){vfunc_called(this, "_ZN5S55C54v101Ev");}
void  S55C5 ::v102(){vfunc_called(this, "_ZN5S55C54v102Ev");}
void  S55C5 ::v103(){vfunc_called(this, "_ZN5S55C54v103Ev");}
void  S55C5 ::v104(){vfunc_called(this, "_ZN5S55C54v104Ev");}
void  S55C5 ::v105(){vfunc_called(this, "_ZN5S55C54v105Ev");}
void  S55C5 ::v106(){vfunc_called(this, "_ZN5S55C54v106Ev");}
void  S55C5 ::v107(){vfunc_called(this, "_ZN5S55C54v107Ev");}
void  S55C5 ::v108(){vfunc_called(this, "_ZN5S55C54v108Ev");}
S55C5 ::S55C5(){ note_ctor("S55C5", this);} // tgen

static void Test_S55C5()
{
  extern Class_Descriptor cd_S55C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S55C5, buf);
    S55C5 *dp, &lv = *(dp=new (buf) S55C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S55C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C5)");
    check_base_class_offset(lv, (S55C7*)(S55C6*), 0, "S55C5");
    check_base_class_offset(lv, (S55C6*), 0, "S55C5");
    set_bf_and_test(lv, s55c5f0, ABISELECT(188,132), 0, 1, 1, "S55C5");
    set_bf_and_test(lv, s55c5f1, ABISELECT(188,132), 1, 1, 1, "S55C5");
    set_bf_and_test(lv, s55c5f2, ABISELECT(188,132), 2, 1, 1, "S55C5");
    check_field_offset(lv, s55c5f3, ABISELECT(192,136), "S55C5.s55c5f3");
    check_field_offset(lv, s55c5f4, ABISELECT(208,148), "S55C5.s55c5f4");
    check_field_offset(lv, s55c5f5, ABISELECT(224,160), "S55C5.s55c5f5");
    check_field_offset(lv, s55c5f6, ABISELECT(240,172), "S55C5.s55c5f6");
    check_field_offset(lv, s55c5f7, ABISELECT(256,184), "S55C5.s55c5f7");
    test_class_info(&lv, &cd_S55C5);
    dp->~S55C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C5(Test_S55C5, "S55C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S55C5C1Ev();
extern void _ZN5S55C5D1Ev();
Name_Map name_map_S55C5[] = {
  NSPAIR(_ZN5S55C5C1Ev),
  NSPAIR(_ZN5S55C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
static Base_Class bases_S55C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S55C5[];
extern void _ZN5S55C5D1Ev();
extern void _ZN5S55C5D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
static  VTBL_ENTRY vtc_S55C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C5[0]),
  (VTBL_ENTRY)&_ZN5S55C5D1Ev,
  (VTBL_ENTRY)&_ZN5S55C5D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
Class_Descriptor cd_S55C5 = {  "S55C5", // class name
  bases_S55C5, 2,
  &(vtc_S55C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S55C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S55C4  : S55C5 {
  void *s55c4f0[2];
  int s55c4f1[4];
  unsigned int s55c4f2:1;
  unsigned int s55c4f3:1;
  unsigned int s55c4f4:1;
  char s55c4f5;
  int s55c4f6;
  unsigned int s55c4f7:1;
  ::S287C23 s55c4f8;
  virtual  ~S55C4(); // _ZN5S55C4D1Ev
  virtual void  v109(); // _ZN5S55C44v109Ev
  virtual void  v110(); // _ZN5S55C44v110Ev
  virtual void  v111(); // _ZN5S55C44v111Ev
  virtual void  v112(); // _ZN5S55C44v112Ev
  virtual void  v113(); // _ZN5S55C44v113Ev
  virtual void  v114(); // _ZN5S55C44v114Ev
  virtual void  v115(); // _ZN5S55C44v115Ev
  virtual void  v116(); // _ZN5S55C44v116Ev
  virtual void  v117(); // _ZN5S55C44v117Ev
  virtual void  v118(); // _ZN5S55C44v118Ev
  virtual void  v119(); // _ZN5S55C44v119Ev
  virtual void  v120(); // _ZN5S55C44v120Ev
  virtual void  v121(); // _ZN5S55C44v121Ev
  virtual void  v122(); // _ZN5S55C44v122Ev
  S55C4(); // tgen
};
//SIG(-1 S55C4) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S55C4 ::~S55C4(){ note_dtor("S55C4", this);}
void  S55C4 ::v109(){vfunc_called(this, "_ZN5S55C44v109Ev");}
void  S55C4 ::v110(){vfunc_called(this, "_ZN5S55C44v110Ev");}
void  S55C4 ::v111(){vfunc_called(this, "_ZN5S55C44v111Ev");}
void  S55C4 ::v112(){vfunc_called(this, "_ZN5S55C44v112Ev");}
void  S55C4 ::v113(){vfunc_called(this, "_ZN5S55C44v113Ev");}
void  S55C4 ::v114(){vfunc_called(this, "_ZN5S55C44v114Ev");}
void  S55C4 ::v115(){vfunc_called(this, "_ZN5S55C44v115Ev");}
void  S55C4 ::v116(){vfunc_called(this, "_ZN5S55C44v116Ev");}
void  S55C4 ::v117(){vfunc_called(this, "_ZN5S55C44v117Ev");}
void  S55C4 ::v118(){vfunc_called(this, "_ZN5S55C44v118Ev");}
void  S55C4 ::v119(){vfunc_called(this, "_ZN5S55C44v119Ev");}
void  S55C4 ::v120(){vfunc_called(this, "_ZN5S55C44v120Ev");}
void  S55C4 ::v121(){vfunc_called(this, "_ZN5S55C44v121Ev");}
void  S55C4 ::v122(){vfunc_called(this, "_ZN5S55C44v122Ev");}
S55C4 ::S55C4(){ note_ctor("S55C4", this);} // tgen

static void Test_S55C4()
{
  extern Class_Descriptor cd_S55C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S55C4, buf);
    S55C4 *dp, &lv = *(dp=new (buf) S55C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S55C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C4)");
    check_base_class_offset(lv, (S55C7*)(S55C6*)(S55C5*), 0, "S55C4");
    check_base_class_offset(lv, (S55C6*)(S55C5*), 0, "S55C4");
    check_base_class_offset(lv, (S55C5*), 0, "S55C4");
    check_field_offset(lv, s55c4f0, ABISELECT(272,196), "S55C4.s55c4f0");
    check_field_offset(lv, s55c4f1, ABISELECT(288,204), "S55C4.s55c4f1");
    set_bf_and_test(lv, s55c4f2, ABISELECT(304,220), 0, 1, 1, "S55C4");
    set_bf_and_test(lv, s55c4f3, ABISELECT(304,220), 1, 1, 1, "S55C4");
    set_bf_and_test(lv, s55c4f4, ABISELECT(304,220), 2, 1, 1, "S55C4");
    check_field_offset(lv, s55c4f5, ABISELECT(305,221), "S55C4.s55c4f5");
    check_field_offset(lv, s55c4f6, ABISELECT(308,224), "S55C4.s55c4f6");
    set_bf_and_test(lv, s55c4f7, ABISELECT(312,228), 0, 1, 1, "S55C4");
    check_field_offset(lv, s55c4f8, ABISELECT(320,232), "S55C4.s55c4f8");
    test_class_info(&lv, &cd_S55C4);
    dp->~S55C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C4(Test_S55C4, "S55C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S55C4C1Ev();
extern void _ZN5S55C4D1Ev();
Name_Map name_map_S55C4[] = {
  NSPAIR(_ZN5S55C4C1Ev),
  NSPAIR(_ZN5S55C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
extern Class_Descriptor cd_S55C5;
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
static Base_Class bases_S55C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S55C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S55C4[];
extern void _ZN5S55C4D1Ev();
extern void _ZN5S55C4D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
extern void _ZN5S55C44v109Ev();
extern void _ZN5S55C44v110Ev();
extern void _ZN5S55C44v111Ev();
extern void _ZN5S55C44v112Ev();
extern void _ZN5S55C44v113Ev();
extern void _ZN5S55C44v114Ev();
extern void _ZN5S55C44v115Ev();
extern void _ZN5S55C44v116Ev();
extern void _ZN5S55C44v117Ev();
extern void _ZN5S55C44v118Ev();
extern void _ZN5S55C44v119Ev();
extern void _ZN5S55C44v120Ev();
extern void _ZN5S55C44v121Ev();
extern void _ZN5S55C44v122Ev();
static  VTBL_ENTRY vtc_S55C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C4[0]),
  (VTBL_ENTRY)&_ZN5S55C4D1Ev,
  (VTBL_ENTRY)&_ZN5S55C4D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
  (VTBL_ENTRY)&_ZN5S55C44v109Ev,
  (VTBL_ENTRY)&_ZN5S55C44v110Ev,
  (VTBL_ENTRY)&_ZN5S55C44v111Ev,
  (VTBL_ENTRY)&_ZN5S55C44v112Ev,
  (VTBL_ENTRY)&_ZN5S55C44v113Ev,
  (VTBL_ENTRY)&_ZN5S55C44v114Ev,
  (VTBL_ENTRY)&_ZN5S55C44v115Ev,
  (VTBL_ENTRY)&_ZN5S55C44v116Ev,
  (VTBL_ENTRY)&_ZN5S55C44v117Ev,
  (VTBL_ENTRY)&_ZN5S55C44v118Ev,
  (VTBL_ENTRY)&_ZN5S55C44v119Ev,
  (VTBL_ENTRY)&_ZN5S55C44v120Ev,
  (VTBL_ENTRY)&_ZN5S55C44v121Ev,
  (VTBL_ENTRY)&_ZN5S55C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S55C4[];
extern  VTBL_ENTRY _ZTV5S55C4[];
Class_Descriptor cd_S55C4 = {  "S55C4", // class name
  bases_S55C4, 3,
  &(vtc_S55C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S55C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C4),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S55C3  : S55C4 {
  void *s55c3f0[2];
  ::S287C8_nt s55c3f1;
  unsigned int s55c3f2:1;
  unsigned int s55c3f3:1;
  ::S3350C21_nt s55c3f4;
  virtual  ~S55C3(); // _ZN5S55C3D1Ev
  virtual void  v123(); // _ZN5S55C34v123Ev
  virtual void  v124(); // _ZN5S55C34v124Ev
  virtual void  v125(); // _ZN5S55C34v125Ev
  virtual void  v126(); // _ZN5S55C34v126Ev
  virtual void  v127(); // _ZN5S55C34v127Ev
  virtual void  v128(); // _ZN5S55C34v128Ev
  virtual void  v129(); // _ZN5S55C34v129Ev
  virtual void  v130(); // _ZN5S55C34v130Ev
  virtual void  v131(); // _ZN5S55C34v131Ev
  virtual void  v132(); // _ZN5S55C34v132Ev
  virtual void  v133(); // _ZN5S55C34v133Ev
  S55C3(); // tgen
};
//SIG(-1 S55C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S55C3 ::~S55C3(){ note_dtor("S55C3", this);}
void  S55C3 ::v123(){vfunc_called(this, "_ZN5S55C34v123Ev");}
void  S55C3 ::v124(){vfunc_called(this, "_ZN5S55C34v124Ev");}
void  S55C3 ::v125(){vfunc_called(this, "_ZN5S55C34v125Ev");}
void  S55C3 ::v126(){vfunc_called(this, "_ZN5S55C34v126Ev");}
void  S55C3 ::v127(){vfunc_called(this, "_ZN5S55C34v127Ev");}
void  S55C3 ::v128(){vfunc_called(this, "_ZN5S55C34v128Ev");}
void  S55C3 ::v129(){vfunc_called(this, "_ZN5S55C34v129Ev");}
void  S55C3 ::v130(){vfunc_called(this, "_ZN5S55C34v130Ev");}
void  S55C3 ::v131(){vfunc_called(this, "_ZN5S55C34v131Ev");}
void  S55C3 ::v132(){vfunc_called(this, "_ZN5S55C34v132Ev");}
void  S55C3 ::v133(){vfunc_called(this, "_ZN5S55C34v133Ev");}
S55C3 ::S55C3(){ note_ctor("S55C3", this);} // tgen

static void Test_S55C3()
{
  extern Class_Descriptor cd_S55C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S55C3, buf);
    S55C3 *dp, &lv = *(dp=new (buf) S55C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S55C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C3)");
    check_base_class_offset(lv, (S55C7*)(S55C6*)(S55C5*)(S55C4*), 0, "S55C3");
    check_base_class_offset(lv, (S55C6*)(S55C5*)(S55C4*), 0, "S55C3");
    check_base_class_offset(lv, (S55C5*)(S55C4*), 0, "S55C3");
    check_base_class_offset(lv, (S55C4*), 0, "S55C3");
    check_field_offset(lv, s55c3f0, ABISELECT(336,244), "S55C3.s55c3f0");
    check_field_offset(lv, s55c3f1, ABISELECT(352,252), "S55C3.s55c3f1");
    set_bf_and_test(lv, s55c3f2, ABISELECT(368,264), 0, 1, 1, "S55C3");
    set_bf_and_test(lv, s55c3f3, ABISELECT(368,264), 1, 1, 1, "S55C3");
    check_field_offset(lv, s55c3f4, ABISELECT(376,268), "S55C3.s55c3f4");
    test_class_info(&lv, &cd_S55C3);
    dp->~S55C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C3(Test_S55C3, "S55C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S55C3C1Ev();
extern void _ZN5S55C3D1Ev();
Name_Map name_map_S55C3[] = {
  NSPAIR(_ZN5S55C3C1Ev),
  NSPAIR(_ZN5S55C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
extern Class_Descriptor cd_S55C5;
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
extern Class_Descriptor cd_S55C4;
extern VTBL_ENTRY _ZTI5S55C4[];
extern  VTBL_ENTRY _ZTV5S55C4[];
static Base_Class bases_S55C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S55C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S55C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S55C3[];
extern void _ZN5S55C3D1Ev();
extern void _ZN5S55C3D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
extern void _ZN5S55C44v109Ev();
extern void _ZN5S55C44v110Ev();
extern void _ZN5S55C44v111Ev();
extern void _ZN5S55C44v112Ev();
extern void _ZN5S55C44v113Ev();
extern void _ZN5S55C44v114Ev();
extern void _ZN5S55C44v115Ev();
extern void _ZN5S55C44v116Ev();
extern void _ZN5S55C44v117Ev();
extern void _ZN5S55C44v118Ev();
extern void _ZN5S55C44v119Ev();
extern void _ZN5S55C44v120Ev();
extern void _ZN5S55C44v121Ev();
extern void _ZN5S55C44v122Ev();
extern void _ZN5S55C34v123Ev();
extern void _ZN5S55C34v124Ev();
extern void _ZN5S55C34v125Ev();
extern void _ZN5S55C34v126Ev();
extern void _ZN5S55C34v127Ev();
extern void _ZN5S55C34v128Ev();
extern void _ZN5S55C34v129Ev();
extern void _ZN5S55C34v130Ev();
extern void _ZN5S55C34v131Ev();
extern void _ZN5S55C34v132Ev();
extern void _ZN5S55C34v133Ev();
static  VTBL_ENTRY vtc_S55C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C3[0]),
  (VTBL_ENTRY)&_ZN5S55C3D1Ev,
  (VTBL_ENTRY)&_ZN5S55C3D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
  (VTBL_ENTRY)&_ZN5S55C44v109Ev,
  (VTBL_ENTRY)&_ZN5S55C44v110Ev,
  (VTBL_ENTRY)&_ZN5S55C44v111Ev,
  (VTBL_ENTRY)&_ZN5S55C44v112Ev,
  (VTBL_ENTRY)&_ZN5S55C44v113Ev,
  (VTBL_ENTRY)&_ZN5S55C44v114Ev,
  (VTBL_ENTRY)&_ZN5S55C44v115Ev,
  (VTBL_ENTRY)&_ZN5S55C44v116Ev,
  (VTBL_ENTRY)&_ZN5S55C44v117Ev,
  (VTBL_ENTRY)&_ZN5S55C44v118Ev,
  (VTBL_ENTRY)&_ZN5S55C44v119Ev,
  (VTBL_ENTRY)&_ZN5S55C44v120Ev,
  (VTBL_ENTRY)&_ZN5S55C44v121Ev,
  (VTBL_ENTRY)&_ZN5S55C44v122Ev,
  (VTBL_ENTRY)&_ZN5S55C34v123Ev,
  (VTBL_ENTRY)&_ZN5S55C34v124Ev,
  (VTBL_ENTRY)&_ZN5S55C34v125Ev,
  (VTBL_ENTRY)&_ZN5S55C34v126Ev,
  (VTBL_ENTRY)&_ZN5S55C34v127Ev,
  (VTBL_ENTRY)&_ZN5S55C34v128Ev,
  (VTBL_ENTRY)&_ZN5S55C34v129Ev,
  (VTBL_ENTRY)&_ZN5S55C34v130Ev,
  (VTBL_ENTRY)&_ZN5S55C34v131Ev,
  (VTBL_ENTRY)&_ZN5S55C34v132Ev,
  (VTBL_ENTRY)&_ZN5S55C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S55C3[];
extern  VTBL_ENTRY _ZTV5S55C3[];
Class_Descriptor cd_S55C3 = {  "S55C3", // class name
  bases_S55C3, 4,
  &(vtc_S55C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S55C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C3),135, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S55C2  : S55C3 {
  virtual  ~S55C2(); // _ZN5S55C2D1Ev
  virtual void  v134(); // _ZN5S55C24v134Ev
  virtual void  v135(); // _ZN5S55C24v135Ev
  virtual void  v136(); // _ZN5S55C24v136Ev
  S55C2(); // tgen
};
//SIG(-1 S55C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2 v3}


 S55C2 ::~S55C2(){ note_dtor("S55C2", this);}
void  S55C2 ::v134(){vfunc_called(this, "_ZN5S55C24v134Ev");}
void  S55C2 ::v135(){vfunc_called(this, "_ZN5S55C24v135Ev");}
void  S55C2 ::v136(){vfunc_called(this, "_ZN5S55C24v136Ev");}
S55C2 ::S55C2(){ note_ctor("S55C2", this);} // tgen

static void Test_S55C2()
{
  extern Class_Descriptor cd_S55C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S55C2, buf);
    S55C2 *dp, &lv = *(dp=new (buf) S55C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S55C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C2)");
    check_base_class_offset(lv, (S55C7*)(S55C6*)(S55C5*)(S55C4*)(S55C3*), 0, "S55C2");
    check_base_class_offset(lv, (S55C6*)(S55C5*)(S55C4*)(S55C3*), 0, "S55C2");
    check_base_class_offset(lv, (S55C5*)(S55C4*)(S55C3*), 0, "S55C2");
    check_base_class_offset(lv, (S55C4*)(S55C3*), 0, "S55C2");
    check_base_class_offset(lv, (S55C3*), 0, "S55C2");
    test_class_info(&lv, &cd_S55C2);
    dp->~S55C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C2(Test_S55C2, "S55C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S55C2C1Ev();
extern void _ZN5S55C2D1Ev();
Name_Map name_map_S55C2[] = {
  NSPAIR(_ZN5S55C2C1Ev),
  NSPAIR(_ZN5S55C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
extern Class_Descriptor cd_S55C5;
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
extern Class_Descriptor cd_S55C4;
extern VTBL_ENTRY _ZTI5S55C4[];
extern  VTBL_ENTRY _ZTV5S55C4[];
extern Class_Descriptor cd_S55C3;
extern VTBL_ENTRY _ZTI5S55C3[];
extern  VTBL_ENTRY _ZTV5S55C3[];
static Base_Class bases_S55C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S55C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S55C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S55C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S55C2[];
extern void _ZN5S55C2D1Ev();
extern void _ZN5S55C2D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
extern void _ZN5S55C44v109Ev();
extern void _ZN5S55C44v110Ev();
extern void _ZN5S55C44v111Ev();
extern void _ZN5S55C44v112Ev();
extern void _ZN5S55C44v113Ev();
extern void _ZN5S55C44v114Ev();
extern void _ZN5S55C44v115Ev();
extern void _ZN5S55C44v116Ev();
extern void _ZN5S55C44v117Ev();
extern void _ZN5S55C44v118Ev();
extern void _ZN5S55C44v119Ev();
extern void _ZN5S55C44v120Ev();
extern void _ZN5S55C44v121Ev();
extern void _ZN5S55C44v122Ev();
extern void _ZN5S55C34v123Ev();
extern void _ZN5S55C34v124Ev();
extern void _ZN5S55C34v125Ev();
extern void _ZN5S55C34v126Ev();
extern void _ZN5S55C34v127Ev();
extern void _ZN5S55C34v128Ev();
extern void _ZN5S55C34v129Ev();
extern void _ZN5S55C34v130Ev();
extern void _ZN5S55C34v131Ev();
extern void _ZN5S55C34v132Ev();
extern void _ZN5S55C34v133Ev();
extern void _ZN5S55C24v134Ev();
extern void _ZN5S55C24v135Ev();
extern void _ZN5S55C24v136Ev();
static  VTBL_ENTRY vtc_S55C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C2[0]),
  (VTBL_ENTRY)&_ZN5S55C2D1Ev,
  (VTBL_ENTRY)&_ZN5S55C2D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
  (VTBL_ENTRY)&_ZN5S55C44v109Ev,
  (VTBL_ENTRY)&_ZN5S55C44v110Ev,
  (VTBL_ENTRY)&_ZN5S55C44v111Ev,
  (VTBL_ENTRY)&_ZN5S55C44v112Ev,
  (VTBL_ENTRY)&_ZN5S55C44v113Ev,
  (VTBL_ENTRY)&_ZN5S55C44v114Ev,
  (VTBL_ENTRY)&_ZN5S55C44v115Ev,
  (VTBL_ENTRY)&_ZN5S55C44v116Ev,
  (VTBL_ENTRY)&_ZN5S55C44v117Ev,
  (VTBL_ENTRY)&_ZN5S55C44v118Ev,
  (VTBL_ENTRY)&_ZN5S55C44v119Ev,
  (VTBL_ENTRY)&_ZN5S55C44v120Ev,
  (VTBL_ENTRY)&_ZN5S55C44v121Ev,
  (VTBL_ENTRY)&_ZN5S55C44v122Ev,
  (VTBL_ENTRY)&_ZN5S55C34v123Ev,
  (VTBL_ENTRY)&_ZN5S55C34v124Ev,
  (VTBL_ENTRY)&_ZN5S55C34v125Ev,
  (VTBL_ENTRY)&_ZN5S55C34v126Ev,
  (VTBL_ENTRY)&_ZN5S55C34v127Ev,
  (VTBL_ENTRY)&_ZN5S55C34v128Ev,
  (VTBL_ENTRY)&_ZN5S55C34v129Ev,
  (VTBL_ENTRY)&_ZN5S55C34v130Ev,
  (VTBL_ENTRY)&_ZN5S55C34v131Ev,
  (VTBL_ENTRY)&_ZN5S55C34v132Ev,
  (VTBL_ENTRY)&_ZN5S55C34v133Ev,
  (VTBL_ENTRY)&_ZN5S55C24v134Ev,
  (VTBL_ENTRY)&_ZN5S55C24v135Ev,
  (VTBL_ENTRY)&_ZN5S55C24v136Ev,
};
extern VTBL_ENTRY _ZTI5S55C2[];
extern  VTBL_ENTRY _ZTV5S55C2[];
Class_Descriptor cd_S55C2 = {  "S55C2", // class name
  bases_S55C2, 5,
  &(vtc_S55C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S55C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C2),138, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S55C1  : S55C2 {
  virtual  ~S55C1(); // _ZN5S55C1D1Ev
  virtual void  v1(); // _ZN5S55C12v1Ev
  virtual void  v2(); // _ZN5S55C12v2Ev
  S55C1(); // tgen
};
//SIG(1 S55C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135 v136} vd v1 v2}


 S55C1 ::~S55C1(){ note_dtor("S55C1", this);}
void  S55C1 ::v1(){vfunc_called(this, "_ZN5S55C12v1Ev");}
void  S55C1 ::v2(){vfunc_called(this, "_ZN5S55C12v2Ev");}
S55C1 ::S55C1(){ note_ctor("S55C1", this);} // tgen

static void Test_S55C1()
{
  extern Class_Descriptor cd_S55C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S55C1, buf);
    S55C1 *dp, &lv = *(dp=new (buf) S55C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S55C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S55C1)");
    check_base_class_offset(lv, (S55C7*)(S55C6*)(S55C5*)(S55C4*)(S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C6*)(S55C5*)(S55C4*)(S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C5*)(S55C4*)(S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C4*)(S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C3*)(S55C2*), 0, "S55C1");
    check_base_class_offset(lv, (S55C2*), 0, "S55C1");
    test_class_info(&lv, &cd_S55C1);
    dp->~S55C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS55C1(Test_S55C1, "S55C1", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S55C1C1Ev();
extern void _ZN5S55C1D1Ev();
Name_Map name_map_S55C1[] = {
  NSPAIR(_ZN5S55C1C1Ev),
  NSPAIR(_ZN5S55C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S55C7;
extern VTBL_ENTRY _ZTI5S55C7[];
extern  VTBL_ENTRY _ZTV5S55C7[];
extern Class_Descriptor cd_S55C6;
extern VTBL_ENTRY _ZTI5S55C6[];
extern  VTBL_ENTRY _ZTV5S55C6[];
extern Class_Descriptor cd_S55C5;
extern VTBL_ENTRY _ZTI5S55C5[];
extern  VTBL_ENTRY _ZTV5S55C5[];
extern Class_Descriptor cd_S55C4;
extern VTBL_ENTRY _ZTI5S55C4[];
extern  VTBL_ENTRY _ZTV5S55C4[];
extern Class_Descriptor cd_S55C3;
extern VTBL_ENTRY _ZTI5S55C3[];
extern  VTBL_ENTRY _ZTV5S55C3[];
extern Class_Descriptor cd_S55C2;
extern VTBL_ENTRY _ZTI5S55C2[];
extern  VTBL_ENTRY _ZTV5S55C2[];
static Base_Class bases_S55C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S55C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S55C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S55C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S55C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S55C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S55C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S55C1[];
extern void _ZN5S55C1D1Ev();
extern void _ZN5S55C1D0Ev();
extern void _ZN5S55C72v3Ev();
extern void _ZN5S55C72v4Ev();
extern void _ZN5S55C72v5Ev();
extern void _ZN5S55C72v6Ev();
extern void _ZN5S55C72v7Ev();
extern void _ZN5S55C72v8Ev();
extern void _ZN5S55C72v9Ev();
extern void _ZN5S55C73v10Ev();
extern void _ZN5S55C73v11Ev();
extern void _ZN5S55C73v12Ev();
extern void _ZN5S55C73v13Ev();
extern void _ZN5S55C73v14Ev();
extern void _ZN5S55C73v15Ev();
extern void _ZN5S55C73v16Ev();
extern void _ZN5S55C73v17Ev();
extern void _ZN5S55C73v18Ev();
extern void _ZN5S55C73v19Ev();
extern void _ZN5S55C73v20Ev();
extern void _ZN5S55C73v21Ev();
extern void _ZN5S55C73v22Ev();
extern void _ZN5S55C73v23Ev();
extern void _ZN5S55C73v24Ev();
extern void _ZN5S55C73v25Ev();
extern void _ZN5S55C73v26Ev();
extern void _ZN5S55C73v27Ev();
extern void _ZN5S55C73v28Ev();
extern void _ZN5S55C73v29Ev();
extern void _ZN5S55C73v30Ev();
extern void _ZN5S55C73v31Ev();
extern void _ZN5S55C73v32Ev();
extern void _ZN5S55C73v33Ev();
extern void _ZN5S55C73v34Ev();
extern void _ZN5S55C73v35Ev();
extern void _ZN5S55C73v36Ev();
extern void _ZN5S55C73v37Ev();
extern void _ZN5S55C73v38Ev();
extern void _ZN5S55C73v39Ev();
extern void _ZN5S55C73v40Ev();
extern void _ZN5S55C73v41Ev();
extern void _ZN5S55C73v42Ev();
extern void _ZN5S55C73v43Ev();
extern void _ZN5S55C73v44Ev();
extern void _ZN5S55C73v45Ev();
extern void _ZN5S55C73v46Ev();
extern void _ZN5S55C73v47Ev();
extern void _ZN5S55C73v48Ev();
extern void _ZN5S55C73v49Ev();
extern void _ZN5S55C73v50Ev();
extern void _ZN5S55C73v51Ev();
extern void _ZN5S55C73v52Ev();
extern void _ZN5S55C73v53Ev();
extern void _ZN5S55C73v54Ev();
extern void _ZN5S55C73v55Ev();
extern void _ZN5S55C73v56Ev();
extern void _ZN5S55C73v57Ev();
extern void _ZN5S55C73v58Ev();
extern void _ZN5S55C73v59Ev();
extern void _ZN5S55C73v60Ev();
extern void _ZN5S55C73v61Ev();
extern void _ZN5S55C73v62Ev();
extern void _ZN5S55C73v63Ev();
extern void _ZN5S55C73v64Ev();
extern void _ZN5S55C73v65Ev();
extern void _ZN5S55C73v66Ev();
extern void _ZN5S55C63v67Ev();
extern void _ZN5S55C63v68Ev();
extern void _ZN5S55C63v69Ev();
extern void _ZN5S55C63v70Ev();
extern void _ZN5S55C63v71Ev();
extern void _ZN5S55C63v72Ev();
extern void _ZN5S55C63v73Ev();
extern void _ZN5S55C63v74Ev();
extern void _ZN5S55C63v75Ev();
extern void _ZN5S55C63v76Ev();
extern void _ZN5S55C63v77Ev();
extern void _ZN5S55C63v78Ev();
extern void _ZN5S55C63v79Ev();
extern void _ZN5S55C63v80Ev();
extern void _ZN5S55C63v81Ev();
extern void _ZN5S55C63v82Ev();
extern void _ZN5S55C63v83Ev();
extern void _ZN5S55C63v84Ev();
extern void _ZN5S55C63v85Ev();
extern void _ZN5S55C63v86Ev();
extern void _ZN5S55C63v87Ev();
extern void _ZN5S55C63v88Ev();
extern void _ZN5S55C53v89Ev();
extern void _ZN5S55C53v90Ev();
extern void _ZN5S55C53v91Ev();
extern void _ZN5S55C53v92Ev();
extern void _ZN5S55C53v93Ev();
extern void _ZN5S55C53v94Ev();
extern void _ZN5S55C53v95Ev();
extern void _ZN5S55C53v96Ev();
extern void _ZN5S55C53v97Ev();
extern void _ZN5S55C53v98Ev();
extern void _ZN5S55C53v99Ev();
extern void _ZN5S55C54v100Ev();
extern void _ZN5S55C54v101Ev();
extern void _ZN5S55C54v102Ev();
extern void _ZN5S55C54v103Ev();
extern void _ZN5S55C54v104Ev();
extern void _ZN5S55C54v105Ev();
extern void _ZN5S55C54v106Ev();
extern void _ZN5S55C54v107Ev();
extern void _ZN5S55C54v108Ev();
extern void _ZN5S55C44v109Ev();
extern void _ZN5S55C44v110Ev();
extern void _ZN5S55C44v111Ev();
extern void _ZN5S55C44v112Ev();
extern void _ZN5S55C44v113Ev();
extern void _ZN5S55C44v114Ev();
extern void _ZN5S55C44v115Ev();
extern void _ZN5S55C44v116Ev();
extern void _ZN5S55C44v117Ev();
extern void _ZN5S55C44v118Ev();
extern void _ZN5S55C44v119Ev();
extern void _ZN5S55C44v120Ev();
extern void _ZN5S55C44v121Ev();
extern void _ZN5S55C44v122Ev();
extern void _ZN5S55C34v123Ev();
extern void _ZN5S55C34v124Ev();
extern void _ZN5S55C34v125Ev();
extern void _ZN5S55C34v126Ev();
extern void _ZN5S55C34v127Ev();
extern void _ZN5S55C34v128Ev();
extern void _ZN5S55C34v129Ev();
extern void _ZN5S55C34v130Ev();
extern void _ZN5S55C34v131Ev();
extern void _ZN5S55C34v132Ev();
extern void _ZN5S55C34v133Ev();
extern void _ZN5S55C24v134Ev();
extern void _ZN5S55C24v135Ev();
extern void _ZN5S55C24v136Ev();
extern void _ZN5S55C12v1Ev();
extern void _ZN5S55C12v2Ev();
static  VTBL_ENTRY vtc_S55C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S55C1[0]),
  (VTBL_ENTRY)&_ZN5S55C1D1Ev,
  (VTBL_ENTRY)&_ZN5S55C1D0Ev,
  (VTBL_ENTRY)&_ZN5S55C72v3Ev,
  (VTBL_ENTRY)&_ZN5S55C72v4Ev,
  (VTBL_ENTRY)&_ZN5S55C72v5Ev,
  (VTBL_ENTRY)&_ZN5S55C72v6Ev,
  (VTBL_ENTRY)&_ZN5S55C72v7Ev,
  (VTBL_ENTRY)&_ZN5S55C72v8Ev,
  (VTBL_ENTRY)&_ZN5S55C72v9Ev,
  (VTBL_ENTRY)&_ZN5S55C73v10Ev,
  (VTBL_ENTRY)&_ZN5S55C73v11Ev,
  (VTBL_ENTRY)&_ZN5S55C73v12Ev,
  (VTBL_ENTRY)&_ZN5S55C73v13Ev,
  (VTBL_ENTRY)&_ZN5S55C73v14Ev,
  (VTBL_ENTRY)&_ZN5S55C73v15Ev,
  (VTBL_ENTRY)&_ZN5S55C73v16Ev,
  (VTBL_ENTRY)&_ZN5S55C73v17Ev,
  (VTBL_ENTRY)&_ZN5S55C73v18Ev,
  (VTBL_ENTRY)&_ZN5S55C73v19Ev,
  (VTBL_ENTRY)&_ZN5S55C73v20Ev,
  (VTBL_ENTRY)&_ZN5S55C73v21Ev,
  (VTBL_ENTRY)&_ZN5S55C73v22Ev,
  (VTBL_ENTRY)&_ZN5S55C73v23Ev,
  (VTBL_ENTRY)&_ZN5S55C73v24Ev,
  (VTBL_ENTRY)&_ZN5S55C73v25Ev,
  (VTBL_ENTRY)&_ZN5S55C73v26Ev,
  (VTBL_ENTRY)&_ZN5S55C73v27Ev,
  (VTBL_ENTRY)&_ZN5S55C73v28Ev,
  (VTBL_ENTRY)&_ZN5S55C73v29Ev,
  (VTBL_ENTRY)&_ZN5S55C73v30Ev,
  (VTBL_ENTRY)&_ZN5S55C73v31Ev,
  (VTBL_ENTRY)&_ZN5S55C73v32Ev,
  (VTBL_ENTRY)&_ZN5S55C73v33Ev,
  (VTBL_ENTRY)&_ZN5S55C73v34Ev,
  (VTBL_ENTRY)&_ZN5S55C73v35Ev,
  (VTBL_ENTRY)&_ZN5S55C73v36Ev,
  (VTBL_ENTRY)&_ZN5S55C73v37Ev,
  (VTBL_ENTRY)&_ZN5S55C73v38Ev,
  (VTBL_ENTRY)&_ZN5S55C73v39Ev,
  (VTBL_ENTRY)&_ZN5S55C73v40Ev,
  (VTBL_ENTRY)&_ZN5S55C73v41Ev,
  (VTBL_ENTRY)&_ZN5S55C73v42Ev,
  (VTBL_ENTRY)&_ZN5S55C73v43Ev,
  (VTBL_ENTRY)&_ZN5S55C73v44Ev,
  (VTBL_ENTRY)&_ZN5S55C73v45Ev,
  (VTBL_ENTRY)&_ZN5S55C73v46Ev,
  (VTBL_ENTRY)&_ZN5S55C73v47Ev,
  (VTBL_ENTRY)&_ZN5S55C73v48Ev,
  (VTBL_ENTRY)&_ZN5S55C73v49Ev,
  (VTBL_ENTRY)&_ZN5S55C73v50Ev,
  (VTBL_ENTRY)&_ZN5S55C73v51Ev,
  (VTBL_ENTRY)&_ZN5S55C73v52Ev,
  (VTBL_ENTRY)&_ZN5S55C73v53Ev,
  (VTBL_ENTRY)&_ZN5S55C73v54Ev,
  (VTBL_ENTRY)&_ZN5S55C73v55Ev,
  (VTBL_ENTRY)&_ZN5S55C73v56Ev,
  (VTBL_ENTRY)&_ZN5S55C73v57Ev,
  (VTBL_ENTRY)&_ZN5S55C73v58Ev,
  (VTBL_ENTRY)&_ZN5S55C73v59Ev,
  (VTBL_ENTRY)&_ZN5S55C73v60Ev,
  (VTBL_ENTRY)&_ZN5S55C73v61Ev,
  (VTBL_ENTRY)&_ZN5S55C73v62Ev,
  (VTBL_ENTRY)&_ZN5S55C73v63Ev,
  (VTBL_ENTRY)&_ZN5S55C73v64Ev,
  (VTBL_ENTRY)&_ZN5S55C73v65Ev,
  (VTBL_ENTRY)&_ZN5S55C73v66Ev,
  (VTBL_ENTRY)&_ZN5S55C63v67Ev,
  (VTBL_ENTRY)&_ZN5S55C63v68Ev,
  (VTBL_ENTRY)&_ZN5S55C63v69Ev,
  (VTBL_ENTRY)&_ZN5S55C63v70Ev,
  (VTBL_ENTRY)&_ZN5S55C63v71Ev,
  (VTBL_ENTRY)&_ZN5S55C63v72Ev,
  (VTBL_ENTRY)&_ZN5S55C63v73Ev,
  (VTBL_ENTRY)&_ZN5S55C63v74Ev,
  (VTBL_ENTRY)&_ZN5S55C63v75Ev,
  (VTBL_ENTRY)&_ZN5S55C63v76Ev,
  (VTBL_ENTRY)&_ZN5S55C63v77Ev,
  (VTBL_ENTRY)&_ZN5S55C63v78Ev,
  (VTBL_ENTRY)&_ZN5S55C63v79Ev,
  (VTBL_ENTRY)&_ZN5S55C63v80Ev,
  (VTBL_ENTRY)&_ZN5S55C63v81Ev,
  (VTBL_ENTRY)&_ZN5S55C63v82Ev,
  (VTBL_ENTRY)&_ZN5S55C63v83Ev,
  (VTBL_ENTRY)&_ZN5S55C63v84Ev,
  (VTBL_ENTRY)&_ZN5S55C63v85Ev,
  (VTBL_ENTRY)&_ZN5S55C63v86Ev,
  (VTBL_ENTRY)&_ZN5S55C63v87Ev,
  (VTBL_ENTRY)&_ZN5S55C63v88Ev,
  (VTBL_ENTRY)&_ZN5S55C53v89Ev,
  (VTBL_ENTRY)&_ZN5S55C53v90Ev,
  (VTBL_ENTRY)&_ZN5S55C53v91Ev,
  (VTBL_ENTRY)&_ZN5S55C53v92Ev,
  (VTBL_ENTRY)&_ZN5S55C53v93Ev,
  (VTBL_ENTRY)&_ZN5S55C53v94Ev,
  (VTBL_ENTRY)&_ZN5S55C53v95Ev,
  (VTBL_ENTRY)&_ZN5S55C53v96Ev,
  (VTBL_ENTRY)&_ZN5S55C53v97Ev,
  (VTBL_ENTRY)&_ZN5S55C53v98Ev,
  (VTBL_ENTRY)&_ZN5S55C53v99Ev,
  (VTBL_ENTRY)&_ZN5S55C54v100Ev,
  (VTBL_ENTRY)&_ZN5S55C54v101Ev,
  (VTBL_ENTRY)&_ZN5S55C54v102Ev,
  (VTBL_ENTRY)&_ZN5S55C54v103Ev,
  (VTBL_ENTRY)&_ZN5S55C54v104Ev,
  (VTBL_ENTRY)&_ZN5S55C54v105Ev,
  (VTBL_ENTRY)&_ZN5S55C54v106Ev,
  (VTBL_ENTRY)&_ZN5S55C54v107Ev,
  (VTBL_ENTRY)&_ZN5S55C54v108Ev,
  (VTBL_ENTRY)&_ZN5S55C44v109Ev,
  (VTBL_ENTRY)&_ZN5S55C44v110Ev,
  (VTBL_ENTRY)&_ZN5S55C44v111Ev,
  (VTBL_ENTRY)&_ZN5S55C44v112Ev,
  (VTBL_ENTRY)&_ZN5S55C44v113Ev,
  (VTBL_ENTRY)&_ZN5S55C44v114Ev,
  (VTBL_ENTRY)&_ZN5S55C44v115Ev,
  (VTBL_ENTRY)&_ZN5S55C44v116Ev,
  (VTBL_ENTRY)&_ZN5S55C44v117Ev,
  (VTBL_ENTRY)&_ZN5S55C44v118Ev,
  (VTBL_ENTRY)&_ZN5S55C44v119Ev,
  (VTBL_ENTRY)&_ZN5S55C44v120Ev,
  (VTBL_ENTRY)&_ZN5S55C44v121Ev,
  (VTBL_ENTRY)&_ZN5S55C44v122Ev,
  (VTBL_ENTRY)&_ZN5S55C34v123Ev,
  (VTBL_ENTRY)&_ZN5S55C34v124Ev,
  (VTBL_ENTRY)&_ZN5S55C34v125Ev,
  (VTBL_ENTRY)&_ZN5S55C34v126Ev,
  (VTBL_ENTRY)&_ZN5S55C34v127Ev,
  (VTBL_ENTRY)&_ZN5S55C34v128Ev,
  (VTBL_ENTRY)&_ZN5S55C34v129Ev,
  (VTBL_ENTRY)&_ZN5S55C34v130Ev,
  (VTBL_ENTRY)&_ZN5S55C34v131Ev,
  (VTBL_ENTRY)&_ZN5S55C34v132Ev,
  (VTBL_ENTRY)&_ZN5S55C34v133Ev,
  (VTBL_ENTRY)&_ZN5S55C24v134Ev,
  (VTBL_ENTRY)&_ZN5S55C24v135Ev,
  (VTBL_ENTRY)&_ZN5S55C24v136Ev,
  (VTBL_ENTRY)&_ZN5S55C12v1Ev,
  (VTBL_ENTRY)&_ZN5S55C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S55C1[];
extern  VTBL_ENTRY _ZTV5S55C1[];
Class_Descriptor cd_S55C1 = {  "S55C1", // class name
  bases_S55C1, 6,
  &(vtc_S55C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S55C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S55C1),140, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S58C7  {
  int s58c7f0;
  __tsi64 s58c7f1;
  void *s58c7f2[4];
  int s58c7f3[2];
  void *s58c7f4;
  ::S3350C4_nt s58c7f5;
  void *s58c7f6[2];
  virtual  ~S58C7(); // _ZN5S58C7D1Ev
  virtual void  v3(); // _ZN5S58C72v3Ev
  virtual void  v4(); // _ZN5S58C72v4Ev
  virtual void  v5(); // _ZN5S58C72v5Ev
  virtual void  v6(); // _ZN5S58C72v6Ev
  virtual void  v7(); // _ZN5S58C72v7Ev
  virtual void  v8(); // _ZN5S58C72v8Ev
  virtual void  v9(); // _ZN5S58C72v9Ev
  virtual void  v10(); // _ZN5S58C73v10Ev
  virtual void  v11(); // _ZN5S58C73v11Ev
  virtual void  v12(); // _ZN5S58C73v12Ev
  virtual void  v13(); // _ZN5S58C73v13Ev
  virtual void  v14(); // _ZN5S58C73v14Ev
  virtual void  v15(); // _ZN5S58C73v15Ev
  virtual void  v16(); // _ZN5S58C73v16Ev
  virtual void  v17(); // _ZN5S58C73v17Ev
  virtual void  v18(); // _ZN5S58C73v18Ev
  virtual void  v19(); // _ZN5S58C73v19Ev
  virtual void  v20(); // _ZN5S58C73v20Ev
  virtual void  v21(); // _ZN5S58C73v21Ev
  virtual void  v22(); // _ZN5S58C73v22Ev
  virtual void  v23(); // _ZN5S58C73v23Ev
  virtual void  v24(); // _ZN5S58C73v24Ev
  virtual void  v25(); // _ZN5S58C73v25Ev
  virtual void  v26(); // _ZN5S58C73v26Ev
  virtual void  v27(); // _ZN5S58C73v27Ev
  virtual void  v28(); // _ZN5S58C73v28Ev
  virtual void  v29(); // _ZN5S58C73v29Ev
  virtual void  v30(); // _ZN5S58C73v30Ev
  virtual void  v31(); // _ZN5S58C73v31Ev
  virtual void  v32(); // _ZN5S58C73v32Ev
  virtual void  v33(); // _ZN5S58C73v33Ev
  virtual void  v34(); // _ZN5S58C73v34Ev
  virtual void  v35(); // _ZN5S58C73v35Ev
  virtual void  v36(); // _ZN5S58C73v36Ev
  virtual void  v37(); // _ZN5S58C73v37Ev
  virtual void  v38(); // _ZN5S58C73v38Ev
  virtual void  v39(); // _ZN5S58C73v39Ev
  virtual void  v40(); // _ZN5S58C73v40Ev
  virtual void  v41(); // _ZN5S58C73v41Ev
  virtual void  v42(); // _ZN5S58C73v42Ev
  virtual void  v43(); // _ZN5S58C73v43Ev
  virtual void  v44(); // _ZN5S58C73v44Ev
  virtual void  v45(); // _ZN5S58C73v45Ev
  virtual void  v46(); // _ZN5S58C73v46Ev
  virtual void  v47(); // _ZN5S58C73v47Ev
  virtual void  v48(); // _ZN5S58C73v48Ev
  virtual void  v49(); // _ZN5S58C73v49Ev
  virtual void  v50(); // _ZN5S58C73v50Ev
  virtual void  v51(); // _ZN5S58C73v51Ev
  virtual void  v52(); // _ZN5S58C73v52Ev
  virtual void  v53(); // _ZN5S58C73v53Ev
  virtual void  v54(); // _ZN5S58C73v54Ev
  virtual void  v55(); // _ZN5S58C73v55Ev
  virtual void  v56(); // _ZN5S58C73v56Ev
  virtual void  v57(); // _ZN5S58C73v57Ev
  virtual void  v58(); // _ZN5S58C73v58Ev
  virtual void  v59(); // _ZN5S58C73v59Ev
  virtual void  v60(); // _ZN5S58C73v60Ev
  virtual void  v61(); // _ZN5S58C73v61Ev
  virtual void  v62(); // _ZN5S58C73v62Ev
  virtual void  v63(); // _ZN5S58C73v63Ev
  virtual void  v64(); // _ZN5S58C73v64Ev
  virtual void  v65(); // _ZN5S58C73v65Ev
  virtual void  v66(); // _ZN5S58C73v66Ev
  S58C7(); // tgen
};
//SIG(-1 S58C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S58C7 ::~S58C7(){ note_dtor("S58C7", this);}
void  S58C7 ::v3(){vfunc_called(this, "_ZN5S58C72v3Ev");}
void  S58C7 ::v4(){vfunc_called(this, "_ZN5S58C72v4Ev");}
void  S58C7 ::v5(){vfunc_called(this, "_ZN5S58C72v5Ev");}
void  S58C7 ::v6(){vfunc_called(this, "_ZN5S58C72v6Ev");}
void  S58C7 ::v7(){vfunc_called(this, "_ZN5S58C72v7Ev");}
void  S58C7 ::v8(){vfunc_called(this, "_ZN5S58C72v8Ev");}
void  S58C7 ::v9(){vfunc_called(this, "_ZN5S58C72v9Ev");}
void  S58C7 ::v10(){vfunc_called(this, "_ZN5S58C73v10Ev");}
void  S58C7 ::v11(){vfunc_called(this, "_ZN5S58C73v11Ev");}
void  S58C7 ::v12(){vfunc_called(this, "_ZN5S58C73v12Ev");}
void  S58C7 ::v13(){vfunc_called(this, "_ZN5S58C73v13Ev");}
void  S58C7 ::v14(){vfunc_called(this, "_ZN5S58C73v14Ev");}
void  S58C7 ::v15(){vfunc_called(this, "_ZN5S58C73v15Ev");}
void  S58C7 ::v16(){vfunc_called(this, "_ZN5S58C73v16Ev");}
void  S58C7 ::v17(){vfunc_called(this, "_ZN5S58C73v17Ev");}
void  S58C7 ::v18(){vfunc_called(this, "_ZN5S58C73v18Ev");}
void  S58C7 ::v19(){vfunc_called(this, "_ZN5S58C73v19Ev");}
void  S58C7 ::v20(){vfunc_called(this, "_ZN5S58C73v20Ev");}
void  S58C7 ::v21(){vfunc_called(this, "_ZN5S58C73v21Ev");}
void  S58C7 ::v22(){vfunc_called(this, "_ZN5S58C73v22Ev");}
void  S58C7 ::v23(){vfunc_called(this, "_ZN5S58C73v23Ev");}
void  S58C7 ::v24(){vfunc_called(this, "_ZN5S58C73v24Ev");}
void  S58C7 ::v25(){vfunc_called(this, "_ZN5S58C73v25Ev");}
void  S58C7 ::v26(){vfunc_called(this, "_ZN5S58C73v26Ev");}
void  S58C7 ::v27(){vfunc_called(this, "_ZN5S58C73v27Ev");}
void  S58C7 ::v28(){vfunc_called(this, "_ZN5S58C73v28Ev");}
void  S58C7 ::v29(){vfunc_called(this, "_ZN5S58C73v29Ev");}
void  S58C7 ::v30(){vfunc_called(this, "_ZN5S58C73v30Ev");}
void  S58C7 ::v31(){vfunc_called(this, "_ZN5S58C73v31Ev");}
void  S58C7 ::v32(){vfunc_called(this, "_ZN5S58C73v32Ev");}
void  S58C7 ::v33(){vfunc_called(this, "_ZN5S58C73v33Ev");}
void  S58C7 ::v34(){vfunc_called(this, "_ZN5S58C73v34Ev");}
void  S58C7 ::v35(){vfunc_called(this, "_ZN5S58C73v35Ev");}
void  S58C7 ::v36(){vfunc_called(this, "_ZN5S58C73v36Ev");}
void  S58C7 ::v37(){vfunc_called(this, "_ZN5S58C73v37Ev");}
void  S58C7 ::v38(){vfunc_called(this, "_ZN5S58C73v38Ev");}
void  S58C7 ::v39(){vfunc_called(this, "_ZN5S58C73v39Ev");}
void  S58C7 ::v40(){vfunc_called(this, "_ZN5S58C73v40Ev");}
void  S58C7 ::v41(){vfunc_called(this, "_ZN5S58C73v41Ev");}
void  S58C7 ::v42(){vfunc_called(this, "_ZN5S58C73v42Ev");}
void  S58C7 ::v43(){vfunc_called(this, "_ZN5S58C73v43Ev");}
void  S58C7 ::v44(){vfunc_called(this, "_ZN5S58C73v44Ev");}
void  S58C7 ::v45(){vfunc_called(this, "_ZN5S58C73v45Ev");}
void  S58C7 ::v46(){vfunc_called(this, "_ZN5S58C73v46Ev");}
void  S58C7 ::v47(){vfunc_called(this, "_ZN5S58C73v47Ev");}
void  S58C7 ::v48(){vfunc_called(this, "_ZN5S58C73v48Ev");}
void  S58C7 ::v49(){vfunc_called(this, "_ZN5S58C73v49Ev");}
void  S58C7 ::v50(){vfunc_called(this, "_ZN5S58C73v50Ev");}
void  S58C7 ::v51(){vfunc_called(this, "_ZN5S58C73v51Ev");}
void  S58C7 ::v52(){vfunc_called(this, "_ZN5S58C73v52Ev");}
void  S58C7 ::v53(){vfunc_called(this, "_ZN5S58C73v53Ev");}
void  S58C7 ::v54(){vfunc_called(this, "_ZN5S58C73v54Ev");}
void  S58C7 ::v55(){vfunc_called(this, "_ZN5S58C73v55Ev");}
void  S58C7 ::v56(){vfunc_called(this, "_ZN5S58C73v56Ev");}
void  S58C7 ::v57(){vfunc_called(this, "_ZN5S58C73v57Ev");}
void  S58C7 ::v58(){vfunc_called(this, "_ZN5S58C73v58Ev");}
void  S58C7 ::v59(){vfunc_called(this, "_ZN5S58C73v59Ev");}
void  S58C7 ::v60(){vfunc_called(this, "_ZN5S58C73v60Ev");}
void  S58C7 ::v61(){vfunc_called(this, "_ZN5S58C73v61Ev");}
void  S58C7 ::v62(){vfunc_called(this, "_ZN5S58C73v62Ev");}
void  S58C7 ::v63(){vfunc_called(this, "_ZN5S58C73v63Ev");}
void  S58C7 ::v64(){vfunc_called(this, "_ZN5S58C73v64Ev");}
void  S58C7 ::v65(){vfunc_called(this, "_ZN5S58C73v65Ev");}
void  S58C7 ::v66(){vfunc_called(this, "_ZN5S58C73v66Ev");}
S58C7 ::S58C7(){ note_ctor("S58C7", this);} // tgen

static void Test_S58C7()
{
  extern Class_Descriptor cd_S58C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S58C7, buf);
    S58C7 *dp, &lv = *(dp=new (buf) S58C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S58C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C7)");
    check_field_offset(lv, s58c7f0, ABISELECT(8,4), "S58C7.s58c7f0");
    check_field_offset(lv, s58c7f1, ABISELECT(16,8), "S58C7.s58c7f1");
    check_field_offset(lv, s58c7f2, ABISELECT(24,16), "S58C7.s58c7f2");
    check_field_offset(lv, s58c7f3, ABISELECT(56,32), "S58C7.s58c7f3");
    check_field_offset(lv, s58c7f4, ABISELECT(64,40), "S58C7.s58c7f4");
    check_field_offset(lv, s58c7f5, ABISELECT(72,44), "S58C7.s58c7f5");
    check_field_offset(lv, s58c7f6, ABISELECT(80,52), "S58C7.s58c7f6");
    test_class_info(&lv, &cd_S58C7);
    dp->~S58C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C7(Test_S58C7, "S58C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S58C7C1Ev();
extern void _ZN5S58C7D1Ev();
Name_Map name_map_S58C7[] = {
  NSPAIR(_ZN5S58C7C1Ev),
  NSPAIR(_ZN5S58C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S58C7[];
extern void _ZN5S58C7D1Ev();
extern void _ZN5S58C7D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
static  VTBL_ENTRY vtc_S58C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C7[0]),
  (VTBL_ENTRY)&_ZN5S58C7D1Ev,
  (VTBL_ENTRY)&_ZN5S58C7D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
Class_Descriptor cd_S58C7 = {  "S58C7", // class name
  0,0,//no base classes
  &(vtc_S58C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S58C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S58C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S58C6  : S58C7 {
  int s58c6f0[2];
  void *s58c6f1;
  int s58c6f2[2];
  ::S287C8_nt s58c6f3;
  ::S287C8_nt s58c6f4;
  ::S2121C38 s58c6f5;
  ::S287C8_nt s58c6f6;
  unsigned int s58c6f7:1;
  unsigned int s58c6f8:1;
  unsigned int s58c6f9:1;
  unsigned int s58c6f10:1;
  unsigned int s58c6f11:1;
  int s58c6f12[2];
  virtual  ~S58C6(); // _ZN5S58C6D1Ev
  virtual void  v67(); // _ZN5S58C63v67Ev
  virtual void  v68(); // _ZN5S58C63v68Ev
  virtual void  v69(); // _ZN5S58C63v69Ev
  virtual void  v70(); // _ZN5S58C63v70Ev
  virtual void  v71(); // _ZN5S58C63v71Ev
  virtual void  v72(); // _ZN5S58C63v72Ev
  virtual void  v73(); // _ZN5S58C63v73Ev
  virtual void  v74(); // _ZN5S58C63v74Ev
  virtual void  v75(); // _ZN5S58C63v75Ev
  virtual void  v76(); // _ZN5S58C63v76Ev
  virtual void  v77(); // _ZN5S58C63v77Ev
  virtual void  v78(); // _ZN5S58C63v78Ev
  virtual void  v79(); // _ZN5S58C63v79Ev
  virtual void  v80(); // _ZN5S58C63v80Ev
  virtual void  v81(); // _ZN5S58C63v81Ev
  virtual void  v82(); // _ZN5S58C63v82Ev
  virtual void  v83(); // _ZN5S58C63v83Ev
  virtual void  v84(); // _ZN5S58C63v84Ev
  virtual void  v85(); // _ZN5S58C63v85Ev
  virtual void  v86(); // _ZN5S58C63v86Ev
  virtual void  v87(); // _ZN5S58C63v87Ev
  virtual void  v88(); // _ZN5S58C63v88Ev
  S58C6(); // tgen
};
//SIG(-1 S58C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S58C6 ::~S58C6(){ note_dtor("S58C6", this);}
void  S58C6 ::v67(){vfunc_called(this, "_ZN5S58C63v67Ev");}
void  S58C6 ::v68(){vfunc_called(this, "_ZN5S58C63v68Ev");}
void  S58C6 ::v69(){vfunc_called(this, "_ZN5S58C63v69Ev");}
void  S58C6 ::v70(){vfunc_called(this, "_ZN5S58C63v70Ev");}
void  S58C6 ::v71(){vfunc_called(this, "_ZN5S58C63v71Ev");}
void  S58C6 ::v72(){vfunc_called(this, "_ZN5S58C63v72Ev");}
void  S58C6 ::v73(){vfunc_called(this, "_ZN5S58C63v73Ev");}
void  S58C6 ::v74(){vfunc_called(this, "_ZN5S58C63v74Ev");}
void  S58C6 ::v75(){vfunc_called(this, "_ZN5S58C63v75Ev");}
void  S58C6 ::v76(){vfunc_called(this, "_ZN5S58C63v76Ev");}
void  S58C6 ::v77(){vfunc_called(this, "_ZN5S58C63v77Ev");}
void  S58C6 ::v78(){vfunc_called(this, "_ZN5S58C63v78Ev");}
void  S58C6 ::v79(){vfunc_called(this, "_ZN5S58C63v79Ev");}
void  S58C6 ::v80(){vfunc_called(this, "_ZN5S58C63v80Ev");}
void  S58C6 ::v81(){vfunc_called(this, "_ZN5S58C63v81Ev");}
void  S58C6 ::v82(){vfunc_called(this, "_ZN5S58C63v82Ev");}
void  S58C6 ::v83(){vfunc_called(this, "_ZN5S58C63v83Ev");}
void  S58C6 ::v84(){vfunc_called(this, "_ZN5S58C63v84Ev");}
void  S58C6 ::v85(){vfunc_called(this, "_ZN5S58C63v85Ev");}
void  S58C6 ::v86(){vfunc_called(this, "_ZN5S58C63v86Ev");}
void  S58C6 ::v87(){vfunc_called(this, "_ZN5S58C63v87Ev");}
void  S58C6 ::v88(){vfunc_called(this, "_ZN5S58C63v88Ev");}
S58C6 ::S58C6(){ note_ctor("S58C6", this);} // tgen

static void Test_S58C6()
{
  extern Class_Descriptor cd_S58C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S58C6, buf);
    S58C6 *dp, &lv = *(dp=new (buf) S58C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S58C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C6)");
    check_base_class_offset(lv, (S58C7*), 0, "S58C6");
    check_field_offset(lv, s58c6f0, ABISELECT(96,60), "S58C6.s58c6f0");
    check_field_offset(lv, s58c6f1, ABISELECT(104,68), "S58C6.s58c6f1");
    check_field_offset(lv, s58c6f2, ABISELECT(112,72), "S58C6.s58c6f2");
    check_field_offset(lv, s58c6f3, ABISELECT(120,80), "S58C6.s58c6f3");
    check_field_offset(lv, s58c6f4, ABISELECT(136,92), "S58C6.s58c6f4");
    check_field_offset(lv, s58c6f5, ABISELECT(152,104), "S58C6.s58c6f5");
    check_field_offset(lv, s58c6f6, ABISELECT(160,108), "S58C6.s58c6f6");
    set_bf_and_test(lv, s58c6f7, ABISELECT(176,120), 0, 1, 1, "S58C6");
    set_bf_and_test(lv, s58c6f8, ABISELECT(176,120), 1, 1, 1, "S58C6");
    set_bf_and_test(lv, s58c6f9, ABISELECT(176,120), 2, 1, 1, "S58C6");
    set_bf_and_test(lv, s58c6f10, ABISELECT(176,120), 3, 1, 1, "S58C6");
    set_bf_and_test(lv, s58c6f11, ABISELECT(176,120), 4, 1, 1, "S58C6");
    check_field_offset(lv, s58c6f12, ABISELECT(180,124), "S58C6.s58c6f12");
    test_class_info(&lv, &cd_S58C6);
    dp->~S58C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C6(Test_S58C6, "S58C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S58C6C1Ev();
extern void _ZN5S58C6D1Ev();
Name_Map name_map_S58C6[] = {
  NSPAIR(_ZN5S58C6C1Ev),
  NSPAIR(_ZN5S58C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
static Base_Class bases_S58C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S58C6[];
extern void _ZN5S58C6D1Ev();
extern void _ZN5S58C6D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
static  VTBL_ENTRY vtc_S58C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C6[0]),
  (VTBL_ENTRY)&_ZN5S58C6D1Ev,
  (VTBL_ENTRY)&_ZN5S58C6D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
Class_Descriptor cd_S58C6 = {  "S58C6", // class name
  bases_S58C6, 1,
  &(vtc_S58C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S58C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S58C5  : S58C6 {
  unsigned int s58c5f0:1;
  unsigned int s58c5f1:1;
  unsigned int s58c5f2:1;
  ::S3350C17 s58c5f3;
  ::S3350C11 s58c5f4;
  ::S3350C5_nt s58c5f5;
  ::S287C27 s58c5f6;
  int s58c5f7[3];
  virtual  ~S58C5(); // _ZN5S58C5D1Ev
  virtual void  v89(); // _ZN5S58C53v89Ev
  virtual void  v90(); // _ZN5S58C53v90Ev
  virtual void  v91(); // _ZN5S58C53v91Ev
  virtual void  v92(); // _ZN5S58C53v92Ev
  virtual void  v93(); // _ZN5S58C53v93Ev
  virtual void  v94(); // _ZN5S58C53v94Ev
  virtual void  v95(); // _ZN5S58C53v95Ev
  virtual void  v96(); // _ZN5S58C53v96Ev
  virtual void  v97(); // _ZN5S58C53v97Ev
  virtual void  v98(); // _ZN5S58C53v98Ev
  virtual void  v99(); // _ZN5S58C53v99Ev
  virtual void  v100(); // _ZN5S58C54v100Ev
  virtual void  v101(); // _ZN5S58C54v101Ev
  virtual void  v102(); // _ZN5S58C54v102Ev
  virtual void  v103(); // _ZN5S58C54v103Ev
  virtual void  v104(); // _ZN5S58C54v104Ev
  virtual void  v105(); // _ZN5S58C54v105Ev
  virtual void  v106(); // _ZN5S58C54v106Ev
  virtual void  v107(); // _ZN5S58C54v107Ev
  virtual void  v108(); // _ZN5S58C54v108Ev
  S58C5(); // tgen
};
//SIG(-1 S58C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S58C5 ::~S58C5(){ note_dtor("S58C5", this);}
void  S58C5 ::v89(){vfunc_called(this, "_ZN5S58C53v89Ev");}
void  S58C5 ::v90(){vfunc_called(this, "_ZN5S58C53v90Ev");}
void  S58C5 ::v91(){vfunc_called(this, "_ZN5S58C53v91Ev");}
void  S58C5 ::v92(){vfunc_called(this, "_ZN5S58C53v92Ev");}
void  S58C5 ::v93(){vfunc_called(this, "_ZN5S58C53v93Ev");}
void  S58C5 ::v94(){vfunc_called(this, "_ZN5S58C53v94Ev");}
void  S58C5 ::v95(){vfunc_called(this, "_ZN5S58C53v95Ev");}
void  S58C5 ::v96(){vfunc_called(this, "_ZN5S58C53v96Ev");}
void  S58C5 ::v97(){vfunc_called(this, "_ZN5S58C53v97Ev");}
void  S58C5 ::v98(){vfunc_called(this, "_ZN5S58C53v98Ev");}
void  S58C5 ::v99(){vfunc_called(this, "_ZN5S58C53v99Ev");}
void  S58C5 ::v100(){vfunc_called(this, "_ZN5S58C54v100Ev");}
void  S58C5 ::v101(){vfunc_called(this, "_ZN5S58C54v101Ev");}
void  S58C5 ::v102(){vfunc_called(this, "_ZN5S58C54v102Ev");}
void  S58C5 ::v103(){vfunc_called(this, "_ZN5S58C54v103Ev");}
void  S58C5 ::v104(){vfunc_called(this, "_ZN5S58C54v104Ev");}
void  S58C5 ::v105(){vfunc_called(this, "_ZN5S58C54v105Ev");}
void  S58C5 ::v106(){vfunc_called(this, "_ZN5S58C54v106Ev");}
void  S58C5 ::v107(){vfunc_called(this, "_ZN5S58C54v107Ev");}
void  S58C5 ::v108(){vfunc_called(this, "_ZN5S58C54v108Ev");}
S58C5 ::S58C5(){ note_ctor("S58C5", this);} // tgen

static void Test_S58C5()
{
  extern Class_Descriptor cd_S58C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S58C5, buf);
    S58C5 *dp, &lv = *(dp=new (buf) S58C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S58C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C5)");
    check_base_class_offset(lv, (S58C7*)(S58C6*), 0, "S58C5");
    check_base_class_offset(lv, (S58C6*), 0, "S58C5");
    set_bf_and_test(lv, s58c5f0, ABISELECT(188,132), 0, 1, 1, "S58C5");
    set_bf_and_test(lv, s58c5f1, ABISELECT(188,132), 1, 1, 1, "S58C5");
    set_bf_and_test(lv, s58c5f2, ABISELECT(188,132), 2, 1, 1, "S58C5");
    check_field_offset(lv, s58c5f3, ABISELECT(192,136), "S58C5.s58c5f3");
    check_field_offset(lv, s58c5f4, ABISELECT(208,148), "S58C5.s58c5f4");
    check_field_offset(lv, s58c5f5, ABISELECT(224,160), "S58C5.s58c5f5");
    check_field_offset(lv, s58c5f6, ABISELECT(240,172), "S58C5.s58c5f6");
    check_field_offset(lv, s58c5f7, ABISELECT(256,184), "S58C5.s58c5f7");
    test_class_info(&lv, &cd_S58C5);
    dp->~S58C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C5(Test_S58C5, "S58C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S58C5C1Ev();
extern void _ZN5S58C5D1Ev();
Name_Map name_map_S58C5[] = {
  NSPAIR(_ZN5S58C5C1Ev),
  NSPAIR(_ZN5S58C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
static Base_Class bases_S58C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S58C5[];
extern void _ZN5S58C5D1Ev();
extern void _ZN5S58C5D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
static  VTBL_ENTRY vtc_S58C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C5[0]),
  (VTBL_ENTRY)&_ZN5S58C5D1Ev,
  (VTBL_ENTRY)&_ZN5S58C5D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
Class_Descriptor cd_S58C5 = {  "S58C5", // class name
  bases_S58C5, 2,
  &(vtc_S58C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S58C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S58C4  : S58C5 {
  void *s58c4f0[2];
  int s58c4f1[4];
  unsigned int s58c4f2:1;
  unsigned int s58c4f3:1;
  unsigned int s58c4f4:1;
  char s58c4f5;
  int s58c4f6;
  unsigned int s58c4f7:1;
  ::S287C23 s58c4f8;
  virtual  ~S58C4(); // _ZN5S58C4D1Ev
  virtual void  v109(); // _ZN5S58C44v109Ev
  virtual void  v110(); // _ZN5S58C44v110Ev
  virtual void  v111(); // _ZN5S58C44v111Ev
  virtual void  v112(); // _ZN5S58C44v112Ev
  virtual void  v113(); // _ZN5S58C44v113Ev
  virtual void  v114(); // _ZN5S58C44v114Ev
  virtual void  v115(); // _ZN5S58C44v115Ev
  virtual void  v116(); // _ZN5S58C44v116Ev
  virtual void  v117(); // _ZN5S58C44v117Ev
  virtual void  v118(); // _ZN5S58C44v118Ev
  virtual void  v119(); // _ZN5S58C44v119Ev
  virtual void  v120(); // _ZN5S58C44v120Ev
  virtual void  v121(); // _ZN5S58C44v121Ev
  virtual void  v122(); // _ZN5S58C44v122Ev
  S58C4(); // tgen
};
//SIG(-1 S58C4) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S58C4 ::~S58C4(){ note_dtor("S58C4", this);}
void  S58C4 ::v109(){vfunc_called(this, "_ZN5S58C44v109Ev");}
void  S58C4 ::v110(){vfunc_called(this, "_ZN5S58C44v110Ev");}
void  S58C4 ::v111(){vfunc_called(this, "_ZN5S58C44v111Ev");}
void  S58C4 ::v112(){vfunc_called(this, "_ZN5S58C44v112Ev");}
void  S58C4 ::v113(){vfunc_called(this, "_ZN5S58C44v113Ev");}
void  S58C4 ::v114(){vfunc_called(this, "_ZN5S58C44v114Ev");}
void  S58C4 ::v115(){vfunc_called(this, "_ZN5S58C44v115Ev");}
void  S58C4 ::v116(){vfunc_called(this, "_ZN5S58C44v116Ev");}
void  S58C4 ::v117(){vfunc_called(this, "_ZN5S58C44v117Ev");}
void  S58C4 ::v118(){vfunc_called(this, "_ZN5S58C44v118Ev");}
void  S58C4 ::v119(){vfunc_called(this, "_ZN5S58C44v119Ev");}
void  S58C4 ::v120(){vfunc_called(this, "_ZN5S58C44v120Ev");}
void  S58C4 ::v121(){vfunc_called(this, "_ZN5S58C44v121Ev");}
void  S58C4 ::v122(){vfunc_called(this, "_ZN5S58C44v122Ev");}
S58C4 ::S58C4(){ note_ctor("S58C4", this);} // tgen

static void Test_S58C4()
{
  extern Class_Descriptor cd_S58C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S58C4, buf);
    S58C4 *dp, &lv = *(dp=new (buf) S58C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S58C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C4)");
    check_base_class_offset(lv, (S58C7*)(S58C6*)(S58C5*), 0, "S58C4");
    check_base_class_offset(lv, (S58C6*)(S58C5*), 0, "S58C4");
    check_base_class_offset(lv, (S58C5*), 0, "S58C4");
    check_field_offset(lv, s58c4f0, ABISELECT(272,196), "S58C4.s58c4f0");
    check_field_offset(lv, s58c4f1, ABISELECT(288,204), "S58C4.s58c4f1");
    set_bf_and_test(lv, s58c4f2, ABISELECT(304,220), 0, 1, 1, "S58C4");
    set_bf_and_test(lv, s58c4f3, ABISELECT(304,220), 1, 1, 1, "S58C4");
    set_bf_and_test(lv, s58c4f4, ABISELECT(304,220), 2, 1, 1, "S58C4");
    check_field_offset(lv, s58c4f5, ABISELECT(305,221), "S58C4.s58c4f5");
    check_field_offset(lv, s58c4f6, ABISELECT(308,224), "S58C4.s58c4f6");
    set_bf_and_test(lv, s58c4f7, ABISELECT(312,228), 0, 1, 1, "S58C4");
    check_field_offset(lv, s58c4f8, ABISELECT(320,232), "S58C4.s58c4f8");
    test_class_info(&lv, &cd_S58C4);
    dp->~S58C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C4(Test_S58C4, "S58C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S58C4C1Ev();
extern void _ZN5S58C4D1Ev();
Name_Map name_map_S58C4[] = {
  NSPAIR(_ZN5S58C4C1Ev),
  NSPAIR(_ZN5S58C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
extern Class_Descriptor cd_S58C5;
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
static Base_Class bases_S58C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S58C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S58C4[];
extern void _ZN5S58C4D1Ev();
extern void _ZN5S58C4D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
extern void _ZN5S58C44v109Ev();
extern void _ZN5S58C44v110Ev();
extern void _ZN5S58C44v111Ev();
extern void _ZN5S58C44v112Ev();
extern void _ZN5S58C44v113Ev();
extern void _ZN5S58C44v114Ev();
extern void _ZN5S58C44v115Ev();
extern void _ZN5S58C44v116Ev();
extern void _ZN5S58C44v117Ev();
extern void _ZN5S58C44v118Ev();
extern void _ZN5S58C44v119Ev();
extern void _ZN5S58C44v120Ev();
extern void _ZN5S58C44v121Ev();
extern void _ZN5S58C44v122Ev();
static  VTBL_ENTRY vtc_S58C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C4[0]),
  (VTBL_ENTRY)&_ZN5S58C4D1Ev,
  (VTBL_ENTRY)&_ZN5S58C4D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
  (VTBL_ENTRY)&_ZN5S58C44v109Ev,
  (VTBL_ENTRY)&_ZN5S58C44v110Ev,
  (VTBL_ENTRY)&_ZN5S58C44v111Ev,
  (VTBL_ENTRY)&_ZN5S58C44v112Ev,
  (VTBL_ENTRY)&_ZN5S58C44v113Ev,
  (VTBL_ENTRY)&_ZN5S58C44v114Ev,
  (VTBL_ENTRY)&_ZN5S58C44v115Ev,
  (VTBL_ENTRY)&_ZN5S58C44v116Ev,
  (VTBL_ENTRY)&_ZN5S58C44v117Ev,
  (VTBL_ENTRY)&_ZN5S58C44v118Ev,
  (VTBL_ENTRY)&_ZN5S58C44v119Ev,
  (VTBL_ENTRY)&_ZN5S58C44v120Ev,
  (VTBL_ENTRY)&_ZN5S58C44v121Ev,
  (VTBL_ENTRY)&_ZN5S58C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S58C4[];
extern  VTBL_ENTRY _ZTV5S58C4[];
Class_Descriptor cd_S58C4 = {  "S58C4", // class name
  bases_S58C4, 3,
  &(vtc_S58C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S58C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C4),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S58C3  : S58C4 {
  void *s58c3f0[2];
  ::S287C8_nt s58c3f1;
  unsigned int s58c3f2:1;
  unsigned int s58c3f3:1;
  ::S3350C21_nt s58c3f4;
  virtual  ~S58C3(); // _ZN5S58C3D1Ev
  virtual void  v123(); // _ZN5S58C34v123Ev
  virtual void  v124(); // _ZN5S58C34v124Ev
  virtual void  v125(); // _ZN5S58C34v125Ev
  virtual void  v126(); // _ZN5S58C34v126Ev
  virtual void  v127(); // _ZN5S58C34v127Ev
  virtual void  v128(); // _ZN5S58C34v128Ev
  virtual void  v129(); // _ZN5S58C34v129Ev
  virtual void  v130(); // _ZN5S58C34v130Ev
  virtual void  v131(); // _ZN5S58C34v131Ev
  virtual void  v132(); // _ZN5S58C34v132Ev
  virtual void  v133(); // _ZN5S58C34v133Ev
  S58C3(); // tgen
};
//SIG(-1 S58C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S58C3 ::~S58C3(){ note_dtor("S58C3", this);}
void  S58C3 ::v123(){vfunc_called(this, "_ZN5S58C34v123Ev");}
void  S58C3 ::v124(){vfunc_called(this, "_ZN5S58C34v124Ev");}
void  S58C3 ::v125(){vfunc_called(this, "_ZN5S58C34v125Ev");}
void  S58C3 ::v126(){vfunc_called(this, "_ZN5S58C34v126Ev");}
void  S58C3 ::v127(){vfunc_called(this, "_ZN5S58C34v127Ev");}
void  S58C3 ::v128(){vfunc_called(this, "_ZN5S58C34v128Ev");}
void  S58C3 ::v129(){vfunc_called(this, "_ZN5S58C34v129Ev");}
void  S58C3 ::v130(){vfunc_called(this, "_ZN5S58C34v130Ev");}
void  S58C3 ::v131(){vfunc_called(this, "_ZN5S58C34v131Ev");}
void  S58C3 ::v132(){vfunc_called(this, "_ZN5S58C34v132Ev");}
void  S58C3 ::v133(){vfunc_called(this, "_ZN5S58C34v133Ev");}
S58C3 ::S58C3(){ note_ctor("S58C3", this);} // tgen

static void Test_S58C3()
{
  extern Class_Descriptor cd_S58C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S58C3, buf);
    S58C3 *dp, &lv = *(dp=new (buf) S58C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S58C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C3)");
    check_base_class_offset(lv, (S58C7*)(S58C6*)(S58C5*)(S58C4*), 0, "S58C3");
    check_base_class_offset(lv, (S58C6*)(S58C5*)(S58C4*), 0, "S58C3");
    check_base_class_offset(lv, (S58C5*)(S58C4*), 0, "S58C3");
    check_base_class_offset(lv, (S58C4*), 0, "S58C3");
    check_field_offset(lv, s58c3f0, ABISELECT(336,244), "S58C3.s58c3f0");
    check_field_offset(lv, s58c3f1, ABISELECT(352,252), "S58C3.s58c3f1");
    set_bf_and_test(lv, s58c3f2, ABISELECT(368,264), 0, 1, 1, "S58C3");
    set_bf_and_test(lv, s58c3f3, ABISELECT(368,264), 1, 1, 1, "S58C3");
    check_field_offset(lv, s58c3f4, ABISELECT(376,268), "S58C3.s58c3f4");
    test_class_info(&lv, &cd_S58C3);
    dp->~S58C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C3(Test_S58C3, "S58C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S58C3C1Ev();
extern void _ZN5S58C3D1Ev();
Name_Map name_map_S58C3[] = {
  NSPAIR(_ZN5S58C3C1Ev),
  NSPAIR(_ZN5S58C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
extern Class_Descriptor cd_S58C5;
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
extern Class_Descriptor cd_S58C4;
extern VTBL_ENTRY _ZTI5S58C4[];
extern  VTBL_ENTRY _ZTV5S58C4[];
static Base_Class bases_S58C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S58C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S58C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S58C3[];
extern void _ZN5S58C3D1Ev();
extern void _ZN5S58C3D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
extern void _ZN5S58C44v109Ev();
extern void _ZN5S58C44v110Ev();
extern void _ZN5S58C44v111Ev();
extern void _ZN5S58C44v112Ev();
extern void _ZN5S58C44v113Ev();
extern void _ZN5S58C44v114Ev();
extern void _ZN5S58C44v115Ev();
extern void _ZN5S58C44v116Ev();
extern void _ZN5S58C44v117Ev();
extern void _ZN5S58C44v118Ev();
extern void _ZN5S58C44v119Ev();
extern void _ZN5S58C44v120Ev();
extern void _ZN5S58C44v121Ev();
extern void _ZN5S58C44v122Ev();
extern void _ZN5S58C34v123Ev();
extern void _ZN5S58C34v124Ev();
extern void _ZN5S58C34v125Ev();
extern void _ZN5S58C34v126Ev();
extern void _ZN5S58C34v127Ev();
extern void _ZN5S58C34v128Ev();
extern void _ZN5S58C34v129Ev();
extern void _ZN5S58C34v130Ev();
extern void _ZN5S58C34v131Ev();
extern void _ZN5S58C34v132Ev();
extern void _ZN5S58C34v133Ev();
static  VTBL_ENTRY vtc_S58C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C3[0]),
  (VTBL_ENTRY)&_ZN5S58C3D1Ev,
  (VTBL_ENTRY)&_ZN5S58C3D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
  (VTBL_ENTRY)&_ZN5S58C44v109Ev,
  (VTBL_ENTRY)&_ZN5S58C44v110Ev,
  (VTBL_ENTRY)&_ZN5S58C44v111Ev,
  (VTBL_ENTRY)&_ZN5S58C44v112Ev,
  (VTBL_ENTRY)&_ZN5S58C44v113Ev,
  (VTBL_ENTRY)&_ZN5S58C44v114Ev,
  (VTBL_ENTRY)&_ZN5S58C44v115Ev,
  (VTBL_ENTRY)&_ZN5S58C44v116Ev,
  (VTBL_ENTRY)&_ZN5S58C44v117Ev,
  (VTBL_ENTRY)&_ZN5S58C44v118Ev,
  (VTBL_ENTRY)&_ZN5S58C44v119Ev,
  (VTBL_ENTRY)&_ZN5S58C44v120Ev,
  (VTBL_ENTRY)&_ZN5S58C44v121Ev,
  (VTBL_ENTRY)&_ZN5S58C44v122Ev,
  (VTBL_ENTRY)&_ZN5S58C34v123Ev,
  (VTBL_ENTRY)&_ZN5S58C34v124Ev,
  (VTBL_ENTRY)&_ZN5S58C34v125Ev,
  (VTBL_ENTRY)&_ZN5S58C34v126Ev,
  (VTBL_ENTRY)&_ZN5S58C34v127Ev,
  (VTBL_ENTRY)&_ZN5S58C34v128Ev,
  (VTBL_ENTRY)&_ZN5S58C34v129Ev,
  (VTBL_ENTRY)&_ZN5S58C34v130Ev,
  (VTBL_ENTRY)&_ZN5S58C34v131Ev,
  (VTBL_ENTRY)&_ZN5S58C34v132Ev,
  (VTBL_ENTRY)&_ZN5S58C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S58C3[];
extern  VTBL_ENTRY _ZTV5S58C3[];
Class_Descriptor cd_S58C3 = {  "S58C3", // class name
  bases_S58C3, 4,
  &(vtc_S58C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S58C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C3),135, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S58C2  : S58C3 {
  virtual  ~S58C2(); // _ZN5S58C2D1Ev
  virtual void  v134(); // _ZN5S58C24v134Ev
  virtual void  v135(); // _ZN5S58C24v135Ev
  S58C2(); // tgen
};
//SIG(-1 S58C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2}


 S58C2 ::~S58C2(){ note_dtor("S58C2", this);}
void  S58C2 ::v134(){vfunc_called(this, "_ZN5S58C24v134Ev");}
void  S58C2 ::v135(){vfunc_called(this, "_ZN5S58C24v135Ev");}
S58C2 ::S58C2(){ note_ctor("S58C2", this);} // tgen

static void Test_S58C2()
{
  extern Class_Descriptor cd_S58C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S58C2, buf);
    S58C2 *dp, &lv = *(dp=new (buf) S58C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S58C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C2)");
    check_base_class_offset(lv, (S58C7*)(S58C6*)(S58C5*)(S58C4*)(S58C3*), 0, "S58C2");
    check_base_class_offset(lv, (S58C6*)(S58C5*)(S58C4*)(S58C3*), 0, "S58C2");
    check_base_class_offset(lv, (S58C5*)(S58C4*)(S58C3*), 0, "S58C2");
    check_base_class_offset(lv, (S58C4*)(S58C3*), 0, "S58C2");
    check_base_class_offset(lv, (S58C3*), 0, "S58C2");
    test_class_info(&lv, &cd_S58C2);
    dp->~S58C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C2(Test_S58C2, "S58C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S58C2C1Ev();
extern void _ZN5S58C2D1Ev();
Name_Map name_map_S58C2[] = {
  NSPAIR(_ZN5S58C2C1Ev),
  NSPAIR(_ZN5S58C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
extern Class_Descriptor cd_S58C5;
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
extern Class_Descriptor cd_S58C4;
extern VTBL_ENTRY _ZTI5S58C4[];
extern  VTBL_ENTRY _ZTV5S58C4[];
extern Class_Descriptor cd_S58C3;
extern VTBL_ENTRY _ZTI5S58C3[];
extern  VTBL_ENTRY _ZTV5S58C3[];
static Base_Class bases_S58C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S58C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S58C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S58C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S58C2[];
extern void _ZN5S58C2D1Ev();
extern void _ZN5S58C2D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
extern void _ZN5S58C44v109Ev();
extern void _ZN5S58C44v110Ev();
extern void _ZN5S58C44v111Ev();
extern void _ZN5S58C44v112Ev();
extern void _ZN5S58C44v113Ev();
extern void _ZN5S58C44v114Ev();
extern void _ZN5S58C44v115Ev();
extern void _ZN5S58C44v116Ev();
extern void _ZN5S58C44v117Ev();
extern void _ZN5S58C44v118Ev();
extern void _ZN5S58C44v119Ev();
extern void _ZN5S58C44v120Ev();
extern void _ZN5S58C44v121Ev();
extern void _ZN5S58C44v122Ev();
extern void _ZN5S58C34v123Ev();
extern void _ZN5S58C34v124Ev();
extern void _ZN5S58C34v125Ev();
extern void _ZN5S58C34v126Ev();
extern void _ZN5S58C34v127Ev();
extern void _ZN5S58C34v128Ev();
extern void _ZN5S58C34v129Ev();
extern void _ZN5S58C34v130Ev();
extern void _ZN5S58C34v131Ev();
extern void _ZN5S58C34v132Ev();
extern void _ZN5S58C34v133Ev();
extern void _ZN5S58C24v134Ev();
extern void _ZN5S58C24v135Ev();
static  VTBL_ENTRY vtc_S58C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C2[0]),
  (VTBL_ENTRY)&_ZN5S58C2D1Ev,
  (VTBL_ENTRY)&_ZN5S58C2D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
  (VTBL_ENTRY)&_ZN5S58C44v109Ev,
  (VTBL_ENTRY)&_ZN5S58C44v110Ev,
  (VTBL_ENTRY)&_ZN5S58C44v111Ev,
  (VTBL_ENTRY)&_ZN5S58C44v112Ev,
  (VTBL_ENTRY)&_ZN5S58C44v113Ev,
  (VTBL_ENTRY)&_ZN5S58C44v114Ev,
  (VTBL_ENTRY)&_ZN5S58C44v115Ev,
  (VTBL_ENTRY)&_ZN5S58C44v116Ev,
  (VTBL_ENTRY)&_ZN5S58C44v117Ev,
  (VTBL_ENTRY)&_ZN5S58C44v118Ev,
  (VTBL_ENTRY)&_ZN5S58C44v119Ev,
  (VTBL_ENTRY)&_ZN5S58C44v120Ev,
  (VTBL_ENTRY)&_ZN5S58C44v121Ev,
  (VTBL_ENTRY)&_ZN5S58C44v122Ev,
  (VTBL_ENTRY)&_ZN5S58C34v123Ev,
  (VTBL_ENTRY)&_ZN5S58C34v124Ev,
  (VTBL_ENTRY)&_ZN5S58C34v125Ev,
  (VTBL_ENTRY)&_ZN5S58C34v126Ev,
  (VTBL_ENTRY)&_ZN5S58C34v127Ev,
  (VTBL_ENTRY)&_ZN5S58C34v128Ev,
  (VTBL_ENTRY)&_ZN5S58C34v129Ev,
  (VTBL_ENTRY)&_ZN5S58C34v130Ev,
  (VTBL_ENTRY)&_ZN5S58C34v131Ev,
  (VTBL_ENTRY)&_ZN5S58C34v132Ev,
  (VTBL_ENTRY)&_ZN5S58C34v133Ev,
  (VTBL_ENTRY)&_ZN5S58C24v134Ev,
  (VTBL_ENTRY)&_ZN5S58C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S58C2[];
extern  VTBL_ENTRY _ZTV5S58C2[];
Class_Descriptor cd_S58C2 = {  "S58C2", // class name
  bases_S58C2, 5,
  &(vtc_S58C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S58C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C2),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S58C1  : S58C2 {
  int s58c1f0;
  virtual  ~S58C1(); // _ZN5S58C1D1Ev
  virtual void  v1(); // _ZN5S58C12v1Ev
  virtual void  v2(); // _ZN5S58C12v2Ev
  S58C1(); // tgen
};
//SIG(1 S58C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135} vd v1 v2 Fi}


 S58C1 ::~S58C1(){ note_dtor("S58C1", this);}
void  S58C1 ::v1(){vfunc_called(this, "_ZN5S58C12v1Ev");}
void  S58C1 ::v2(){vfunc_called(this, "_ZN5S58C12v2Ev");}
S58C1 ::S58C1(){ note_ctor("S58C1", this);} // tgen

static void Test_S58C1()
{
  extern Class_Descriptor cd_S58C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,72)];
    init_test(&cd_S58C1, buf);
    S58C1 *dp, &lv = *(dp=new (buf) S58C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,284), "sizeof(S58C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S58C1)");
    check_base_class_offset(lv, (S58C7*)(S58C6*)(S58C5*)(S58C4*)(S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C6*)(S58C5*)(S58C4*)(S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C5*)(S58C4*)(S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C4*)(S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C3*)(S58C2*), 0, "S58C1");
    check_base_class_offset(lv, (S58C2*), 0, "S58C1");
    check_field_offset(lv, s58c1f0, ABISELECT(392,280), "S58C1.s58c1f0");
    test_class_info(&lv, &cd_S58C1);
    dp->~S58C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS58C1(Test_S58C1, "S58C1", ABISELECT(400,284));

#else // __cplusplus

extern void _ZN5S58C1C1Ev();
extern void _ZN5S58C1D1Ev();
Name_Map name_map_S58C1[] = {
  NSPAIR(_ZN5S58C1C1Ev),
  NSPAIR(_ZN5S58C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S58C7;
extern VTBL_ENTRY _ZTI5S58C7[];
extern  VTBL_ENTRY _ZTV5S58C7[];
extern Class_Descriptor cd_S58C6;
extern VTBL_ENTRY _ZTI5S58C6[];
extern  VTBL_ENTRY _ZTV5S58C6[];
extern Class_Descriptor cd_S58C5;
extern VTBL_ENTRY _ZTI5S58C5[];
extern  VTBL_ENTRY _ZTV5S58C5[];
extern Class_Descriptor cd_S58C4;
extern VTBL_ENTRY _ZTI5S58C4[];
extern  VTBL_ENTRY _ZTV5S58C4[];
extern Class_Descriptor cd_S58C3;
extern VTBL_ENTRY _ZTI5S58C3[];
extern  VTBL_ENTRY _ZTV5S58C3[];
extern Class_Descriptor cd_S58C2;
extern VTBL_ENTRY _ZTI5S58C2[];
extern  VTBL_ENTRY _ZTV5S58C2[];
static Base_Class bases_S58C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S58C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S58C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S58C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S58C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S58C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S58C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S58C1[];
extern void _ZN5S58C1D1Ev();
extern void _ZN5S58C1D0Ev();
extern void _ZN5S58C72v3Ev();
extern void _ZN5S58C72v4Ev();
extern void _ZN5S58C72v5Ev();
extern void _ZN5S58C72v6Ev();
extern void _ZN5S58C72v7Ev();
extern void _ZN5S58C72v8Ev();
extern void _ZN5S58C72v9Ev();
extern void _ZN5S58C73v10Ev();
extern void _ZN5S58C73v11Ev();
extern void _ZN5S58C73v12Ev();
extern void _ZN5S58C73v13Ev();
extern void _ZN5S58C73v14Ev();
extern void _ZN5S58C73v15Ev();
extern void _ZN5S58C73v16Ev();
extern void _ZN5S58C73v17Ev();
extern void _ZN5S58C73v18Ev();
extern void _ZN5S58C73v19Ev();
extern void _ZN5S58C73v20Ev();
extern void _ZN5S58C73v21Ev();
extern void _ZN5S58C73v22Ev();
extern void _ZN5S58C73v23Ev();
extern void _ZN5S58C73v24Ev();
extern void _ZN5S58C73v25Ev();
extern void _ZN5S58C73v26Ev();
extern void _ZN5S58C73v27Ev();
extern void _ZN5S58C73v28Ev();
extern void _ZN5S58C73v29Ev();
extern void _ZN5S58C73v30Ev();
extern void _ZN5S58C73v31Ev();
extern void _ZN5S58C73v32Ev();
extern void _ZN5S58C73v33Ev();
extern void _ZN5S58C73v34Ev();
extern void _ZN5S58C73v35Ev();
extern void _ZN5S58C73v36Ev();
extern void _ZN5S58C73v37Ev();
extern void _ZN5S58C73v38Ev();
extern void _ZN5S58C73v39Ev();
extern void _ZN5S58C73v40Ev();
extern void _ZN5S58C73v41Ev();
extern void _ZN5S58C73v42Ev();
extern void _ZN5S58C73v43Ev();
extern void _ZN5S58C73v44Ev();
extern void _ZN5S58C73v45Ev();
extern void _ZN5S58C73v46Ev();
extern void _ZN5S58C73v47Ev();
extern void _ZN5S58C73v48Ev();
extern void _ZN5S58C73v49Ev();
extern void _ZN5S58C73v50Ev();
extern void _ZN5S58C73v51Ev();
extern void _ZN5S58C73v52Ev();
extern void _ZN5S58C73v53Ev();
extern void _ZN5S58C73v54Ev();
extern void _ZN5S58C73v55Ev();
extern void _ZN5S58C73v56Ev();
extern void _ZN5S58C73v57Ev();
extern void _ZN5S58C73v58Ev();
extern void _ZN5S58C73v59Ev();
extern void _ZN5S58C73v60Ev();
extern void _ZN5S58C73v61Ev();
extern void _ZN5S58C73v62Ev();
extern void _ZN5S58C73v63Ev();
extern void _ZN5S58C73v64Ev();
extern void _ZN5S58C73v65Ev();
extern void _ZN5S58C73v66Ev();
extern void _ZN5S58C63v67Ev();
extern void _ZN5S58C63v68Ev();
extern void _ZN5S58C63v69Ev();
extern void _ZN5S58C63v70Ev();
extern void _ZN5S58C63v71Ev();
extern void _ZN5S58C63v72Ev();
extern void _ZN5S58C63v73Ev();
extern void _ZN5S58C63v74Ev();
extern void _ZN5S58C63v75Ev();
extern void _ZN5S58C63v76Ev();
extern void _ZN5S58C63v77Ev();
extern void _ZN5S58C63v78Ev();
extern void _ZN5S58C63v79Ev();
extern void _ZN5S58C63v80Ev();
extern void _ZN5S58C63v81Ev();
extern void _ZN5S58C63v82Ev();
extern void _ZN5S58C63v83Ev();
extern void _ZN5S58C63v84Ev();
extern void _ZN5S58C63v85Ev();
extern void _ZN5S58C63v86Ev();
extern void _ZN5S58C63v87Ev();
extern void _ZN5S58C63v88Ev();
extern void _ZN5S58C53v89Ev();
extern void _ZN5S58C53v90Ev();
extern void _ZN5S58C53v91Ev();
extern void _ZN5S58C53v92Ev();
extern void _ZN5S58C53v93Ev();
extern void _ZN5S58C53v94Ev();
extern void _ZN5S58C53v95Ev();
extern void _ZN5S58C53v96Ev();
extern void _ZN5S58C53v97Ev();
extern void _ZN5S58C53v98Ev();
extern void _ZN5S58C53v99Ev();
extern void _ZN5S58C54v100Ev();
extern void _ZN5S58C54v101Ev();
extern void _ZN5S58C54v102Ev();
extern void _ZN5S58C54v103Ev();
extern void _ZN5S58C54v104Ev();
extern void _ZN5S58C54v105Ev();
extern void _ZN5S58C54v106Ev();
extern void _ZN5S58C54v107Ev();
extern void _ZN5S58C54v108Ev();
extern void _ZN5S58C44v109Ev();
extern void _ZN5S58C44v110Ev();
extern void _ZN5S58C44v111Ev();
extern void _ZN5S58C44v112Ev();
extern void _ZN5S58C44v113Ev();
extern void _ZN5S58C44v114Ev();
extern void _ZN5S58C44v115Ev();
extern void _ZN5S58C44v116Ev();
extern void _ZN5S58C44v117Ev();
extern void _ZN5S58C44v118Ev();
extern void _ZN5S58C44v119Ev();
extern void _ZN5S58C44v120Ev();
extern void _ZN5S58C44v121Ev();
extern void _ZN5S58C44v122Ev();
extern void _ZN5S58C34v123Ev();
extern void _ZN5S58C34v124Ev();
extern void _ZN5S58C34v125Ev();
extern void _ZN5S58C34v126Ev();
extern void _ZN5S58C34v127Ev();
extern void _ZN5S58C34v128Ev();
extern void _ZN5S58C34v129Ev();
extern void _ZN5S58C34v130Ev();
extern void _ZN5S58C34v131Ev();
extern void _ZN5S58C34v132Ev();
extern void _ZN5S58C34v133Ev();
extern void _ZN5S58C24v134Ev();
extern void _ZN5S58C24v135Ev();
extern void _ZN5S58C12v1Ev();
extern void _ZN5S58C12v2Ev();
static  VTBL_ENTRY vtc_S58C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S58C1[0]),
  (VTBL_ENTRY)&_ZN5S58C1D1Ev,
  (VTBL_ENTRY)&_ZN5S58C1D0Ev,
  (VTBL_ENTRY)&_ZN5S58C72v3Ev,
  (VTBL_ENTRY)&_ZN5S58C72v4Ev,
  (VTBL_ENTRY)&_ZN5S58C72v5Ev,
  (VTBL_ENTRY)&_ZN5S58C72v6Ev,
  (VTBL_ENTRY)&_ZN5S58C72v7Ev,
  (VTBL_ENTRY)&_ZN5S58C72v8Ev,
  (VTBL_ENTRY)&_ZN5S58C72v9Ev,
  (VTBL_ENTRY)&_ZN5S58C73v10Ev,
  (VTBL_ENTRY)&_ZN5S58C73v11Ev,
  (VTBL_ENTRY)&_ZN5S58C73v12Ev,
  (VTBL_ENTRY)&_ZN5S58C73v13Ev,
  (VTBL_ENTRY)&_ZN5S58C73v14Ev,
  (VTBL_ENTRY)&_ZN5S58C73v15Ev,
  (VTBL_ENTRY)&_ZN5S58C73v16Ev,
  (VTBL_ENTRY)&_ZN5S58C73v17Ev,
  (VTBL_ENTRY)&_ZN5S58C73v18Ev,
  (VTBL_ENTRY)&_ZN5S58C73v19Ev,
  (VTBL_ENTRY)&_ZN5S58C73v20Ev,
  (VTBL_ENTRY)&_ZN5S58C73v21Ev,
  (VTBL_ENTRY)&_ZN5S58C73v22Ev,
  (VTBL_ENTRY)&_ZN5S58C73v23Ev,
  (VTBL_ENTRY)&_ZN5S58C73v24Ev,
  (VTBL_ENTRY)&_ZN5S58C73v25Ev,
  (VTBL_ENTRY)&_ZN5S58C73v26Ev,
  (VTBL_ENTRY)&_ZN5S58C73v27Ev,
  (VTBL_ENTRY)&_ZN5S58C73v28Ev,
  (VTBL_ENTRY)&_ZN5S58C73v29Ev,
  (VTBL_ENTRY)&_ZN5S58C73v30Ev,
  (VTBL_ENTRY)&_ZN5S58C73v31Ev,
  (VTBL_ENTRY)&_ZN5S58C73v32Ev,
  (VTBL_ENTRY)&_ZN5S58C73v33Ev,
  (VTBL_ENTRY)&_ZN5S58C73v34Ev,
  (VTBL_ENTRY)&_ZN5S58C73v35Ev,
  (VTBL_ENTRY)&_ZN5S58C73v36Ev,
  (VTBL_ENTRY)&_ZN5S58C73v37Ev,
  (VTBL_ENTRY)&_ZN5S58C73v38Ev,
  (VTBL_ENTRY)&_ZN5S58C73v39Ev,
  (VTBL_ENTRY)&_ZN5S58C73v40Ev,
  (VTBL_ENTRY)&_ZN5S58C73v41Ev,
  (VTBL_ENTRY)&_ZN5S58C73v42Ev,
  (VTBL_ENTRY)&_ZN5S58C73v43Ev,
  (VTBL_ENTRY)&_ZN5S58C73v44Ev,
  (VTBL_ENTRY)&_ZN5S58C73v45Ev,
  (VTBL_ENTRY)&_ZN5S58C73v46Ev,
  (VTBL_ENTRY)&_ZN5S58C73v47Ev,
  (VTBL_ENTRY)&_ZN5S58C73v48Ev,
  (VTBL_ENTRY)&_ZN5S58C73v49Ev,
  (VTBL_ENTRY)&_ZN5S58C73v50Ev,
  (VTBL_ENTRY)&_ZN5S58C73v51Ev,
  (VTBL_ENTRY)&_ZN5S58C73v52Ev,
  (VTBL_ENTRY)&_ZN5S58C73v53Ev,
  (VTBL_ENTRY)&_ZN5S58C73v54Ev,
  (VTBL_ENTRY)&_ZN5S58C73v55Ev,
  (VTBL_ENTRY)&_ZN5S58C73v56Ev,
  (VTBL_ENTRY)&_ZN5S58C73v57Ev,
  (VTBL_ENTRY)&_ZN5S58C73v58Ev,
  (VTBL_ENTRY)&_ZN5S58C73v59Ev,
  (VTBL_ENTRY)&_ZN5S58C73v60Ev,
  (VTBL_ENTRY)&_ZN5S58C73v61Ev,
  (VTBL_ENTRY)&_ZN5S58C73v62Ev,
  (VTBL_ENTRY)&_ZN5S58C73v63Ev,
  (VTBL_ENTRY)&_ZN5S58C73v64Ev,
  (VTBL_ENTRY)&_ZN5S58C73v65Ev,
  (VTBL_ENTRY)&_ZN5S58C73v66Ev,
  (VTBL_ENTRY)&_ZN5S58C63v67Ev,
  (VTBL_ENTRY)&_ZN5S58C63v68Ev,
  (VTBL_ENTRY)&_ZN5S58C63v69Ev,
  (VTBL_ENTRY)&_ZN5S58C63v70Ev,
  (VTBL_ENTRY)&_ZN5S58C63v71Ev,
  (VTBL_ENTRY)&_ZN5S58C63v72Ev,
  (VTBL_ENTRY)&_ZN5S58C63v73Ev,
  (VTBL_ENTRY)&_ZN5S58C63v74Ev,
  (VTBL_ENTRY)&_ZN5S58C63v75Ev,
  (VTBL_ENTRY)&_ZN5S58C63v76Ev,
  (VTBL_ENTRY)&_ZN5S58C63v77Ev,
  (VTBL_ENTRY)&_ZN5S58C63v78Ev,
  (VTBL_ENTRY)&_ZN5S58C63v79Ev,
  (VTBL_ENTRY)&_ZN5S58C63v80Ev,
  (VTBL_ENTRY)&_ZN5S58C63v81Ev,
  (VTBL_ENTRY)&_ZN5S58C63v82Ev,
  (VTBL_ENTRY)&_ZN5S58C63v83Ev,
  (VTBL_ENTRY)&_ZN5S58C63v84Ev,
  (VTBL_ENTRY)&_ZN5S58C63v85Ev,
  (VTBL_ENTRY)&_ZN5S58C63v86Ev,
  (VTBL_ENTRY)&_ZN5S58C63v87Ev,
  (VTBL_ENTRY)&_ZN5S58C63v88Ev,
  (VTBL_ENTRY)&_ZN5S58C53v89Ev,
  (VTBL_ENTRY)&_ZN5S58C53v90Ev,
  (VTBL_ENTRY)&_ZN5S58C53v91Ev,
  (VTBL_ENTRY)&_ZN5S58C53v92Ev,
  (VTBL_ENTRY)&_ZN5S58C53v93Ev,
  (VTBL_ENTRY)&_ZN5S58C53v94Ev,
  (VTBL_ENTRY)&_ZN5S58C53v95Ev,
  (VTBL_ENTRY)&_ZN5S58C53v96Ev,
  (VTBL_ENTRY)&_ZN5S58C53v97Ev,
  (VTBL_ENTRY)&_ZN5S58C53v98Ev,
  (VTBL_ENTRY)&_ZN5S58C53v99Ev,
  (VTBL_ENTRY)&_ZN5S58C54v100Ev,
  (VTBL_ENTRY)&_ZN5S58C54v101Ev,
  (VTBL_ENTRY)&_ZN5S58C54v102Ev,
  (VTBL_ENTRY)&_ZN5S58C54v103Ev,
  (VTBL_ENTRY)&_ZN5S58C54v104Ev,
  (VTBL_ENTRY)&_ZN5S58C54v105Ev,
  (VTBL_ENTRY)&_ZN5S58C54v106Ev,
  (VTBL_ENTRY)&_ZN5S58C54v107Ev,
  (VTBL_ENTRY)&_ZN5S58C54v108Ev,
  (VTBL_ENTRY)&_ZN5S58C44v109Ev,
  (VTBL_ENTRY)&_ZN5S58C44v110Ev,
  (VTBL_ENTRY)&_ZN5S58C44v111Ev,
  (VTBL_ENTRY)&_ZN5S58C44v112Ev,
  (VTBL_ENTRY)&_ZN5S58C44v113Ev,
  (VTBL_ENTRY)&_ZN5S58C44v114Ev,
  (VTBL_ENTRY)&_ZN5S58C44v115Ev,
  (VTBL_ENTRY)&_ZN5S58C44v116Ev,
  (VTBL_ENTRY)&_ZN5S58C44v117Ev,
  (VTBL_ENTRY)&_ZN5S58C44v118Ev,
  (VTBL_ENTRY)&_ZN5S58C44v119Ev,
  (VTBL_ENTRY)&_ZN5S58C44v120Ev,
  (VTBL_ENTRY)&_ZN5S58C44v121Ev,
  (VTBL_ENTRY)&_ZN5S58C44v122Ev,
  (VTBL_ENTRY)&_ZN5S58C34v123Ev,
  (VTBL_ENTRY)&_ZN5S58C34v124Ev,
  (VTBL_ENTRY)&_ZN5S58C34v125Ev,
  (VTBL_ENTRY)&_ZN5S58C34v126Ev,
  (VTBL_ENTRY)&_ZN5S58C34v127Ev,
  (VTBL_ENTRY)&_ZN5S58C34v128Ev,
  (VTBL_ENTRY)&_ZN5S58C34v129Ev,
  (VTBL_ENTRY)&_ZN5S58C34v130Ev,
  (VTBL_ENTRY)&_ZN5S58C34v131Ev,
  (VTBL_ENTRY)&_ZN5S58C34v132Ev,
  (VTBL_ENTRY)&_ZN5S58C34v133Ev,
  (VTBL_ENTRY)&_ZN5S58C24v134Ev,
  (VTBL_ENTRY)&_ZN5S58C24v135Ev,
  (VTBL_ENTRY)&_ZN5S58C12v1Ev,
  (VTBL_ENTRY)&_ZN5S58C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S58C1[];
extern  VTBL_ENTRY _ZTV5S58C1[];
Class_Descriptor cd_S58C1 = {  "S58C1", // class name
  bases_S58C1, 6,
  &(vtc_S58C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,284), // object size
  NSPAIRA(_ZTI5S58C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S58C1),139, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S59C7  {
  int s59c7f0;
  __tsi64 s59c7f1;
  void *s59c7f2[4];
  int s59c7f3[2];
  void *s59c7f4;
  ::S3350C4_nt s59c7f5;
  void *s59c7f6[2];
  virtual  ~S59C7(); // _ZN5S59C7D1Ev
  virtual void  v3(); // _ZN5S59C72v3Ev
  virtual void  v4(); // _ZN5S59C72v4Ev
  virtual void  v5(); // _ZN5S59C72v5Ev
  virtual void  v6(); // _ZN5S59C72v6Ev
  virtual void  v7(); // _ZN5S59C72v7Ev
  virtual void  v8(); // _ZN5S59C72v8Ev
  virtual void  v9(); // _ZN5S59C72v9Ev
  virtual void  v10(); // _ZN5S59C73v10Ev
  virtual void  v11(); // _ZN5S59C73v11Ev
  virtual void  v12(); // _ZN5S59C73v12Ev
  virtual void  v13(); // _ZN5S59C73v13Ev
  virtual void  v14(); // _ZN5S59C73v14Ev
  virtual void  v15(); // _ZN5S59C73v15Ev
  virtual void  v16(); // _ZN5S59C73v16Ev
  virtual void  v17(); // _ZN5S59C73v17Ev
  virtual void  v18(); // _ZN5S59C73v18Ev
  virtual void  v19(); // _ZN5S59C73v19Ev
  virtual void  v20(); // _ZN5S59C73v20Ev
  virtual void  v21(); // _ZN5S59C73v21Ev
  virtual void  v22(); // _ZN5S59C73v22Ev
  virtual void  v23(); // _ZN5S59C73v23Ev
  virtual void  v24(); // _ZN5S59C73v24Ev
  virtual void  v25(); // _ZN5S59C73v25Ev
  virtual void  v26(); // _ZN5S59C73v26Ev
  virtual void  v27(); // _ZN5S59C73v27Ev
  virtual void  v28(); // _ZN5S59C73v28Ev
  virtual void  v29(); // _ZN5S59C73v29Ev
  virtual void  v30(); // _ZN5S59C73v30Ev
  virtual void  v31(); // _ZN5S59C73v31Ev
  virtual void  v32(); // _ZN5S59C73v32Ev
  virtual void  v33(); // _ZN5S59C73v33Ev
  virtual void  v34(); // _ZN5S59C73v34Ev
  virtual void  v35(); // _ZN5S59C73v35Ev
  virtual void  v36(); // _ZN5S59C73v36Ev
  virtual void  v37(); // _ZN5S59C73v37Ev
  virtual void  v38(); // _ZN5S59C73v38Ev
  virtual void  v39(); // _ZN5S59C73v39Ev
  virtual void  v40(); // _ZN5S59C73v40Ev
  virtual void  v41(); // _ZN5S59C73v41Ev
  virtual void  v42(); // _ZN5S59C73v42Ev
  virtual void  v43(); // _ZN5S59C73v43Ev
  virtual void  v44(); // _ZN5S59C73v44Ev
  virtual void  v45(); // _ZN5S59C73v45Ev
  virtual void  v46(); // _ZN5S59C73v46Ev
  virtual void  v47(); // _ZN5S59C73v47Ev
  virtual void  v48(); // _ZN5S59C73v48Ev
  virtual void  v49(); // _ZN5S59C73v49Ev
  virtual void  v50(); // _ZN5S59C73v50Ev
  virtual void  v51(); // _ZN5S59C73v51Ev
  virtual void  v52(); // _ZN5S59C73v52Ev
  virtual void  v53(); // _ZN5S59C73v53Ev
  virtual void  v54(); // _ZN5S59C73v54Ev
  virtual void  v55(); // _ZN5S59C73v55Ev
  virtual void  v56(); // _ZN5S59C73v56Ev
  virtual void  v57(); // _ZN5S59C73v57Ev
  virtual void  v58(); // _ZN5S59C73v58Ev
  virtual void  v59(); // _ZN5S59C73v59Ev
  virtual void  v60(); // _ZN5S59C73v60Ev
  virtual void  v61(); // _ZN5S59C73v61Ev
  virtual void  v62(); // _ZN5S59C73v62Ev
  virtual void  v63(); // _ZN5S59C73v63Ev
  virtual void  v64(); // _ZN5S59C73v64Ev
  virtual void  v65(); // _ZN5S59C73v65Ev
  virtual void  v66(); // _ZN5S59C73v66Ev
  S59C7(); // tgen
};
//SIG(-1 S59C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S59C7 ::~S59C7(){ note_dtor("S59C7", this);}
void  S59C7 ::v3(){vfunc_called(this, "_ZN5S59C72v3Ev");}
void  S59C7 ::v4(){vfunc_called(this, "_ZN5S59C72v4Ev");}
void  S59C7 ::v5(){vfunc_called(this, "_ZN5S59C72v5Ev");}
void  S59C7 ::v6(){vfunc_called(this, "_ZN5S59C72v6Ev");}
void  S59C7 ::v7(){vfunc_called(this, "_ZN5S59C72v7Ev");}
void  S59C7 ::v8(){vfunc_called(this, "_ZN5S59C72v8Ev");}
void  S59C7 ::v9(){vfunc_called(this, "_ZN5S59C72v9Ev");}
void  S59C7 ::v10(){vfunc_called(this, "_ZN5S59C73v10Ev");}
void  S59C7 ::v11(){vfunc_called(this, "_ZN5S59C73v11Ev");}
void  S59C7 ::v12(){vfunc_called(this, "_ZN5S59C73v12Ev");}
void  S59C7 ::v13(){vfunc_called(this, "_ZN5S59C73v13Ev");}
void  S59C7 ::v14(){vfunc_called(this, "_ZN5S59C73v14Ev");}
void  S59C7 ::v15(){vfunc_called(this, "_ZN5S59C73v15Ev");}
void  S59C7 ::v16(){vfunc_called(this, "_ZN5S59C73v16Ev");}
void  S59C7 ::v17(){vfunc_called(this, "_ZN5S59C73v17Ev");}
void  S59C7 ::v18(){vfunc_called(this, "_ZN5S59C73v18Ev");}
void  S59C7 ::v19(){vfunc_called(this, "_ZN5S59C73v19Ev");}
void  S59C7 ::v20(){vfunc_called(this, "_ZN5S59C73v20Ev");}
void  S59C7 ::v21(){vfunc_called(this, "_ZN5S59C73v21Ev");}
void  S59C7 ::v22(){vfunc_called(this, "_ZN5S59C73v22Ev");}
void  S59C7 ::v23(){vfunc_called(this, "_ZN5S59C73v23Ev");}
void  S59C7 ::v24(){vfunc_called(this, "_ZN5S59C73v24Ev");}
void  S59C7 ::v25(){vfunc_called(this, "_ZN5S59C73v25Ev");}
void  S59C7 ::v26(){vfunc_called(this, "_ZN5S59C73v26Ev");}
void  S59C7 ::v27(){vfunc_called(this, "_ZN5S59C73v27Ev");}
void  S59C7 ::v28(){vfunc_called(this, "_ZN5S59C73v28Ev");}
void  S59C7 ::v29(){vfunc_called(this, "_ZN5S59C73v29Ev");}
void  S59C7 ::v30(){vfunc_called(this, "_ZN5S59C73v30Ev");}
void  S59C7 ::v31(){vfunc_called(this, "_ZN5S59C73v31Ev");}
void  S59C7 ::v32(){vfunc_called(this, "_ZN5S59C73v32Ev");}
void  S59C7 ::v33(){vfunc_called(this, "_ZN5S59C73v33Ev");}
void  S59C7 ::v34(){vfunc_called(this, "_ZN5S59C73v34Ev");}
void  S59C7 ::v35(){vfunc_called(this, "_ZN5S59C73v35Ev");}
void  S59C7 ::v36(){vfunc_called(this, "_ZN5S59C73v36Ev");}
void  S59C7 ::v37(){vfunc_called(this, "_ZN5S59C73v37Ev");}
void  S59C7 ::v38(){vfunc_called(this, "_ZN5S59C73v38Ev");}
void  S59C7 ::v39(){vfunc_called(this, "_ZN5S59C73v39Ev");}
void  S59C7 ::v40(){vfunc_called(this, "_ZN5S59C73v40Ev");}
void  S59C7 ::v41(){vfunc_called(this, "_ZN5S59C73v41Ev");}
void  S59C7 ::v42(){vfunc_called(this, "_ZN5S59C73v42Ev");}
void  S59C7 ::v43(){vfunc_called(this, "_ZN5S59C73v43Ev");}
void  S59C7 ::v44(){vfunc_called(this, "_ZN5S59C73v44Ev");}
void  S59C7 ::v45(){vfunc_called(this, "_ZN5S59C73v45Ev");}
void  S59C7 ::v46(){vfunc_called(this, "_ZN5S59C73v46Ev");}
void  S59C7 ::v47(){vfunc_called(this, "_ZN5S59C73v47Ev");}
void  S59C7 ::v48(){vfunc_called(this, "_ZN5S59C73v48Ev");}
void  S59C7 ::v49(){vfunc_called(this, "_ZN5S59C73v49Ev");}
void  S59C7 ::v50(){vfunc_called(this, "_ZN5S59C73v50Ev");}
void  S59C7 ::v51(){vfunc_called(this, "_ZN5S59C73v51Ev");}
void  S59C7 ::v52(){vfunc_called(this, "_ZN5S59C73v52Ev");}
void  S59C7 ::v53(){vfunc_called(this, "_ZN5S59C73v53Ev");}
void  S59C7 ::v54(){vfunc_called(this, "_ZN5S59C73v54Ev");}
void  S59C7 ::v55(){vfunc_called(this, "_ZN5S59C73v55Ev");}
void  S59C7 ::v56(){vfunc_called(this, "_ZN5S59C73v56Ev");}
void  S59C7 ::v57(){vfunc_called(this, "_ZN5S59C73v57Ev");}
void  S59C7 ::v58(){vfunc_called(this, "_ZN5S59C73v58Ev");}
void  S59C7 ::v59(){vfunc_called(this, "_ZN5S59C73v59Ev");}
void  S59C7 ::v60(){vfunc_called(this, "_ZN5S59C73v60Ev");}
void  S59C7 ::v61(){vfunc_called(this, "_ZN5S59C73v61Ev");}
void  S59C7 ::v62(){vfunc_called(this, "_ZN5S59C73v62Ev");}
void  S59C7 ::v63(){vfunc_called(this, "_ZN5S59C73v63Ev");}
void  S59C7 ::v64(){vfunc_called(this, "_ZN5S59C73v64Ev");}
void  S59C7 ::v65(){vfunc_called(this, "_ZN5S59C73v65Ev");}
void  S59C7 ::v66(){vfunc_called(this, "_ZN5S59C73v66Ev");}
S59C7 ::S59C7(){ note_ctor("S59C7", this);} // tgen

static void Test_S59C7()
{
  extern Class_Descriptor cd_S59C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S59C7, buf);
    S59C7 *dp, &lv = *(dp=new (buf) S59C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S59C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C7)");
    check_field_offset(lv, s59c7f0, ABISELECT(8,4), "S59C7.s59c7f0");
    check_field_offset(lv, s59c7f1, ABISELECT(16,8), "S59C7.s59c7f1");
    check_field_offset(lv, s59c7f2, ABISELECT(24,16), "S59C7.s59c7f2");
    check_field_offset(lv, s59c7f3, ABISELECT(56,32), "S59C7.s59c7f3");
    check_field_offset(lv, s59c7f4, ABISELECT(64,40), "S59C7.s59c7f4");
    check_field_offset(lv, s59c7f5, ABISELECT(72,44), "S59C7.s59c7f5");
    check_field_offset(lv, s59c7f6, ABISELECT(80,52), "S59C7.s59c7f6");
    test_class_info(&lv, &cd_S59C7);
    dp->~S59C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C7(Test_S59C7, "S59C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S59C7C1Ev();
extern void _ZN5S59C7D1Ev();
Name_Map name_map_S59C7[] = {
  NSPAIR(_ZN5S59C7C1Ev),
  NSPAIR(_ZN5S59C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S59C7[];
extern void _ZN5S59C7D1Ev();
extern void _ZN5S59C7D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
static  VTBL_ENTRY vtc_S59C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C7[0]),
  (VTBL_ENTRY)&_ZN5S59C7D1Ev,
  (VTBL_ENTRY)&_ZN5S59C7D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
};
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
Class_Descriptor cd_S59C7 = {  "S59C7", // class name
  0,0,//no base classes
  &(vtc_S59C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S59C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S59C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S59C6  : S59C7 {
  int s59c6f0[2];
  void *s59c6f1;
  int s59c6f2[2];
  ::S287C8_nt s59c6f3;
  ::S287C8_nt s59c6f4;
  ::S2121C38 s59c6f5;
  ::S287C8_nt s59c6f6;
  unsigned int s59c6f7:1;
  unsigned int s59c6f8:1;
  unsigned int s59c6f9:1;
  unsigned int s59c6f10:1;
  unsigned int s59c6f11:1;
  int s59c6f12[2];
  virtual  ~S59C6(); // _ZN5S59C6D1Ev
  virtual void  v67(); // _ZN5S59C63v67Ev
  virtual void  v68(); // _ZN5S59C63v68Ev
  virtual void  v69(); // _ZN5S59C63v69Ev
  virtual void  v70(); // _ZN5S59C63v70Ev
  virtual void  v71(); // _ZN5S59C63v71Ev
  virtual void  v72(); // _ZN5S59C63v72Ev
  virtual void  v73(); // _ZN5S59C63v73Ev
  virtual void  v74(); // _ZN5S59C63v74Ev
  virtual void  v75(); // _ZN5S59C63v75Ev
  virtual void  v76(); // _ZN5S59C63v76Ev
  virtual void  v77(); // _ZN5S59C63v77Ev
  virtual void  v78(); // _ZN5S59C63v78Ev
  virtual void  v79(); // _ZN5S59C63v79Ev
  virtual void  v80(); // _ZN5S59C63v80Ev
  virtual void  v81(); // _ZN5S59C63v81Ev
  virtual void  v82(); // _ZN5S59C63v82Ev
  virtual void  v83(); // _ZN5S59C63v83Ev
  virtual void  v84(); // _ZN5S59C63v84Ev
  virtual void  v85(); // _ZN5S59C63v85Ev
  virtual void  v86(); // _ZN5S59C63v86Ev
  virtual void  v87(); // _ZN5S59C63v87Ev
  virtual void  v88(); // _ZN5S59C63v88Ev
  S59C6(); // tgen
};
//SIG(-1 S59C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S59C6 ::~S59C6(){ note_dtor("S59C6", this);}
void  S59C6 ::v67(){vfunc_called(this, "_ZN5S59C63v67Ev");}
void  S59C6 ::v68(){vfunc_called(this, "_ZN5S59C63v68Ev");}
void  S59C6 ::v69(){vfunc_called(this, "_ZN5S59C63v69Ev");}
void  S59C6 ::v70(){vfunc_called(this, "_ZN5S59C63v70Ev");}
void  S59C6 ::v71(){vfunc_called(this, "_ZN5S59C63v71Ev");}
void  S59C6 ::v72(){vfunc_called(this, "_ZN5S59C63v72Ev");}
void  S59C6 ::v73(){vfunc_called(this, "_ZN5S59C63v73Ev");}
void  S59C6 ::v74(){vfunc_called(this, "_ZN5S59C63v74Ev");}
void  S59C6 ::v75(){vfunc_called(this, "_ZN5S59C63v75Ev");}
void  S59C6 ::v76(){vfunc_called(this, "_ZN5S59C63v76Ev");}
void  S59C6 ::v77(){vfunc_called(this, "_ZN5S59C63v77Ev");}
void  S59C6 ::v78(){vfunc_called(this, "_ZN5S59C63v78Ev");}
void  S59C6 ::v79(){vfunc_called(this, "_ZN5S59C63v79Ev");}
void  S59C6 ::v80(){vfunc_called(this, "_ZN5S59C63v80Ev");}
void  S59C6 ::v81(){vfunc_called(this, "_ZN5S59C63v81Ev");}
void  S59C6 ::v82(){vfunc_called(this, "_ZN5S59C63v82Ev");}
void  S59C6 ::v83(){vfunc_called(this, "_ZN5S59C63v83Ev");}
void  S59C6 ::v84(){vfunc_called(this, "_ZN5S59C63v84Ev");}
void  S59C6 ::v85(){vfunc_called(this, "_ZN5S59C63v85Ev");}
void  S59C6 ::v86(){vfunc_called(this, "_ZN5S59C63v86Ev");}
void  S59C6 ::v87(){vfunc_called(this, "_ZN5S59C63v87Ev");}
void  S59C6 ::v88(){vfunc_called(this, "_ZN5S59C63v88Ev");}
S59C6 ::S59C6(){ note_ctor("S59C6", this);} // tgen

static void Test_S59C6()
{
  extern Class_Descriptor cd_S59C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S59C6, buf);
    S59C6 *dp, &lv = *(dp=new (buf) S59C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S59C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C6)");
    check_base_class_offset(lv, (S59C7*), 0, "S59C6");
    check_field_offset(lv, s59c6f0, ABISELECT(96,60), "S59C6.s59c6f0");
    check_field_offset(lv, s59c6f1, ABISELECT(104,68), "S59C6.s59c6f1");
    check_field_offset(lv, s59c6f2, ABISELECT(112,72), "S59C6.s59c6f2");
    check_field_offset(lv, s59c6f3, ABISELECT(120,80), "S59C6.s59c6f3");
    check_field_offset(lv, s59c6f4, ABISELECT(136,92), "S59C6.s59c6f4");
    check_field_offset(lv, s59c6f5, ABISELECT(152,104), "S59C6.s59c6f5");
    check_field_offset(lv, s59c6f6, ABISELECT(160,108), "S59C6.s59c6f6");
    set_bf_and_test(lv, s59c6f7, ABISELECT(176,120), 0, 1, 1, "S59C6");
    set_bf_and_test(lv, s59c6f8, ABISELECT(176,120), 1, 1, 1, "S59C6");
    set_bf_and_test(lv, s59c6f9, ABISELECT(176,120), 2, 1, 1, "S59C6");
    set_bf_and_test(lv, s59c6f10, ABISELECT(176,120), 3, 1, 1, "S59C6");
    set_bf_and_test(lv, s59c6f11, ABISELECT(176,120), 4, 1, 1, "S59C6");
    check_field_offset(lv, s59c6f12, ABISELECT(180,124), "S59C6.s59c6f12");
    test_class_info(&lv, &cd_S59C6);
    dp->~S59C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C6(Test_S59C6, "S59C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S59C6C1Ev();
extern void _ZN5S59C6D1Ev();
Name_Map name_map_S59C6[] = {
  NSPAIR(_ZN5S59C6C1Ev),
  NSPAIR(_ZN5S59C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
static Base_Class bases_S59C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S59C6[];
extern void _ZN5S59C6D1Ev();
extern void _ZN5S59C6D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
static  VTBL_ENTRY vtc_S59C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C6[0]),
  (VTBL_ENTRY)&_ZN5S59C6D1Ev,
  (VTBL_ENTRY)&_ZN5S59C6D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
};
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
Class_Descriptor cd_S59C6 = {  "S59C6", // class name
  bases_S59C6, 1,
  &(vtc_S59C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S59C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S59C5  : S59C6 {
  unsigned int s59c5f0:1;
  unsigned int s59c5f1:1;
  unsigned int s59c5f2:1;
  ::S3350C17 s59c5f3;
  ::S3350C11 s59c5f4;
  ::S3350C5_nt s59c5f5;
  ::S287C27 s59c5f6;
  int s59c5f7[3];
  virtual  ~S59C5(); // _ZN5S59C5D1Ev
  virtual void  v89(); // _ZN5S59C53v89Ev
  virtual void  v90(); // _ZN5S59C53v90Ev
  virtual void  v91(); // _ZN5S59C53v91Ev
  virtual void  v92(); // _ZN5S59C53v92Ev
  virtual void  v93(); // _ZN5S59C53v93Ev
  virtual void  v94(); // _ZN5S59C53v94Ev
  virtual void  v95(); // _ZN5S59C53v95Ev
  virtual void  v96(); // _ZN5S59C53v96Ev
  virtual void  v97(); // _ZN5S59C53v97Ev
  virtual void  v98(); // _ZN5S59C53v98Ev
  virtual void  v99(); // _ZN5S59C53v99Ev
  virtual void  v100(); // _ZN5S59C54v100Ev
  virtual void  v101(); // _ZN5S59C54v101Ev
  virtual void  v102(); // _ZN5S59C54v102Ev
  virtual void  v103(); // _ZN5S59C54v103Ev
  virtual void  v104(); // _ZN5S59C54v104Ev
  virtual void  v105(); // _ZN5S59C54v105Ev
  virtual void  v106(); // _ZN5S59C54v106Ev
  virtual void  v107(); // _ZN5S59C54v107Ev
  virtual void  v108(); // _ZN5S59C54v108Ev
  S59C5(); // tgen
};
//SIG(-1 S59C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S59C5 ::~S59C5(){ note_dtor("S59C5", this);}
void  S59C5 ::v89(){vfunc_called(this, "_ZN5S59C53v89Ev");}
void  S59C5 ::v90(){vfunc_called(this, "_ZN5S59C53v90Ev");}
void  S59C5 ::v91(){vfunc_called(this, "_ZN5S59C53v91Ev");}
void  S59C5 ::v92(){vfunc_called(this, "_ZN5S59C53v92Ev");}
void  S59C5 ::v93(){vfunc_called(this, "_ZN5S59C53v93Ev");}
void  S59C5 ::v94(){vfunc_called(this, "_ZN5S59C53v94Ev");}
void  S59C5 ::v95(){vfunc_called(this, "_ZN5S59C53v95Ev");}
void  S59C5 ::v96(){vfunc_called(this, "_ZN5S59C53v96Ev");}
void  S59C5 ::v97(){vfunc_called(this, "_ZN5S59C53v97Ev");}
void  S59C5 ::v98(){vfunc_called(this, "_ZN5S59C53v98Ev");}
void  S59C5 ::v99(){vfunc_called(this, "_ZN5S59C53v99Ev");}
void  S59C5 ::v100(){vfunc_called(this, "_ZN5S59C54v100Ev");}
void  S59C5 ::v101(){vfunc_called(this, "_ZN5S59C54v101Ev");}
void  S59C5 ::v102(){vfunc_called(this, "_ZN5S59C54v102Ev");}
void  S59C5 ::v103(){vfunc_called(this, "_ZN5S59C54v103Ev");}
void  S59C5 ::v104(){vfunc_called(this, "_ZN5S59C54v104Ev");}
void  S59C5 ::v105(){vfunc_called(this, "_ZN5S59C54v105Ev");}
void  S59C5 ::v106(){vfunc_called(this, "_ZN5S59C54v106Ev");}
void  S59C5 ::v107(){vfunc_called(this, "_ZN5S59C54v107Ev");}
void  S59C5 ::v108(){vfunc_called(this, "_ZN5S59C54v108Ev");}
S59C5 ::S59C5(){ note_ctor("S59C5", this);} // tgen

static void Test_S59C5()
{
  extern Class_Descriptor cd_S59C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S59C5, buf);
    S59C5 *dp, &lv = *(dp=new (buf) S59C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S59C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C5)");
    check_base_class_offset(lv, (S59C7*)(S59C6*), 0, "S59C5");
    check_base_class_offset(lv, (S59C6*), 0, "S59C5");
    set_bf_and_test(lv, s59c5f0, ABISELECT(188,132), 0, 1, 1, "S59C5");
    set_bf_and_test(lv, s59c5f1, ABISELECT(188,132), 1, 1, 1, "S59C5");
    set_bf_and_test(lv, s59c5f2, ABISELECT(188,132), 2, 1, 1, "S59C5");
    check_field_offset(lv, s59c5f3, ABISELECT(192,136), "S59C5.s59c5f3");
    check_field_offset(lv, s59c5f4, ABISELECT(208,148), "S59C5.s59c5f4");
    check_field_offset(lv, s59c5f5, ABISELECT(224,160), "S59C5.s59c5f5");
    check_field_offset(lv, s59c5f6, ABISELECT(240,172), "S59C5.s59c5f6");
    check_field_offset(lv, s59c5f7, ABISELECT(256,184), "S59C5.s59c5f7");
    test_class_info(&lv, &cd_S59C5);
    dp->~S59C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C5(Test_S59C5, "S59C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S59C5C1Ev();
extern void _ZN5S59C5D1Ev();
Name_Map name_map_S59C5[] = {
  NSPAIR(_ZN5S59C5C1Ev),
  NSPAIR(_ZN5S59C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
static Base_Class bases_S59C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S59C5[];
extern void _ZN5S59C5D1Ev();
extern void _ZN5S59C5D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
static  VTBL_ENTRY vtc_S59C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C5[0]),
  (VTBL_ENTRY)&_ZN5S59C5D1Ev,
  (VTBL_ENTRY)&_ZN5S59C5D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
};
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
Class_Descriptor cd_S59C5 = {  "S59C5", // class name
  bases_S59C5, 2,
  &(vtc_S59C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S59C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S59C4  : S59C5 {
  void *s59c4f0[2];
  int s59c4f1[4];
  unsigned int s59c4f2:1;
  unsigned int s59c4f3:1;
  unsigned int s59c4f4:1;
  char s59c4f5;
  int s59c4f6;
  unsigned int s59c4f7:1;
  ::S287C23 s59c4f8;
  virtual  ~S59C4(); // _ZN5S59C4D1Ev
  virtual void  v109(); // _ZN5S59C44v109Ev
  virtual void  v110(); // _ZN5S59C44v110Ev
  virtual void  v111(); // _ZN5S59C44v111Ev
  virtual void  v112(); // _ZN5S59C44v112Ev
  virtual void  v113(); // _ZN5S59C44v113Ev
  virtual void  v114(); // _ZN5S59C44v114Ev
  virtual void  v115(); // _ZN5S59C44v115Ev
  virtual void  v116(); // _ZN5S59C44v116Ev
  virtual void  v117(); // _ZN5S59C44v117Ev
  virtual void  v118(); // _ZN5S59C44v118Ev
  virtual void  v119(); // _ZN5S59C44v119Ev
  virtual void  v120(); // _ZN5S59C44v120Ev
  virtual void  v121(); // _ZN5S59C44v121Ev
  virtual void  v122(); // _ZN5S59C44v122Ev
  S59C4(); // tgen
};
//SIG(-1 S59C4) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S59C4 ::~S59C4(){ note_dtor("S59C4", this);}
void  S59C4 ::v109(){vfunc_called(this, "_ZN5S59C44v109Ev");}
void  S59C4 ::v110(){vfunc_called(this, "_ZN5S59C44v110Ev");}
void  S59C4 ::v111(){vfunc_called(this, "_ZN5S59C44v111Ev");}
void  S59C4 ::v112(){vfunc_called(this, "_ZN5S59C44v112Ev");}
void  S59C4 ::v113(){vfunc_called(this, "_ZN5S59C44v113Ev");}
void  S59C4 ::v114(){vfunc_called(this, "_ZN5S59C44v114Ev");}
void  S59C4 ::v115(){vfunc_called(this, "_ZN5S59C44v115Ev");}
void  S59C4 ::v116(){vfunc_called(this, "_ZN5S59C44v116Ev");}
void  S59C4 ::v117(){vfunc_called(this, "_ZN5S59C44v117Ev");}
void  S59C4 ::v118(){vfunc_called(this, "_ZN5S59C44v118Ev");}
void  S59C4 ::v119(){vfunc_called(this, "_ZN5S59C44v119Ev");}
void  S59C4 ::v120(){vfunc_called(this, "_ZN5S59C44v120Ev");}
void  S59C4 ::v121(){vfunc_called(this, "_ZN5S59C44v121Ev");}
void  S59C4 ::v122(){vfunc_called(this, "_ZN5S59C44v122Ev");}
S59C4 ::S59C4(){ note_ctor("S59C4", this);} // tgen

static void Test_S59C4()
{
  extern Class_Descriptor cd_S59C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S59C4, buf);
    S59C4 *dp, &lv = *(dp=new (buf) S59C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S59C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C4)");
    check_base_class_offset(lv, (S59C7*)(S59C6*)(S59C5*), 0, "S59C4");
    check_base_class_offset(lv, (S59C6*)(S59C5*), 0, "S59C4");
    check_base_class_offset(lv, (S59C5*), 0, "S59C4");
    check_field_offset(lv, s59c4f0, ABISELECT(272,196), "S59C4.s59c4f0");
    check_field_offset(lv, s59c4f1, ABISELECT(288,204), "S59C4.s59c4f1");
    set_bf_and_test(lv, s59c4f2, ABISELECT(304,220), 0, 1, 1, "S59C4");
    set_bf_and_test(lv, s59c4f3, ABISELECT(304,220), 1, 1, 1, "S59C4");
    set_bf_and_test(lv, s59c4f4, ABISELECT(304,220), 2, 1, 1, "S59C4");
    check_field_offset(lv, s59c4f5, ABISELECT(305,221), "S59C4.s59c4f5");
    check_field_offset(lv, s59c4f6, ABISELECT(308,224), "S59C4.s59c4f6");
    set_bf_and_test(lv, s59c4f7, ABISELECT(312,228), 0, 1, 1, "S59C4");
    check_field_offset(lv, s59c4f8, ABISELECT(320,232), "S59C4.s59c4f8");
    test_class_info(&lv, &cd_S59C4);
    dp->~S59C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C4(Test_S59C4, "S59C4", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN5S59C4C1Ev();
extern void _ZN5S59C4D1Ev();
Name_Map name_map_S59C4[] = {
  NSPAIR(_ZN5S59C4C1Ev),
  NSPAIR(_ZN5S59C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
extern Class_Descriptor cd_S59C5;
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
static Base_Class bases_S59C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S59C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S59C4[];
extern void _ZN5S59C4D1Ev();
extern void _ZN5S59C4D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
extern void _ZN5S59C44v109Ev();
extern void _ZN5S59C44v110Ev();
extern void _ZN5S59C44v111Ev();
extern void _ZN5S59C44v112Ev();
extern void _ZN5S59C44v113Ev();
extern void _ZN5S59C44v114Ev();
extern void _ZN5S59C44v115Ev();
extern void _ZN5S59C44v116Ev();
extern void _ZN5S59C44v117Ev();
extern void _ZN5S59C44v118Ev();
extern void _ZN5S59C44v119Ev();
extern void _ZN5S59C44v120Ev();
extern void _ZN5S59C44v121Ev();
extern void _ZN5S59C44v122Ev();
static  VTBL_ENTRY vtc_S59C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C4[0]),
  (VTBL_ENTRY)&_ZN5S59C4D1Ev,
  (VTBL_ENTRY)&_ZN5S59C4D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
  (VTBL_ENTRY)&_ZN5S59C44v109Ev,
  (VTBL_ENTRY)&_ZN5S59C44v110Ev,
  (VTBL_ENTRY)&_ZN5S59C44v111Ev,
  (VTBL_ENTRY)&_ZN5S59C44v112Ev,
  (VTBL_ENTRY)&_ZN5S59C44v113Ev,
  (VTBL_ENTRY)&_ZN5S59C44v114Ev,
  (VTBL_ENTRY)&_ZN5S59C44v115Ev,
  (VTBL_ENTRY)&_ZN5S59C44v116Ev,
  (VTBL_ENTRY)&_ZN5S59C44v117Ev,
  (VTBL_ENTRY)&_ZN5S59C44v118Ev,
  (VTBL_ENTRY)&_ZN5S59C44v119Ev,
  (VTBL_ENTRY)&_ZN5S59C44v120Ev,
  (VTBL_ENTRY)&_ZN5S59C44v121Ev,
  (VTBL_ENTRY)&_ZN5S59C44v122Ev,
};
extern VTBL_ENTRY _ZTI5S59C4[];
extern  VTBL_ENTRY _ZTV5S59C4[];
Class_Descriptor cd_S59C4 = {  "S59C4", // class name
  bases_S59C4, 3,
  &(vtc_S59C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI5S59C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C4),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S59C3  : S59C4 {
  void *s59c3f0[2];
  ::S287C8_nt s59c3f1;
  unsigned int s59c3f2:1;
  unsigned int s59c3f3:1;
  ::S3350C21_nt s59c3f4;
  virtual  ~S59C3(); // _ZN5S59C3D1Ev
  virtual void  v123(); // _ZN5S59C34v123Ev
  virtual void  v124(); // _ZN5S59C34v124Ev
  virtual void  v125(); // _ZN5S59C34v125Ev
  virtual void  v126(); // _ZN5S59C34v126Ev
  virtual void  v127(); // _ZN5S59C34v127Ev
  virtual void  v128(); // _ZN5S59C34v128Ev
  virtual void  v129(); // _ZN5S59C34v129Ev
  virtual void  v130(); // _ZN5S59C34v130Ev
  virtual void  v131(); // _ZN5S59C34v131Ev
  virtual void  v132(); // _ZN5S59C34v132Ev
  virtual void  v133(); // _ZN5S59C34v133Ev
  S59C3(); // tgen
};
//SIG(-1 S59C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S59C3 ::~S59C3(){ note_dtor("S59C3", this);}
void  S59C3 ::v123(){vfunc_called(this, "_ZN5S59C34v123Ev");}
void  S59C3 ::v124(){vfunc_called(this, "_ZN5S59C34v124Ev");}
void  S59C3 ::v125(){vfunc_called(this, "_ZN5S59C34v125Ev");}
void  S59C3 ::v126(){vfunc_called(this, "_ZN5S59C34v126Ev");}
void  S59C3 ::v127(){vfunc_called(this, "_ZN5S59C34v127Ev");}
void  S59C3 ::v128(){vfunc_called(this, "_ZN5S59C34v128Ev");}
void  S59C3 ::v129(){vfunc_called(this, "_ZN5S59C34v129Ev");}
void  S59C3 ::v130(){vfunc_called(this, "_ZN5S59C34v130Ev");}
void  S59C3 ::v131(){vfunc_called(this, "_ZN5S59C34v131Ev");}
void  S59C3 ::v132(){vfunc_called(this, "_ZN5S59C34v132Ev");}
void  S59C3 ::v133(){vfunc_called(this, "_ZN5S59C34v133Ev");}
S59C3 ::S59C3(){ note_ctor("S59C3", this);} // tgen

static void Test_S59C3()
{
  extern Class_Descriptor cd_S59C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S59C3, buf);
    S59C3 *dp, &lv = *(dp=new (buf) S59C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S59C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C3)");
    check_base_class_offset(lv, (S59C7*)(S59C6*)(S59C5*)(S59C4*), 0, "S59C3");
    check_base_class_offset(lv, (S59C6*)(S59C5*)(S59C4*), 0, "S59C3");
    check_base_class_offset(lv, (S59C5*)(S59C4*), 0, "S59C3");
    check_base_class_offset(lv, (S59C4*), 0, "S59C3");
    check_field_offset(lv, s59c3f0, ABISELECT(336,244), "S59C3.s59c3f0");
    check_field_offset(lv, s59c3f1, ABISELECT(352,252), "S59C3.s59c3f1");
    set_bf_and_test(lv, s59c3f2, ABISELECT(368,264), 0, 1, 1, "S59C3");
    set_bf_and_test(lv, s59c3f3, ABISELECT(368,264), 1, 1, 1, "S59C3");
    check_field_offset(lv, s59c3f4, ABISELECT(376,268), "S59C3.s59c3f4");
    test_class_info(&lv, &cd_S59C3);
    dp->~S59C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C3(Test_S59C3, "S59C3", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S59C3C1Ev();
extern void _ZN5S59C3D1Ev();
Name_Map name_map_S59C3[] = {
  NSPAIR(_ZN5S59C3C1Ev),
  NSPAIR(_ZN5S59C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
extern Class_Descriptor cd_S59C5;
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
extern Class_Descriptor cd_S59C4;
extern VTBL_ENTRY _ZTI5S59C4[];
extern  VTBL_ENTRY _ZTV5S59C4[];
static Base_Class bases_S59C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S59C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S59C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S59C3[];
extern void _ZN5S59C3D1Ev();
extern void _ZN5S59C3D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
extern void _ZN5S59C44v109Ev();
extern void _ZN5S59C44v110Ev();
extern void _ZN5S59C44v111Ev();
extern void _ZN5S59C44v112Ev();
extern void _ZN5S59C44v113Ev();
extern void _ZN5S59C44v114Ev();
extern void _ZN5S59C44v115Ev();
extern void _ZN5S59C44v116Ev();
extern void _ZN5S59C44v117Ev();
extern void _ZN5S59C44v118Ev();
extern void _ZN5S59C44v119Ev();
extern void _ZN5S59C44v120Ev();
extern void _ZN5S59C44v121Ev();
extern void _ZN5S59C44v122Ev();
extern void _ZN5S59C34v123Ev();
extern void _ZN5S59C34v124Ev();
extern void _ZN5S59C34v125Ev();
extern void _ZN5S59C34v126Ev();
extern void _ZN5S59C34v127Ev();
extern void _ZN5S59C34v128Ev();
extern void _ZN5S59C34v129Ev();
extern void _ZN5S59C34v130Ev();
extern void _ZN5S59C34v131Ev();
extern void _ZN5S59C34v132Ev();
extern void _ZN5S59C34v133Ev();
static  VTBL_ENTRY vtc_S59C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C3[0]),
  (VTBL_ENTRY)&_ZN5S59C3D1Ev,
  (VTBL_ENTRY)&_ZN5S59C3D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
  (VTBL_ENTRY)&_ZN5S59C44v109Ev,
  (VTBL_ENTRY)&_ZN5S59C44v110Ev,
  (VTBL_ENTRY)&_ZN5S59C44v111Ev,
  (VTBL_ENTRY)&_ZN5S59C44v112Ev,
  (VTBL_ENTRY)&_ZN5S59C44v113Ev,
  (VTBL_ENTRY)&_ZN5S59C44v114Ev,
  (VTBL_ENTRY)&_ZN5S59C44v115Ev,
  (VTBL_ENTRY)&_ZN5S59C44v116Ev,
  (VTBL_ENTRY)&_ZN5S59C44v117Ev,
  (VTBL_ENTRY)&_ZN5S59C44v118Ev,
  (VTBL_ENTRY)&_ZN5S59C44v119Ev,
  (VTBL_ENTRY)&_ZN5S59C44v120Ev,
  (VTBL_ENTRY)&_ZN5S59C44v121Ev,
  (VTBL_ENTRY)&_ZN5S59C44v122Ev,
  (VTBL_ENTRY)&_ZN5S59C34v123Ev,
  (VTBL_ENTRY)&_ZN5S59C34v124Ev,
  (VTBL_ENTRY)&_ZN5S59C34v125Ev,
  (VTBL_ENTRY)&_ZN5S59C34v126Ev,
  (VTBL_ENTRY)&_ZN5S59C34v127Ev,
  (VTBL_ENTRY)&_ZN5S59C34v128Ev,
  (VTBL_ENTRY)&_ZN5S59C34v129Ev,
  (VTBL_ENTRY)&_ZN5S59C34v130Ev,
  (VTBL_ENTRY)&_ZN5S59C34v131Ev,
  (VTBL_ENTRY)&_ZN5S59C34v132Ev,
  (VTBL_ENTRY)&_ZN5S59C34v133Ev,
};
extern VTBL_ENTRY _ZTI5S59C3[];
extern  VTBL_ENTRY _ZTV5S59C3[];
Class_Descriptor cd_S59C3 = {  "S59C3", // class name
  bases_S59C3, 4,
  &(vtc_S59C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S59C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C3),135, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S59C2  : S59C3 {
  virtual  ~S59C2(); // _ZN5S59C2D1Ev
  virtual void  v134(); // _ZN5S59C24v134Ev
  virtual void  v135(); // _ZN5S59C24v135Ev
  S59C2(); // tgen
};
//SIG(-1 S59C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2}


 S59C2 ::~S59C2(){ note_dtor("S59C2", this);}
void  S59C2 ::v134(){vfunc_called(this, "_ZN5S59C24v134Ev");}
void  S59C2 ::v135(){vfunc_called(this, "_ZN5S59C24v135Ev");}
S59C2 ::S59C2(){ note_ctor("S59C2", this);} // tgen

static void Test_S59C2()
{
  extern Class_Descriptor cd_S59C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S59C2, buf);
    S59C2 *dp, &lv = *(dp=new (buf) S59C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S59C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C2)");
    check_base_class_offset(lv, (S59C7*)(S59C6*)(S59C5*)(S59C4*)(S59C3*), 0, "S59C2");
    check_base_class_offset(lv, (S59C6*)(S59C5*)(S59C4*)(S59C3*), 0, "S59C2");
    check_base_class_offset(lv, (S59C5*)(S59C4*)(S59C3*), 0, "S59C2");
    check_base_class_offset(lv, (S59C4*)(S59C3*), 0, "S59C2");
    check_base_class_offset(lv, (S59C3*), 0, "S59C2");
    test_class_info(&lv, &cd_S59C2);
    dp->~S59C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C2(Test_S59C2, "S59C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S59C2C1Ev();
extern void _ZN5S59C2D1Ev();
Name_Map name_map_S59C2[] = {
  NSPAIR(_ZN5S59C2C1Ev),
  NSPAIR(_ZN5S59C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
extern Class_Descriptor cd_S59C5;
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
extern Class_Descriptor cd_S59C4;
extern VTBL_ENTRY _ZTI5S59C4[];
extern  VTBL_ENTRY _ZTV5S59C4[];
extern Class_Descriptor cd_S59C3;
extern VTBL_ENTRY _ZTI5S59C3[];
extern  VTBL_ENTRY _ZTV5S59C3[];
static Base_Class bases_S59C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S59C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S59C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S59C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S59C2[];
extern void _ZN5S59C2D1Ev();
extern void _ZN5S59C2D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
extern void _ZN5S59C44v109Ev();
extern void _ZN5S59C44v110Ev();
extern void _ZN5S59C44v111Ev();
extern void _ZN5S59C44v112Ev();
extern void _ZN5S59C44v113Ev();
extern void _ZN5S59C44v114Ev();
extern void _ZN5S59C44v115Ev();
extern void _ZN5S59C44v116Ev();
extern void _ZN5S59C44v117Ev();
extern void _ZN5S59C44v118Ev();
extern void _ZN5S59C44v119Ev();
extern void _ZN5S59C44v120Ev();
extern void _ZN5S59C44v121Ev();
extern void _ZN5S59C44v122Ev();
extern void _ZN5S59C34v123Ev();
extern void _ZN5S59C34v124Ev();
extern void _ZN5S59C34v125Ev();
extern void _ZN5S59C34v126Ev();
extern void _ZN5S59C34v127Ev();
extern void _ZN5S59C34v128Ev();
extern void _ZN5S59C34v129Ev();
extern void _ZN5S59C34v130Ev();
extern void _ZN5S59C34v131Ev();
extern void _ZN5S59C34v132Ev();
extern void _ZN5S59C34v133Ev();
extern void _ZN5S59C24v134Ev();
extern void _ZN5S59C24v135Ev();
static  VTBL_ENTRY vtc_S59C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C2[0]),
  (VTBL_ENTRY)&_ZN5S59C2D1Ev,
  (VTBL_ENTRY)&_ZN5S59C2D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
  (VTBL_ENTRY)&_ZN5S59C44v109Ev,
  (VTBL_ENTRY)&_ZN5S59C44v110Ev,
  (VTBL_ENTRY)&_ZN5S59C44v111Ev,
  (VTBL_ENTRY)&_ZN5S59C44v112Ev,
  (VTBL_ENTRY)&_ZN5S59C44v113Ev,
  (VTBL_ENTRY)&_ZN5S59C44v114Ev,
  (VTBL_ENTRY)&_ZN5S59C44v115Ev,
  (VTBL_ENTRY)&_ZN5S59C44v116Ev,
  (VTBL_ENTRY)&_ZN5S59C44v117Ev,
  (VTBL_ENTRY)&_ZN5S59C44v118Ev,
  (VTBL_ENTRY)&_ZN5S59C44v119Ev,
  (VTBL_ENTRY)&_ZN5S59C44v120Ev,
  (VTBL_ENTRY)&_ZN5S59C44v121Ev,
  (VTBL_ENTRY)&_ZN5S59C44v122Ev,
  (VTBL_ENTRY)&_ZN5S59C34v123Ev,
  (VTBL_ENTRY)&_ZN5S59C34v124Ev,
  (VTBL_ENTRY)&_ZN5S59C34v125Ev,
  (VTBL_ENTRY)&_ZN5S59C34v126Ev,
  (VTBL_ENTRY)&_ZN5S59C34v127Ev,
  (VTBL_ENTRY)&_ZN5S59C34v128Ev,
  (VTBL_ENTRY)&_ZN5S59C34v129Ev,
  (VTBL_ENTRY)&_ZN5S59C34v130Ev,
  (VTBL_ENTRY)&_ZN5S59C34v131Ev,
  (VTBL_ENTRY)&_ZN5S59C34v132Ev,
  (VTBL_ENTRY)&_ZN5S59C34v133Ev,
  (VTBL_ENTRY)&_ZN5S59C24v134Ev,
  (VTBL_ENTRY)&_ZN5S59C24v135Ev,
};
extern VTBL_ENTRY _ZTI5S59C2[];
extern  VTBL_ENTRY _ZTV5S59C2[];
Class_Descriptor cd_S59C2 = {  "S59C2", // class name
  bases_S59C2, 5,
  &(vtc_S59C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S59C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C2),137, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S59C1  : S59C2 {
  virtual  ~S59C1(); // _ZN5S59C1D1Ev
  virtual void  v1(); // _ZN5S59C12v1Ev
  virtual void  v2(); // _ZN5S59C12v2Ev
  S59C1(); // tgen
};
//SIG(1 S59C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC22{ BC23{ BC12}}} vd v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 Fp[2] FC9 Fi:1 Fi:1 FC24{ m Fp FC8}} vd v134 v135} vd v1 v2}


 S59C1 ::~S59C1(){ note_dtor("S59C1", this);}
void  S59C1 ::v1(){vfunc_called(this, "_ZN5S59C12v1Ev");}
void  S59C1 ::v2(){vfunc_called(this, "_ZN5S59C12v2Ev");}
S59C1 ::S59C1(){ note_ctor("S59C1", this);} // tgen

static void Test_S59C1()
{
  extern Class_Descriptor cd_S59C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S59C1, buf);
    S59C1 *dp, &lv = *(dp=new (buf) S59C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S59C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S59C1)");
    check_base_class_offset(lv, (S59C7*)(S59C6*)(S59C5*)(S59C4*)(S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C6*)(S59C5*)(S59C4*)(S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C5*)(S59C4*)(S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C4*)(S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C3*)(S59C2*), 0, "S59C1");
    check_base_class_offset(lv, (S59C2*), 0, "S59C1");
    test_class_info(&lv, &cd_S59C1);
    dp->~S59C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS59C1(Test_S59C1, "S59C1", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN5S59C1C1Ev();
extern void _ZN5S59C1D1Ev();
Name_Map name_map_S59C1[] = {
  NSPAIR(_ZN5S59C1C1Ev),
  NSPAIR(_ZN5S59C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S59C7;
extern VTBL_ENTRY _ZTI5S59C7[];
extern  VTBL_ENTRY _ZTV5S59C7[];
extern Class_Descriptor cd_S59C6;
extern VTBL_ENTRY _ZTI5S59C6[];
extern  VTBL_ENTRY _ZTV5S59C6[];
extern Class_Descriptor cd_S59C5;
extern VTBL_ENTRY _ZTI5S59C5[];
extern  VTBL_ENTRY _ZTV5S59C5[];
extern Class_Descriptor cd_S59C4;
extern VTBL_ENTRY _ZTI5S59C4[];
extern  VTBL_ENTRY _ZTV5S59C4[];
extern Class_Descriptor cd_S59C3;
extern VTBL_ENTRY _ZTI5S59C3[];
extern  VTBL_ENTRY _ZTV5S59C3[];
extern Class_Descriptor cd_S59C2;
extern VTBL_ENTRY _ZTI5S59C2[];
extern  VTBL_ENTRY _ZTV5S59C2[];
static Base_Class bases_S59C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S59C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S59C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S59C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S59C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S59C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S59C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S59C1[];
extern void _ZN5S59C1D1Ev();
extern void _ZN5S59C1D0Ev();
extern void _ZN5S59C72v3Ev();
extern void _ZN5S59C72v4Ev();
extern void _ZN5S59C72v5Ev();
extern void _ZN5S59C72v6Ev();
extern void _ZN5S59C72v7Ev();
extern void _ZN5S59C72v8Ev();
extern void _ZN5S59C72v9Ev();
extern void _ZN5S59C73v10Ev();
extern void _ZN5S59C73v11Ev();
extern void _ZN5S59C73v12Ev();
extern void _ZN5S59C73v13Ev();
extern void _ZN5S59C73v14Ev();
extern void _ZN5S59C73v15Ev();
extern void _ZN5S59C73v16Ev();
extern void _ZN5S59C73v17Ev();
extern void _ZN5S59C73v18Ev();
extern void _ZN5S59C73v19Ev();
extern void _ZN5S59C73v20Ev();
extern void _ZN5S59C73v21Ev();
extern void _ZN5S59C73v22Ev();
extern void _ZN5S59C73v23Ev();
extern void _ZN5S59C73v24Ev();
extern void _ZN5S59C73v25Ev();
extern void _ZN5S59C73v26Ev();
extern void _ZN5S59C73v27Ev();
extern void _ZN5S59C73v28Ev();
extern void _ZN5S59C73v29Ev();
extern void _ZN5S59C73v30Ev();
extern void _ZN5S59C73v31Ev();
extern void _ZN5S59C73v32Ev();
extern void _ZN5S59C73v33Ev();
extern void _ZN5S59C73v34Ev();
extern void _ZN5S59C73v35Ev();
extern void _ZN5S59C73v36Ev();
extern void _ZN5S59C73v37Ev();
extern void _ZN5S59C73v38Ev();
extern void _ZN5S59C73v39Ev();
extern void _ZN5S59C73v40Ev();
extern void _ZN5S59C73v41Ev();
extern void _ZN5S59C73v42Ev();
extern void _ZN5S59C73v43Ev();
extern void _ZN5S59C73v44Ev();
extern void _ZN5S59C73v45Ev();
extern void _ZN5S59C73v46Ev();
extern void _ZN5S59C73v47Ev();
extern void _ZN5S59C73v48Ev();
extern void _ZN5S59C73v49Ev();
extern void _ZN5S59C73v50Ev();
extern void _ZN5S59C73v51Ev();
extern void _ZN5S59C73v52Ev();
extern void _ZN5S59C73v53Ev();
extern void _ZN5S59C73v54Ev();
extern void _ZN5S59C73v55Ev();
extern void _ZN5S59C73v56Ev();
extern void _ZN5S59C73v57Ev();
extern void _ZN5S59C73v58Ev();
extern void _ZN5S59C73v59Ev();
extern void _ZN5S59C73v60Ev();
extern void _ZN5S59C73v61Ev();
extern void _ZN5S59C73v62Ev();
extern void _ZN5S59C73v63Ev();
extern void _ZN5S59C73v64Ev();
extern void _ZN5S59C73v65Ev();
extern void _ZN5S59C73v66Ev();
extern void _ZN5S59C63v67Ev();
extern void _ZN5S59C63v68Ev();
extern void _ZN5S59C63v69Ev();
extern void _ZN5S59C63v70Ev();
extern void _ZN5S59C63v71Ev();
extern void _ZN5S59C63v72Ev();
extern void _ZN5S59C63v73Ev();
extern void _ZN5S59C63v74Ev();
extern void _ZN5S59C63v75Ev();
extern void _ZN5S59C63v76Ev();
extern void _ZN5S59C63v77Ev();
extern void _ZN5S59C63v78Ev();
extern void _ZN5S59C63v79Ev();
extern void _ZN5S59C63v80Ev();
extern void _ZN5S59C63v81Ev();
extern void _ZN5S59C63v82Ev();
extern void _ZN5S59C63v83Ev();
extern void _ZN5S59C63v84Ev();
extern void _ZN5S59C63v85Ev();
extern void _ZN5S59C63v86Ev();
extern void _ZN5S59C63v87Ev();
extern void _ZN5S59C63v88Ev();
extern void _ZN5S59C53v89Ev();
extern void _ZN5S59C53v90Ev();
extern void _ZN5S59C53v91Ev();
extern void _ZN5S59C53v92Ev();
extern void _ZN5S59C53v93Ev();
extern void _ZN5S59C53v94Ev();
extern void _ZN5S59C53v95Ev();
extern void _ZN5S59C53v96Ev();
extern void _ZN5S59C53v97Ev();
extern void _ZN5S59C53v98Ev();
extern void _ZN5S59C53v99Ev();
extern void _ZN5S59C54v100Ev();
extern void _ZN5S59C54v101Ev();
extern void _ZN5S59C54v102Ev();
extern void _ZN5S59C54v103Ev();
extern void _ZN5S59C54v104Ev();
extern void _ZN5S59C54v105Ev();
extern void _ZN5S59C54v106Ev();
extern void _ZN5S59C54v107Ev();
extern void _ZN5S59C54v108Ev();
extern void _ZN5S59C44v109Ev();
extern void _ZN5S59C44v110Ev();
extern void _ZN5S59C44v111Ev();
extern void _ZN5S59C44v112Ev();
extern void _ZN5S59C44v113Ev();
extern void _ZN5S59C44v114Ev();
extern void _ZN5S59C44v115Ev();
extern void _ZN5S59C44v116Ev();
extern void _ZN5S59C44v117Ev();
extern void _ZN5S59C44v118Ev();
extern void _ZN5S59C44v119Ev();
extern void _ZN5S59C44v120Ev();
extern void _ZN5S59C44v121Ev();
extern void _ZN5S59C44v122Ev();
extern void _ZN5S59C34v123Ev();
extern void _ZN5S59C34v124Ev();
extern void _ZN5S59C34v125Ev();
extern void _ZN5S59C34v126Ev();
extern void _ZN5S59C34v127Ev();
extern void _ZN5S59C34v128Ev();
extern void _ZN5S59C34v129Ev();
extern void _ZN5S59C34v130Ev();
extern void _ZN5S59C34v131Ev();
extern void _ZN5S59C34v132Ev();
extern void _ZN5S59C34v133Ev();
extern void _ZN5S59C24v134Ev();
extern void _ZN5S59C24v135Ev();
extern void _ZN5S59C12v1Ev();
extern void _ZN5S59C12v2Ev();
static  VTBL_ENTRY vtc_S59C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S59C1[0]),
  (VTBL_ENTRY)&_ZN5S59C1D1Ev,
  (VTBL_ENTRY)&_ZN5S59C1D0Ev,
  (VTBL_ENTRY)&_ZN5S59C72v3Ev,
  (VTBL_ENTRY)&_ZN5S59C72v4Ev,
  (VTBL_ENTRY)&_ZN5S59C72v5Ev,
  (VTBL_ENTRY)&_ZN5S59C72v6Ev,
  (VTBL_ENTRY)&_ZN5S59C72v7Ev,
  (VTBL_ENTRY)&_ZN5S59C72v8Ev,
  (VTBL_ENTRY)&_ZN5S59C72v9Ev,
  (VTBL_ENTRY)&_ZN5S59C73v10Ev,
  (VTBL_ENTRY)&_ZN5S59C73v11Ev,
  (VTBL_ENTRY)&_ZN5S59C73v12Ev,
  (VTBL_ENTRY)&_ZN5S59C73v13Ev,
  (VTBL_ENTRY)&_ZN5S59C73v14Ev,
  (VTBL_ENTRY)&_ZN5S59C73v15Ev,
  (VTBL_ENTRY)&_ZN5S59C73v16Ev,
  (VTBL_ENTRY)&_ZN5S59C73v17Ev,
  (VTBL_ENTRY)&_ZN5S59C73v18Ev,
  (VTBL_ENTRY)&_ZN5S59C73v19Ev,
  (VTBL_ENTRY)&_ZN5S59C73v20Ev,
  (VTBL_ENTRY)&_ZN5S59C73v21Ev,
  (VTBL_ENTRY)&_ZN5S59C73v22Ev,
  (VTBL_ENTRY)&_ZN5S59C73v23Ev,
  (VTBL_ENTRY)&_ZN5S59C73v24Ev,
  (VTBL_ENTRY)&_ZN5S59C73v25Ev,
  (VTBL_ENTRY)&_ZN5S59C73v26Ev,
  (VTBL_ENTRY)&_ZN5S59C73v27Ev,
  (VTBL_ENTRY)&_ZN5S59C73v28Ev,
  (VTBL_ENTRY)&_ZN5S59C73v29Ev,
  (VTBL_ENTRY)&_ZN5S59C73v30Ev,
  (VTBL_ENTRY)&_ZN5S59C73v31Ev,
  (VTBL_ENTRY)&_ZN5S59C73v32Ev,
  (VTBL_ENTRY)&_ZN5S59C73v33Ev,
  (VTBL_ENTRY)&_ZN5S59C73v34Ev,
  (VTBL_ENTRY)&_ZN5S59C73v35Ev,
  (VTBL_ENTRY)&_ZN5S59C73v36Ev,
  (VTBL_ENTRY)&_ZN5S59C73v37Ev,
  (VTBL_ENTRY)&_ZN5S59C73v38Ev,
  (VTBL_ENTRY)&_ZN5S59C73v39Ev,
  (VTBL_ENTRY)&_ZN5S59C73v40Ev,
  (VTBL_ENTRY)&_ZN5S59C73v41Ev,
  (VTBL_ENTRY)&_ZN5S59C73v42Ev,
  (VTBL_ENTRY)&_ZN5S59C73v43Ev,
  (VTBL_ENTRY)&_ZN5S59C73v44Ev,
  (VTBL_ENTRY)&_ZN5S59C73v45Ev,
  (VTBL_ENTRY)&_ZN5S59C73v46Ev,
  (VTBL_ENTRY)&_ZN5S59C73v47Ev,
  (VTBL_ENTRY)&_ZN5S59C73v48Ev,
  (VTBL_ENTRY)&_ZN5S59C73v49Ev,
  (VTBL_ENTRY)&_ZN5S59C73v50Ev,
  (VTBL_ENTRY)&_ZN5S59C73v51Ev,
  (VTBL_ENTRY)&_ZN5S59C73v52Ev,
  (VTBL_ENTRY)&_ZN5S59C73v53Ev,
  (VTBL_ENTRY)&_ZN5S59C73v54Ev,
  (VTBL_ENTRY)&_ZN5S59C73v55Ev,
  (VTBL_ENTRY)&_ZN5S59C73v56Ev,
  (VTBL_ENTRY)&_ZN5S59C73v57Ev,
  (VTBL_ENTRY)&_ZN5S59C73v58Ev,
  (VTBL_ENTRY)&_ZN5S59C73v59Ev,
  (VTBL_ENTRY)&_ZN5S59C73v60Ev,
  (VTBL_ENTRY)&_ZN5S59C73v61Ev,
  (VTBL_ENTRY)&_ZN5S59C73v62Ev,
  (VTBL_ENTRY)&_ZN5S59C73v63Ev,
  (VTBL_ENTRY)&_ZN5S59C73v64Ev,
  (VTBL_ENTRY)&_ZN5S59C73v65Ev,
  (VTBL_ENTRY)&_ZN5S59C73v66Ev,
  (VTBL_ENTRY)&_ZN5S59C63v67Ev,
  (VTBL_ENTRY)&_ZN5S59C63v68Ev,
  (VTBL_ENTRY)&_ZN5S59C63v69Ev,
  (VTBL_ENTRY)&_ZN5S59C63v70Ev,
  (VTBL_ENTRY)&_ZN5S59C63v71Ev,
  (VTBL_ENTRY)&_ZN5S59C63v72Ev,
  (VTBL_ENTRY)&_ZN5S59C63v73Ev,
  (VTBL_ENTRY)&_ZN5S59C63v74Ev,
  (VTBL_ENTRY)&_ZN5S59C63v75Ev,
  (VTBL_ENTRY)&_ZN5S59C63v76Ev,
  (VTBL_ENTRY)&_ZN5S59C63v77Ev,
  (VTBL_ENTRY)&_ZN5S59C63v78Ev,
  (VTBL_ENTRY)&_ZN5S59C63v79Ev,
  (VTBL_ENTRY)&_ZN5S59C63v80Ev,
  (VTBL_ENTRY)&_ZN5S59C63v81Ev,
  (VTBL_ENTRY)&_ZN5S59C63v82Ev,
  (VTBL_ENTRY)&_ZN5S59C63v83Ev,
  (VTBL_ENTRY)&_ZN5S59C63v84Ev,
  (VTBL_ENTRY)&_ZN5S59C63v85Ev,
  (VTBL_ENTRY)&_ZN5S59C63v86Ev,
  (VTBL_ENTRY)&_ZN5S59C63v87Ev,
  (VTBL_ENTRY)&_ZN5S59C63v88Ev,
  (VTBL_ENTRY)&_ZN5S59C53v89Ev,
  (VTBL_ENTRY)&_ZN5S59C53v90Ev,
  (VTBL_ENTRY)&_ZN5S59C53v91Ev,
  (VTBL_ENTRY)&_ZN5S59C53v92Ev,
  (VTBL_ENTRY)&_ZN5S59C53v93Ev,
  (VTBL_ENTRY)&_ZN5S59C53v94Ev,
  (VTBL_ENTRY)&_ZN5S59C53v95Ev,
  (VTBL_ENTRY)&_ZN5S59C53v96Ev,
  (VTBL_ENTRY)&_ZN5S59C53v97Ev,
  (VTBL_ENTRY)&_ZN5S59C53v98Ev,
  (VTBL_ENTRY)&_ZN5S59C53v99Ev,
  (VTBL_ENTRY)&_ZN5S59C54v100Ev,
  (VTBL_ENTRY)&_ZN5S59C54v101Ev,
  (VTBL_ENTRY)&_ZN5S59C54v102Ev,
  (VTBL_ENTRY)&_ZN5S59C54v103Ev,
  (VTBL_ENTRY)&_ZN5S59C54v104Ev,
  (VTBL_ENTRY)&_ZN5S59C54v105Ev,
  (VTBL_ENTRY)&_ZN5S59C54v106Ev,
  (VTBL_ENTRY)&_ZN5S59C54v107Ev,
  (VTBL_ENTRY)&_ZN5S59C54v108Ev,
  (VTBL_ENTRY)&_ZN5S59C44v109Ev,
  (VTBL_ENTRY)&_ZN5S59C44v110Ev,
  (VTBL_ENTRY)&_ZN5S59C44v111Ev,
  (VTBL_ENTRY)&_ZN5S59C44v112Ev,
  (VTBL_ENTRY)&_ZN5S59C44v113Ev,
  (VTBL_ENTRY)&_ZN5S59C44v114Ev,
  (VTBL_ENTRY)&_ZN5S59C44v115Ev,
  (VTBL_ENTRY)&_ZN5S59C44v116Ev,
  (VTBL_ENTRY)&_ZN5S59C44v117Ev,
  (VTBL_ENTRY)&_ZN5S59C44v118Ev,
  (VTBL_ENTRY)&_ZN5S59C44v119Ev,
  (VTBL_ENTRY)&_ZN5S59C44v120Ev,
  (VTBL_ENTRY)&_ZN5S59C44v121Ev,
  (VTBL_ENTRY)&_ZN5S59C44v122Ev,
  (VTBL_ENTRY)&_ZN5S59C34v123Ev,
  (VTBL_ENTRY)&_ZN5S59C34v124Ev,
  (VTBL_ENTRY)&_ZN5S59C34v125Ev,
  (VTBL_ENTRY)&_ZN5S59C34v126Ev,
  (VTBL_ENTRY)&_ZN5S59C34v127Ev,
  (VTBL_ENTRY)&_ZN5S59C34v128Ev,
  (VTBL_ENTRY)&_ZN5S59C34v129Ev,
  (VTBL_ENTRY)&_ZN5S59C34v130Ev,
  (VTBL_ENTRY)&_ZN5S59C34v131Ev,
  (VTBL_ENTRY)&_ZN5S59C34v132Ev,
  (VTBL_ENTRY)&_ZN5S59C34v133Ev,
  (VTBL_ENTRY)&_ZN5S59C24v134Ev,
  (VTBL_ENTRY)&_ZN5S59C24v135Ev,
  (VTBL_ENTRY)&_ZN5S59C12v1Ev,
  (VTBL_ENTRY)&_ZN5S59C12v2Ev,
};
extern VTBL_ENTRY _ZTI5S59C1[];
extern  VTBL_ENTRY _ZTV5S59C1[];
Class_Descriptor cd_S59C1 = {  "S59C1", // class name
  bases_S59C1, 6,
  &(vtc_S59C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI5S59C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S59C1),139, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S216C6  {
  int s216c6f0;
  __tsi64 s216c6f1;
  void *s216c6f2[4];
  int s216c6f3[2];
  void *s216c6f4;
  ::S3350C4_nt s216c6f5;
  void *s216c6f6[2];
  virtual  ~S216C6(); // _ZN6S216C6D1Ev
  virtual void  v4(); // _ZN6S216C62v4Ev
  virtual void  v5(); // _ZN6S216C62v5Ev
  virtual void  v6(); // _ZN6S216C62v6Ev
  virtual void  v7(); // _ZN6S216C62v7Ev
  virtual void  v8(); // _ZN6S216C62v8Ev
  virtual void  v9(); // _ZN6S216C62v9Ev
  virtual void  v10(); // _ZN6S216C63v10Ev
  virtual void  v11(); // _ZN6S216C63v11Ev
  virtual void  v12(); // _ZN6S216C63v12Ev
  virtual void  v13(); // _ZN6S216C63v13Ev
  virtual void  v14(); // _ZN6S216C63v14Ev
  virtual void  v15(); // _ZN6S216C63v15Ev
  virtual void  v16(); // _ZN6S216C63v16Ev
  virtual void  v17(); // _ZN6S216C63v17Ev
  virtual void  v18(); // _ZN6S216C63v18Ev
  virtual void  v19(); // _ZN6S216C63v19Ev
  virtual void  v20(); // _ZN6S216C63v20Ev
  virtual void  v21(); // _ZN6S216C63v21Ev
  virtual void  v22(); // _ZN6S216C63v22Ev
  virtual void  v23(); // _ZN6S216C63v23Ev
  virtual void  v24(); // _ZN6S216C63v24Ev
  virtual void  v25(); // _ZN6S216C63v25Ev
  virtual void  v26(); // _ZN6S216C63v26Ev
  virtual void  v27(); // _ZN6S216C63v27Ev
  virtual void  v28(); // _ZN6S216C63v28Ev
  virtual void  v29(); // _ZN6S216C63v29Ev
  virtual void  v30(); // _ZN6S216C63v30Ev
  virtual void  v31(); // _ZN6S216C63v31Ev
  virtual void  v32(); // _ZN6S216C63v32Ev
  virtual void  v33(); // _ZN6S216C63v33Ev
  virtual void  v34(); // _ZN6S216C63v34Ev
  virtual void  v35(); // _ZN6S216C63v35Ev
  virtual void  v36(); // _ZN6S216C63v36Ev
  virtual void  v37(); // _ZN6S216C63v37Ev
  virtual void  v38(); // _ZN6S216C63v38Ev
  virtual void  v39(); // _ZN6S216C63v39Ev
  virtual void  v40(); // _ZN6S216C63v40Ev
  virtual void  v41(); // _ZN6S216C63v41Ev
  virtual void  v42(); // _ZN6S216C63v42Ev
  virtual void  v43(); // _ZN6S216C63v43Ev
  virtual void  v44(); // _ZN6S216C63v44Ev
  virtual void  v45(); // _ZN6S216C63v45Ev
  virtual void  v46(); // _ZN6S216C63v46Ev
  virtual void  v47(); // _ZN6S216C63v47Ev
  virtual void  v48(); // _ZN6S216C63v48Ev
  virtual void  v49(); // _ZN6S216C63v49Ev
  virtual void  v50(); // _ZN6S216C63v50Ev
  virtual void  v51(); // _ZN6S216C63v51Ev
  virtual void  v52(); // _ZN6S216C63v52Ev
  virtual void  v53(); // _ZN6S216C63v53Ev
  virtual void  v54(); // _ZN6S216C63v54Ev
  virtual void  v55(); // _ZN6S216C63v55Ev
  virtual void  v56(); // _ZN6S216C63v56Ev
  virtual void  v57(); // _ZN6S216C63v57Ev
  virtual void  v58(); // _ZN6S216C63v58Ev
  virtual void  v59(); // _ZN6S216C63v59Ev
  virtual void  v60(); // _ZN6S216C63v60Ev
  virtual void  v61(); // _ZN6S216C63v61Ev
  virtual void  v62(); // _ZN6S216C63v62Ev
  virtual void  v63(); // _ZN6S216C63v63Ev
  virtual void  v64(); // _ZN6S216C63v64Ev
  virtual void  v65(); // _ZN6S216C63v65Ev
  virtual void  v66(); // _ZN6S216C63v66Ev
  virtual void  v67(); // _ZN6S216C63v67Ev
  S216C6(); // tgen
};
//SIG(-1 S216C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S216C6 ::~S216C6(){ note_dtor("S216C6", this);}
void  S216C6 ::v4(){vfunc_called(this, "_ZN6S216C62v4Ev");}
void  S216C6 ::v5(){vfunc_called(this, "_ZN6S216C62v5Ev");}
void  S216C6 ::v6(){vfunc_called(this, "_ZN6S216C62v6Ev");}
void  S216C6 ::v7(){vfunc_called(this, "_ZN6S216C62v7Ev");}
void  S216C6 ::v8(){vfunc_called(this, "_ZN6S216C62v8Ev");}
void  S216C6 ::v9(){vfunc_called(this, "_ZN6S216C62v9Ev");}
void  S216C6 ::v10(){vfunc_called(this, "_ZN6S216C63v10Ev");}
void  S216C6 ::v11(){vfunc_called(this, "_ZN6S216C63v11Ev");}
void  S216C6 ::v12(){vfunc_called(this, "_ZN6S216C63v12Ev");}
void  S216C6 ::v13(){vfunc_called(this, "_ZN6S216C63v13Ev");}
void  S216C6 ::v14(){vfunc_called(this, "_ZN6S216C63v14Ev");}
void  S216C6 ::v15(){vfunc_called(this, "_ZN6S216C63v15Ev");}
void  S216C6 ::v16(){vfunc_called(this, "_ZN6S216C63v16Ev");}
void  S216C6 ::v17(){vfunc_called(this, "_ZN6S216C63v17Ev");}
void  S216C6 ::v18(){vfunc_called(this, "_ZN6S216C63v18Ev");}
void  S216C6 ::v19(){vfunc_called(this, "_ZN6S216C63v19Ev");}
void  S216C6 ::v20(){vfunc_called(this, "_ZN6S216C63v20Ev");}
void  S216C6 ::v21(){vfunc_called(this, "_ZN6S216C63v21Ev");}
void  S216C6 ::v22(){vfunc_called(this, "_ZN6S216C63v22Ev");}
void  S216C6 ::v23(){vfunc_called(this, "_ZN6S216C63v23Ev");}
void  S216C6 ::v24(){vfunc_called(this, "_ZN6S216C63v24Ev");}
void  S216C6 ::v25(){vfunc_called(this, "_ZN6S216C63v25Ev");}
void  S216C6 ::v26(){vfunc_called(this, "_ZN6S216C63v26Ev");}
void  S216C6 ::v27(){vfunc_called(this, "_ZN6S216C63v27Ev");}
void  S216C6 ::v28(){vfunc_called(this, "_ZN6S216C63v28Ev");}
void  S216C6 ::v29(){vfunc_called(this, "_ZN6S216C63v29Ev");}
void  S216C6 ::v30(){vfunc_called(this, "_ZN6S216C63v30Ev");}
void  S216C6 ::v31(){vfunc_called(this, "_ZN6S216C63v31Ev");}
void  S216C6 ::v32(){vfunc_called(this, "_ZN6S216C63v32Ev");}
void  S216C6 ::v33(){vfunc_called(this, "_ZN6S216C63v33Ev");}
void  S216C6 ::v34(){vfunc_called(this, "_ZN6S216C63v34Ev");}
void  S216C6 ::v35(){vfunc_called(this, "_ZN6S216C63v35Ev");}
void  S216C6 ::v36(){vfunc_called(this, "_ZN6S216C63v36Ev");}
void  S216C6 ::v37(){vfunc_called(this, "_ZN6S216C63v37Ev");}
void  S216C6 ::v38(){vfunc_called(this, "_ZN6S216C63v38Ev");}
void  S216C6 ::v39(){vfunc_called(this, "_ZN6S216C63v39Ev");}
void  S216C6 ::v40(){vfunc_called(this, "_ZN6S216C63v40Ev");}
void  S216C6 ::v41(){vfunc_called(this, "_ZN6S216C63v41Ev");}
void  S216C6 ::v42(){vfunc_called(this, "_ZN6S216C63v42Ev");}
void  S216C6 ::v43(){vfunc_called(this, "_ZN6S216C63v43Ev");}
void  S216C6 ::v44(){vfunc_called(this, "_ZN6S216C63v44Ev");}
void  S216C6 ::v45(){vfunc_called(this, "_ZN6S216C63v45Ev");}
void  S216C6 ::v46(){vfunc_called(this, "_ZN6S216C63v46Ev");}
void  S216C6 ::v47(){vfunc_called(this, "_ZN6S216C63v47Ev");}
void  S216C6 ::v48(){vfunc_called(this, "_ZN6S216C63v48Ev");}
void  S216C6 ::v49(){vfunc_called(this, "_ZN6S216C63v49Ev");}
void  S216C6 ::v50(){vfunc_called(this, "_ZN6S216C63v50Ev");}
void  S216C6 ::v51(){vfunc_called(this, "_ZN6S216C63v51Ev");}
void  S216C6 ::v52(){vfunc_called(this, "_ZN6S216C63v52Ev");}
void  S216C6 ::v53(){vfunc_called(this, "_ZN6S216C63v53Ev");}
void  S216C6 ::v54(){vfunc_called(this, "_ZN6S216C63v54Ev");}
void  S216C6 ::v55(){vfunc_called(this, "_ZN6S216C63v55Ev");}
void  S216C6 ::v56(){vfunc_called(this, "_ZN6S216C63v56Ev");}
void  S216C6 ::v57(){vfunc_called(this, "_ZN6S216C63v57Ev");}
void  S216C6 ::v58(){vfunc_called(this, "_ZN6S216C63v58Ev");}
void  S216C6 ::v59(){vfunc_called(this, "_ZN6S216C63v59Ev");}
void  S216C6 ::v60(){vfunc_called(this, "_ZN6S216C63v60Ev");}
void  S216C6 ::v61(){vfunc_called(this, "_ZN6S216C63v61Ev");}
void  S216C6 ::v62(){vfunc_called(this, "_ZN6S216C63v62Ev");}
void  S216C6 ::v63(){vfunc_called(this, "_ZN6S216C63v63Ev");}
void  S216C6 ::v64(){vfunc_called(this, "_ZN6S216C63v64Ev");}
void  S216C6 ::v65(){vfunc_called(this, "_ZN6S216C63v65Ev");}
void  S216C6 ::v66(){vfunc_called(this, "_ZN6S216C63v66Ev");}
void  S216C6 ::v67(){vfunc_called(this, "_ZN6S216C63v67Ev");}
S216C6 ::S216C6(){ note_ctor("S216C6", this);} // tgen

static void Test_S216C6()
{
  extern Class_Descriptor cd_S216C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S216C6, buf);
    S216C6 *dp, &lv = *(dp=new (buf) S216C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S216C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C6)");
    check_field_offset(lv, s216c6f0, ABISELECT(8,4), "S216C6.s216c6f0");
    check_field_offset(lv, s216c6f1, ABISELECT(16,8), "S216C6.s216c6f1");
    check_field_offset(lv, s216c6f2, ABISELECT(24,16), "S216C6.s216c6f2");
    check_field_offset(lv, s216c6f3, ABISELECT(56,32), "S216C6.s216c6f3");
    check_field_offset(lv, s216c6f4, ABISELECT(64,40), "S216C6.s216c6f4");
    check_field_offset(lv, s216c6f5, ABISELECT(72,44), "S216C6.s216c6f5");
    check_field_offset(lv, s216c6f6, ABISELECT(80,52), "S216C6.s216c6f6");
    test_class_info(&lv, &cd_S216C6);
    dp->~S216C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C6(Test_S216C6, "S216C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S216C6C1Ev();
extern void _ZN6S216C6D1Ev();
Name_Map name_map_S216C6[] = {
  NSPAIR(_ZN6S216C6C1Ev),
  NSPAIR(_ZN6S216C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S216C6[];
extern void _ZN6S216C6D1Ev();
extern void _ZN6S216C6D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
static  VTBL_ENTRY vtc_S216C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C6[0]),
  (VTBL_ENTRY)&_ZN6S216C6D1Ev,
  (VTBL_ENTRY)&_ZN6S216C6D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
Class_Descriptor cd_S216C6 = {  "S216C6", // class name
  0,0,//no base classes
  &(vtc_S216C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S216C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S216C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S216C5  : S216C6 {
  int s216c5f0[2];
  void *s216c5f1;
  int s216c5f2[2];
  ::S287C8_nt s216c5f3;
  ::S287C8_nt s216c5f4;
  ::S2121C38 s216c5f5;
  ::S287C8_nt s216c5f6;
  unsigned int s216c5f7:1;
  unsigned int s216c5f8:1;
  unsigned int s216c5f9:1;
  unsigned int s216c5f10:1;
  unsigned int s216c5f11:1;
  int s216c5f12[2];
  virtual  ~S216C5(); // _ZN6S216C5D1Ev
  virtual void  v68(); // _ZN6S216C53v68Ev
  virtual void  v69(); // _ZN6S216C53v69Ev
  virtual void  v70(); // _ZN6S216C53v70Ev
  virtual void  v71(); // _ZN6S216C53v71Ev
  virtual void  v72(); // _ZN6S216C53v72Ev
  virtual void  v73(); // _ZN6S216C53v73Ev
  virtual void  v74(); // _ZN6S216C53v74Ev
  virtual void  v75(); // _ZN6S216C53v75Ev
  virtual void  v76(); // _ZN6S216C53v76Ev
  virtual void  v77(); // _ZN6S216C53v77Ev
  virtual void  v78(); // _ZN6S216C53v78Ev
  virtual void  v79(); // _ZN6S216C53v79Ev
  virtual void  v80(); // _ZN6S216C53v80Ev
  virtual void  v81(); // _ZN6S216C53v81Ev
  virtual void  v82(); // _ZN6S216C53v82Ev
  virtual void  v83(); // _ZN6S216C53v83Ev
  virtual void  v84(); // _ZN6S216C53v84Ev
  virtual void  v85(); // _ZN6S216C53v85Ev
  virtual void  v86(); // _ZN6S216C53v86Ev
  virtual void  v87(); // _ZN6S216C53v87Ev
  virtual void  v88(); // _ZN6S216C53v88Ev
  virtual void  v89(); // _ZN6S216C53v89Ev
  S216C5(); // tgen
};
//SIG(-1 S216C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S216C5 ::~S216C5(){ note_dtor("S216C5", this);}
void  S216C5 ::v68(){vfunc_called(this, "_ZN6S216C53v68Ev");}
void  S216C5 ::v69(){vfunc_called(this, "_ZN6S216C53v69Ev");}
void  S216C5 ::v70(){vfunc_called(this, "_ZN6S216C53v70Ev");}
void  S216C5 ::v71(){vfunc_called(this, "_ZN6S216C53v71Ev");}
void  S216C5 ::v72(){vfunc_called(this, "_ZN6S216C53v72Ev");}
void  S216C5 ::v73(){vfunc_called(this, "_ZN6S216C53v73Ev");}
void  S216C5 ::v74(){vfunc_called(this, "_ZN6S216C53v74Ev");}
void  S216C5 ::v75(){vfunc_called(this, "_ZN6S216C53v75Ev");}
void  S216C5 ::v76(){vfunc_called(this, "_ZN6S216C53v76Ev");}
void  S216C5 ::v77(){vfunc_called(this, "_ZN6S216C53v77Ev");}
void  S216C5 ::v78(){vfunc_called(this, "_ZN6S216C53v78Ev");}
void  S216C5 ::v79(){vfunc_called(this, "_ZN6S216C53v79Ev");}
void  S216C5 ::v80(){vfunc_called(this, "_ZN6S216C53v80Ev");}
void  S216C5 ::v81(){vfunc_called(this, "_ZN6S216C53v81Ev");}
void  S216C5 ::v82(){vfunc_called(this, "_ZN6S216C53v82Ev");}
void  S216C5 ::v83(){vfunc_called(this, "_ZN6S216C53v83Ev");}
void  S216C5 ::v84(){vfunc_called(this, "_ZN6S216C53v84Ev");}
void  S216C5 ::v85(){vfunc_called(this, "_ZN6S216C53v85Ev");}
void  S216C5 ::v86(){vfunc_called(this, "_ZN6S216C53v86Ev");}
void  S216C5 ::v87(){vfunc_called(this, "_ZN6S216C53v87Ev");}
void  S216C5 ::v88(){vfunc_called(this, "_ZN6S216C53v88Ev");}
void  S216C5 ::v89(){vfunc_called(this, "_ZN6S216C53v89Ev");}
S216C5 ::S216C5(){ note_ctor("S216C5", this);} // tgen

static void Test_S216C5()
{
  extern Class_Descriptor cd_S216C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S216C5, buf);
    S216C5 *dp, &lv = *(dp=new (buf) S216C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S216C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C5)");
    check_base_class_offset(lv, (S216C6*), 0, "S216C5");
    check_field_offset(lv, s216c5f0, ABISELECT(96,60), "S216C5.s216c5f0");
    check_field_offset(lv, s216c5f1, ABISELECT(104,68), "S216C5.s216c5f1");
    check_field_offset(lv, s216c5f2, ABISELECT(112,72), "S216C5.s216c5f2");
    check_field_offset(lv, s216c5f3, ABISELECT(120,80), "S216C5.s216c5f3");
    check_field_offset(lv, s216c5f4, ABISELECT(136,92), "S216C5.s216c5f4");
    check_field_offset(lv, s216c5f5, ABISELECT(152,104), "S216C5.s216c5f5");
    check_field_offset(lv, s216c5f6, ABISELECT(160,108), "S216C5.s216c5f6");
    set_bf_and_test(lv, s216c5f7, ABISELECT(176,120), 0, 1, 1, "S216C5");
    set_bf_and_test(lv, s216c5f8, ABISELECT(176,120), 1, 1, 1, "S216C5");
    set_bf_and_test(lv, s216c5f9, ABISELECT(176,120), 2, 1, 1, "S216C5");
    set_bf_and_test(lv, s216c5f10, ABISELECT(176,120), 3, 1, 1, "S216C5");
    set_bf_and_test(lv, s216c5f11, ABISELECT(176,120), 4, 1, 1, "S216C5");
    check_field_offset(lv, s216c5f12, ABISELECT(180,124), "S216C5.s216c5f12");
    test_class_info(&lv, &cd_S216C5);
    dp->~S216C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C5(Test_S216C5, "S216C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S216C5C1Ev();
extern void _ZN6S216C5D1Ev();
Name_Map name_map_S216C5[] = {
  NSPAIR(_ZN6S216C5C1Ev),
  NSPAIR(_ZN6S216C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
static Base_Class bases_S216C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S216C5[];
extern void _ZN6S216C5D1Ev();
extern void _ZN6S216C5D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
static  VTBL_ENTRY vtc_S216C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C5[0]),
  (VTBL_ENTRY)&_ZN6S216C5D1Ev,
  (VTBL_ENTRY)&_ZN6S216C5D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
Class_Descriptor cd_S216C5 = {  "S216C5", // class name
  bases_S216C5, 1,
  &(vtc_S216C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S216C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S216C4  : S216C5 {
  unsigned int s216c4f0:1;
  unsigned int s216c4f1:1;
  unsigned int s216c4f2:1;
  ::S3350C17 s216c4f3;
  ::S3350C11 s216c4f4;
  ::S3350C5_nt s216c4f5;
  ::S287C27 s216c4f6;
  int s216c4f7[3];
  virtual  ~S216C4(); // _ZN6S216C4D1Ev
  virtual void  v90(); // _ZN6S216C43v90Ev
  virtual void  v91(); // _ZN6S216C43v91Ev
  virtual void  v92(); // _ZN6S216C43v92Ev
  virtual void  v93(); // _ZN6S216C43v93Ev
  virtual void  v94(); // _ZN6S216C43v94Ev
  virtual void  v95(); // _ZN6S216C43v95Ev
  virtual void  v96(); // _ZN6S216C43v96Ev
  virtual void  v97(); // _ZN6S216C43v97Ev
  virtual void  v98(); // _ZN6S216C43v98Ev
  virtual void  v99(); // _ZN6S216C43v99Ev
  virtual void  v100(); // _ZN6S216C44v100Ev
  virtual void  v101(); // _ZN6S216C44v101Ev
  virtual void  v102(); // _ZN6S216C44v102Ev
  virtual void  v103(); // _ZN6S216C44v103Ev
  virtual void  v104(); // _ZN6S216C44v104Ev
  virtual void  v105(); // _ZN6S216C44v105Ev
  virtual void  v106(); // _ZN6S216C44v106Ev
  virtual void  v107(); // _ZN6S216C44v107Ev
  virtual void  v108(); // _ZN6S216C44v108Ev
  virtual void  v109(); // _ZN6S216C44v109Ev
  S216C4(); // tgen
};
//SIG(-1 S216C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S216C4 ::~S216C4(){ note_dtor("S216C4", this);}
void  S216C4 ::v90(){vfunc_called(this, "_ZN6S216C43v90Ev");}
void  S216C4 ::v91(){vfunc_called(this, "_ZN6S216C43v91Ev");}
void  S216C4 ::v92(){vfunc_called(this, "_ZN6S216C43v92Ev");}
void  S216C4 ::v93(){vfunc_called(this, "_ZN6S216C43v93Ev");}
void  S216C4 ::v94(){vfunc_called(this, "_ZN6S216C43v94Ev");}
void  S216C4 ::v95(){vfunc_called(this, "_ZN6S216C43v95Ev");}
void  S216C4 ::v96(){vfunc_called(this, "_ZN6S216C43v96Ev");}
void  S216C4 ::v97(){vfunc_called(this, "_ZN6S216C43v97Ev");}
void  S216C4 ::v98(){vfunc_called(this, "_ZN6S216C43v98Ev");}
void  S216C4 ::v99(){vfunc_called(this, "_ZN6S216C43v99Ev");}
void  S216C4 ::v100(){vfunc_called(this, "_ZN6S216C44v100Ev");}
void  S216C4 ::v101(){vfunc_called(this, "_ZN6S216C44v101Ev");}
void  S216C4 ::v102(){vfunc_called(this, "_ZN6S216C44v102Ev");}
void  S216C4 ::v103(){vfunc_called(this, "_ZN6S216C44v103Ev");}
void  S216C4 ::v104(){vfunc_called(this, "_ZN6S216C44v104Ev");}
void  S216C4 ::v105(){vfunc_called(this, "_ZN6S216C44v105Ev");}
void  S216C4 ::v106(){vfunc_called(this, "_ZN6S216C44v106Ev");}
void  S216C4 ::v107(){vfunc_called(this, "_ZN6S216C44v107Ev");}
void  S216C4 ::v108(){vfunc_called(this, "_ZN6S216C44v108Ev");}
void  S216C4 ::v109(){vfunc_called(this, "_ZN6S216C44v109Ev");}
S216C4 ::S216C4(){ note_ctor("S216C4", this);} // tgen

static void Test_S216C4()
{
  extern Class_Descriptor cd_S216C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S216C4, buf);
    S216C4 *dp, &lv = *(dp=new (buf) S216C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S216C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C4)");
    check_base_class_offset(lv, (S216C6*)(S216C5*), 0, "S216C4");
    check_base_class_offset(lv, (S216C5*), 0, "S216C4");
    set_bf_and_test(lv, s216c4f0, ABISELECT(188,132), 0, 1, 1, "S216C4");
    set_bf_and_test(lv, s216c4f1, ABISELECT(188,132), 1, 1, 1, "S216C4");
    set_bf_and_test(lv, s216c4f2, ABISELECT(188,132), 2, 1, 1, "S216C4");
    check_field_offset(lv, s216c4f3, ABISELECT(192,136), "S216C4.s216c4f3");
    check_field_offset(lv, s216c4f4, ABISELECT(208,148), "S216C4.s216c4f4");
    check_field_offset(lv, s216c4f5, ABISELECT(224,160), "S216C4.s216c4f5");
    check_field_offset(lv, s216c4f6, ABISELECT(240,172), "S216C4.s216c4f6");
    check_field_offset(lv, s216c4f7, ABISELECT(256,184), "S216C4.s216c4f7");
    test_class_info(&lv, &cd_S216C4);
    dp->~S216C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C4(Test_S216C4, "S216C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S216C4C1Ev();
extern void _ZN6S216C4D1Ev();
Name_Map name_map_S216C4[] = {
  NSPAIR(_ZN6S216C4C1Ev),
  NSPAIR(_ZN6S216C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
extern Class_Descriptor cd_S216C5;
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
static Base_Class bases_S216C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S216C4[];
extern void _ZN6S216C4D1Ev();
extern void _ZN6S216C4D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
extern void _ZN6S216C43v90Ev();
extern void _ZN6S216C43v91Ev();
extern void _ZN6S216C43v92Ev();
extern void _ZN6S216C43v93Ev();
extern void _ZN6S216C43v94Ev();
extern void _ZN6S216C43v95Ev();
extern void _ZN6S216C43v96Ev();
extern void _ZN6S216C43v97Ev();
extern void _ZN6S216C43v98Ev();
extern void _ZN6S216C43v99Ev();
extern void _ZN6S216C44v100Ev();
extern void _ZN6S216C44v101Ev();
extern void _ZN6S216C44v102Ev();
extern void _ZN6S216C44v103Ev();
extern void _ZN6S216C44v104Ev();
extern void _ZN6S216C44v105Ev();
extern void _ZN6S216C44v106Ev();
extern void _ZN6S216C44v107Ev();
extern void _ZN6S216C44v108Ev();
extern void _ZN6S216C44v109Ev();
static  VTBL_ENTRY vtc_S216C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C4[0]),
  (VTBL_ENTRY)&_ZN6S216C4D1Ev,
  (VTBL_ENTRY)&_ZN6S216C4D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
  (VTBL_ENTRY)&_ZN6S216C43v90Ev,
  (VTBL_ENTRY)&_ZN6S216C43v91Ev,
  (VTBL_ENTRY)&_ZN6S216C43v92Ev,
  (VTBL_ENTRY)&_ZN6S216C43v93Ev,
  (VTBL_ENTRY)&_ZN6S216C43v94Ev,
  (VTBL_ENTRY)&_ZN6S216C43v95Ev,
  (VTBL_ENTRY)&_ZN6S216C43v96Ev,
  (VTBL_ENTRY)&_ZN6S216C43v97Ev,
  (VTBL_ENTRY)&_ZN6S216C43v98Ev,
  (VTBL_ENTRY)&_ZN6S216C43v99Ev,
  (VTBL_ENTRY)&_ZN6S216C44v100Ev,
  (VTBL_ENTRY)&_ZN6S216C44v101Ev,
  (VTBL_ENTRY)&_ZN6S216C44v102Ev,
  (VTBL_ENTRY)&_ZN6S216C44v103Ev,
  (VTBL_ENTRY)&_ZN6S216C44v104Ev,
  (VTBL_ENTRY)&_ZN6S216C44v105Ev,
  (VTBL_ENTRY)&_ZN6S216C44v106Ev,
  (VTBL_ENTRY)&_ZN6S216C44v107Ev,
  (VTBL_ENTRY)&_ZN6S216C44v108Ev,
  (VTBL_ENTRY)&_ZN6S216C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S216C4[];
extern  VTBL_ENTRY _ZTV6S216C4[];
Class_Descriptor cd_S216C4 = {  "S216C4", // class name
  bases_S216C4, 2,
  &(vtc_S216C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S216C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S216C3  : S216C4 {
  void *s216c3f0[2];
  int s216c3f1[4];
  unsigned int s216c3f2:1;
  unsigned int s216c3f3:1;
  unsigned int s216c3f4:1;
  char s216c3f5;
  int s216c3f6;
  unsigned int s216c3f7:1;
  ::S287C23 s216c3f8;
  virtual  ~S216C3(); // _ZN6S216C3D1Ev
  virtual void  v110(); // _ZN6S216C34v110Ev
  virtual void  v111(); // _ZN6S216C34v111Ev
  virtual void  v112(); // _ZN6S216C34v112Ev
  virtual void  v113(); // _ZN6S216C34v113Ev
  virtual void  v114(); // _ZN6S216C34v114Ev
  virtual void  v115(); // _ZN6S216C34v115Ev
  virtual void  v116(); // _ZN6S216C34v116Ev
  virtual void  v117(); // _ZN6S216C34v117Ev
  virtual void  v118(); // _ZN6S216C34v118Ev
  virtual void  v119(); // _ZN6S216C34v119Ev
  virtual void  v120(); // _ZN6S216C34v120Ev
  virtual void  v121(); // _ZN6S216C34v121Ev
  virtual void  v122(); // _ZN6S216C34v122Ev
  virtual void  v123(); // _ZN6S216C34v123Ev
  S216C3(); // tgen
};
//SIG(-1 S216C3) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S216C3 ::~S216C3(){ note_dtor("S216C3", this);}
void  S216C3 ::v110(){vfunc_called(this, "_ZN6S216C34v110Ev");}
void  S216C3 ::v111(){vfunc_called(this, "_ZN6S216C34v111Ev");}
void  S216C3 ::v112(){vfunc_called(this, "_ZN6S216C34v112Ev");}
void  S216C3 ::v113(){vfunc_called(this, "_ZN6S216C34v113Ev");}
void  S216C3 ::v114(){vfunc_called(this, "_ZN6S216C34v114Ev");}
void  S216C3 ::v115(){vfunc_called(this, "_ZN6S216C34v115Ev");}
void  S216C3 ::v116(){vfunc_called(this, "_ZN6S216C34v116Ev");}
void  S216C3 ::v117(){vfunc_called(this, "_ZN6S216C34v117Ev");}
void  S216C3 ::v118(){vfunc_called(this, "_ZN6S216C34v118Ev");}
void  S216C3 ::v119(){vfunc_called(this, "_ZN6S216C34v119Ev");}
void  S216C3 ::v120(){vfunc_called(this, "_ZN6S216C34v120Ev");}
void  S216C3 ::v121(){vfunc_called(this, "_ZN6S216C34v121Ev");}
void  S216C3 ::v122(){vfunc_called(this, "_ZN6S216C34v122Ev");}
void  S216C3 ::v123(){vfunc_called(this, "_ZN6S216C34v123Ev");}
S216C3 ::S216C3(){ note_ctor("S216C3", this);} // tgen

static void Test_S216C3()
{
  extern Class_Descriptor cd_S216C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S216C3, buf);
    S216C3 *dp, &lv = *(dp=new (buf) S216C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S216C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C3)");
    check_base_class_offset(lv, (S216C6*)(S216C5*)(S216C4*), 0, "S216C3");
    check_base_class_offset(lv, (S216C5*)(S216C4*), 0, "S216C3");
    check_base_class_offset(lv, (S216C4*), 0, "S216C3");
    check_field_offset(lv, s216c3f0, ABISELECT(272,196), "S216C3.s216c3f0");
    check_field_offset(lv, s216c3f1, ABISELECT(288,204), "S216C3.s216c3f1");
    set_bf_and_test(lv, s216c3f2, ABISELECT(304,220), 0, 1, 1, "S216C3");
    set_bf_and_test(lv, s216c3f3, ABISELECT(304,220), 1, 1, 1, "S216C3");
    set_bf_and_test(lv, s216c3f4, ABISELECT(304,220), 2, 1, 1, "S216C3");
    check_field_offset(lv, s216c3f5, ABISELECT(305,221), "S216C3.s216c3f5");
    check_field_offset(lv, s216c3f6, ABISELECT(308,224), "S216C3.s216c3f6");
    set_bf_and_test(lv, s216c3f7, ABISELECT(312,228), 0, 1, 1, "S216C3");
    check_field_offset(lv, s216c3f8, ABISELECT(320,232), "S216C3.s216c3f8");
    test_class_info(&lv, &cd_S216C3);
    dp->~S216C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C3(Test_S216C3, "S216C3", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S216C3C1Ev();
extern void _ZN6S216C3D1Ev();
Name_Map name_map_S216C3[] = {
  NSPAIR(_ZN6S216C3C1Ev),
  NSPAIR(_ZN6S216C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
extern Class_Descriptor cd_S216C5;
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
extern Class_Descriptor cd_S216C4;
extern VTBL_ENTRY _ZTI6S216C4[];
extern  VTBL_ENTRY _ZTV6S216C4[];
static Base_Class bases_S216C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S216C3[];
extern void _ZN6S216C3D1Ev();
extern void _ZN6S216C3D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
extern void _ZN6S216C43v90Ev();
extern void _ZN6S216C43v91Ev();
extern void _ZN6S216C43v92Ev();
extern void _ZN6S216C43v93Ev();
extern void _ZN6S216C43v94Ev();
extern void _ZN6S216C43v95Ev();
extern void _ZN6S216C43v96Ev();
extern void _ZN6S216C43v97Ev();
extern void _ZN6S216C43v98Ev();
extern void _ZN6S216C43v99Ev();
extern void _ZN6S216C44v100Ev();
extern void _ZN6S216C44v101Ev();
extern void _ZN6S216C44v102Ev();
extern void _ZN6S216C44v103Ev();
extern void _ZN6S216C44v104Ev();
extern void _ZN6S216C44v105Ev();
extern void _ZN6S216C44v106Ev();
extern void _ZN6S216C44v107Ev();
extern void _ZN6S216C44v108Ev();
extern void _ZN6S216C44v109Ev();
extern void _ZN6S216C34v110Ev();
extern void _ZN6S216C34v111Ev();
extern void _ZN6S216C34v112Ev();
extern void _ZN6S216C34v113Ev();
extern void _ZN6S216C34v114Ev();
extern void _ZN6S216C34v115Ev();
extern void _ZN6S216C34v116Ev();
extern void _ZN6S216C34v117Ev();
extern void _ZN6S216C34v118Ev();
extern void _ZN6S216C34v119Ev();
extern void _ZN6S216C34v120Ev();
extern void _ZN6S216C34v121Ev();
extern void _ZN6S216C34v122Ev();
extern void _ZN6S216C34v123Ev();
static  VTBL_ENTRY vtc_S216C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C3[0]),
  (VTBL_ENTRY)&_ZN6S216C3D1Ev,
  (VTBL_ENTRY)&_ZN6S216C3D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
  (VTBL_ENTRY)&_ZN6S216C43v90Ev,
  (VTBL_ENTRY)&_ZN6S216C43v91Ev,
  (VTBL_ENTRY)&_ZN6S216C43v92Ev,
  (VTBL_ENTRY)&_ZN6S216C43v93Ev,
  (VTBL_ENTRY)&_ZN6S216C43v94Ev,
  (VTBL_ENTRY)&_ZN6S216C43v95Ev,
  (VTBL_ENTRY)&_ZN6S216C43v96Ev,
  (VTBL_ENTRY)&_ZN6S216C43v97Ev,
  (VTBL_ENTRY)&_ZN6S216C43v98Ev,
  (VTBL_ENTRY)&_ZN6S216C43v99Ev,
  (VTBL_ENTRY)&_ZN6S216C44v100Ev,
  (VTBL_ENTRY)&_ZN6S216C44v101Ev,
  (VTBL_ENTRY)&_ZN6S216C44v102Ev,
  (VTBL_ENTRY)&_ZN6S216C44v103Ev,
  (VTBL_ENTRY)&_ZN6S216C44v104Ev,
  (VTBL_ENTRY)&_ZN6S216C44v105Ev,
  (VTBL_ENTRY)&_ZN6S216C44v106Ev,
  (VTBL_ENTRY)&_ZN6S216C44v107Ev,
  (VTBL_ENTRY)&_ZN6S216C44v108Ev,
  (VTBL_ENTRY)&_ZN6S216C44v109Ev,
  (VTBL_ENTRY)&_ZN6S216C34v110Ev,
  (VTBL_ENTRY)&_ZN6S216C34v111Ev,
  (VTBL_ENTRY)&_ZN6S216C34v112Ev,
  (VTBL_ENTRY)&_ZN6S216C34v113Ev,
  (VTBL_ENTRY)&_ZN6S216C34v114Ev,
  (VTBL_ENTRY)&_ZN6S216C34v115Ev,
  (VTBL_ENTRY)&_ZN6S216C34v116Ev,
  (VTBL_ENTRY)&_ZN6S216C34v117Ev,
  (VTBL_ENTRY)&_ZN6S216C34v118Ev,
  (VTBL_ENTRY)&_ZN6S216C34v119Ev,
  (VTBL_ENTRY)&_ZN6S216C34v120Ev,
  (VTBL_ENTRY)&_ZN6S216C34v121Ev,
  (VTBL_ENTRY)&_ZN6S216C34v122Ev,
  (VTBL_ENTRY)&_ZN6S216C34v123Ev,
};
extern VTBL_ENTRY _ZTI6S216C3[];
extern  VTBL_ENTRY _ZTV6S216C3[];
Class_Descriptor cd_S216C3 = {  "S216C3", // class name
  bases_S216C3, 3,
  &(vtc_S216C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S216C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C3),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S216C2  : S216C3 {
  void *s216c2f0[2];
  ::S287C8_nt s216c2f1;
  unsigned int s216c2f2:1;
  unsigned int s216c2f3:1;
  ::S3350C21_nt s216c2f4;
  virtual  ~S216C2(); // _ZN6S216C2D1Ev
  virtual void  v124(); // _ZN6S216C24v124Ev
  virtual void  v125(); // _ZN6S216C24v125Ev
  virtual void  v126(); // _ZN6S216C24v126Ev
  virtual void  v127(); // _ZN6S216C24v127Ev
  virtual void  v128(); // _ZN6S216C24v128Ev
  virtual void  v129(); // _ZN6S216C24v129Ev
  virtual void  v130(); // _ZN6S216C24v130Ev
  virtual void  v131(); // _ZN6S216C24v131Ev
  virtual void  v132(); // _ZN6S216C24v132Ev
  virtual void  v133(); // _ZN6S216C24v133Ev
  virtual void  v134(); // _ZN6S216C24v134Ev
  S216C2(); // tgen
};
//SIG(-1 S216C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC7 Fi:1 Fi:1 FC22{ m Fp FC6}}


 S216C2 ::~S216C2(){ note_dtor("S216C2", this);}
void  S216C2 ::v124(){vfunc_called(this, "_ZN6S216C24v124Ev");}
void  S216C2 ::v125(){vfunc_called(this, "_ZN6S216C24v125Ev");}
void  S216C2 ::v126(){vfunc_called(this, "_ZN6S216C24v126Ev");}
void  S216C2 ::v127(){vfunc_called(this, "_ZN6S216C24v127Ev");}
void  S216C2 ::v128(){vfunc_called(this, "_ZN6S216C24v128Ev");}
void  S216C2 ::v129(){vfunc_called(this, "_ZN6S216C24v129Ev");}
void  S216C2 ::v130(){vfunc_called(this, "_ZN6S216C24v130Ev");}
void  S216C2 ::v131(){vfunc_called(this, "_ZN6S216C24v131Ev");}
void  S216C2 ::v132(){vfunc_called(this, "_ZN6S216C24v132Ev");}
void  S216C2 ::v133(){vfunc_called(this, "_ZN6S216C24v133Ev");}
void  S216C2 ::v134(){vfunc_called(this, "_ZN6S216C24v134Ev");}
S216C2 ::S216C2(){ note_ctor("S216C2", this);} // tgen

static void Test_S216C2()
{
  extern Class_Descriptor cd_S216C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,71)];
    init_test(&cd_S216C2, buf);
    S216C2 *dp, &lv = *(dp=new (buf) S216C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,280), "sizeof(S216C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C2)");
    check_base_class_offset(lv, (S216C6*)(S216C5*)(S216C4*)(S216C3*), 0, "S216C2");
    check_base_class_offset(lv, (S216C5*)(S216C4*)(S216C3*), 0, "S216C2");
    check_base_class_offset(lv, (S216C4*)(S216C3*), 0, "S216C2");
    check_base_class_offset(lv, (S216C3*), 0, "S216C2");
    check_field_offset(lv, s216c2f0, ABISELECT(336,244), "S216C2.s216c2f0");
    check_field_offset(lv, s216c2f1, ABISELECT(352,252), "S216C2.s216c2f1");
    set_bf_and_test(lv, s216c2f2, ABISELECT(368,264), 0, 1, 1, "S216C2");
    set_bf_and_test(lv, s216c2f3, ABISELECT(368,264), 1, 1, 1, "S216C2");
    check_field_offset(lv, s216c2f4, ABISELECT(376,268), "S216C2.s216c2f4");
    test_class_info(&lv, &cd_S216C2);
    dp->~S216C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C2(Test_S216C2, "S216C2", ABISELECT(392,280));

#else // __cplusplus

extern void _ZN6S216C2C1Ev();
extern void _ZN6S216C2D1Ev();
Name_Map name_map_S216C2[] = {
  NSPAIR(_ZN6S216C2C1Ev),
  NSPAIR(_ZN6S216C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
extern Class_Descriptor cd_S216C5;
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
extern Class_Descriptor cd_S216C4;
extern VTBL_ENTRY _ZTI6S216C4[];
extern  VTBL_ENTRY _ZTV6S216C4[];
extern Class_Descriptor cd_S216C3;
extern VTBL_ENTRY _ZTI6S216C3[];
extern  VTBL_ENTRY _ZTV6S216C3[];
static Base_Class bases_S216C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S216C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S216C2[];
extern void _ZN6S216C2D1Ev();
extern void _ZN6S216C2D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
extern void _ZN6S216C43v90Ev();
extern void _ZN6S216C43v91Ev();
extern void _ZN6S216C43v92Ev();
extern void _ZN6S216C43v93Ev();
extern void _ZN6S216C43v94Ev();
extern void _ZN6S216C43v95Ev();
extern void _ZN6S216C43v96Ev();
extern void _ZN6S216C43v97Ev();
extern void _ZN6S216C43v98Ev();
extern void _ZN6S216C43v99Ev();
extern void _ZN6S216C44v100Ev();
extern void _ZN6S216C44v101Ev();
extern void _ZN6S216C44v102Ev();
extern void _ZN6S216C44v103Ev();
extern void _ZN6S216C44v104Ev();
extern void _ZN6S216C44v105Ev();
extern void _ZN6S216C44v106Ev();
extern void _ZN6S216C44v107Ev();
extern void _ZN6S216C44v108Ev();
extern void _ZN6S216C44v109Ev();
extern void _ZN6S216C34v110Ev();
extern void _ZN6S216C34v111Ev();
extern void _ZN6S216C34v112Ev();
extern void _ZN6S216C34v113Ev();
extern void _ZN6S216C34v114Ev();
extern void _ZN6S216C34v115Ev();
extern void _ZN6S216C34v116Ev();
extern void _ZN6S216C34v117Ev();
extern void _ZN6S216C34v118Ev();
extern void _ZN6S216C34v119Ev();
extern void _ZN6S216C34v120Ev();
extern void _ZN6S216C34v121Ev();
extern void _ZN6S216C34v122Ev();
extern void _ZN6S216C34v123Ev();
extern void _ZN6S216C24v124Ev();
extern void _ZN6S216C24v125Ev();
extern void _ZN6S216C24v126Ev();
extern void _ZN6S216C24v127Ev();
extern void _ZN6S216C24v128Ev();
extern void _ZN6S216C24v129Ev();
extern void _ZN6S216C24v130Ev();
extern void _ZN6S216C24v131Ev();
extern void _ZN6S216C24v132Ev();
extern void _ZN6S216C24v133Ev();
extern void _ZN6S216C24v134Ev();
static  VTBL_ENTRY vtc_S216C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C2[0]),
  (VTBL_ENTRY)&_ZN6S216C2D1Ev,
  (VTBL_ENTRY)&_ZN6S216C2D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
  (VTBL_ENTRY)&_ZN6S216C43v90Ev,
  (VTBL_ENTRY)&_ZN6S216C43v91Ev,
  (VTBL_ENTRY)&_ZN6S216C43v92Ev,
  (VTBL_ENTRY)&_ZN6S216C43v93Ev,
  (VTBL_ENTRY)&_ZN6S216C43v94Ev,
  (VTBL_ENTRY)&_ZN6S216C43v95Ev,
  (VTBL_ENTRY)&_ZN6S216C43v96Ev,
  (VTBL_ENTRY)&_ZN6S216C43v97Ev,
  (VTBL_ENTRY)&_ZN6S216C43v98Ev,
  (VTBL_ENTRY)&_ZN6S216C43v99Ev,
  (VTBL_ENTRY)&_ZN6S216C44v100Ev,
  (VTBL_ENTRY)&_ZN6S216C44v101Ev,
  (VTBL_ENTRY)&_ZN6S216C44v102Ev,
  (VTBL_ENTRY)&_ZN6S216C44v103Ev,
  (VTBL_ENTRY)&_ZN6S216C44v104Ev,
  (VTBL_ENTRY)&_ZN6S216C44v105Ev,
  (VTBL_ENTRY)&_ZN6S216C44v106Ev,
  (VTBL_ENTRY)&_ZN6S216C44v107Ev,
  (VTBL_ENTRY)&_ZN6S216C44v108Ev,
  (VTBL_ENTRY)&_ZN6S216C44v109Ev,
  (VTBL_ENTRY)&_ZN6S216C34v110Ev,
  (VTBL_ENTRY)&_ZN6S216C34v111Ev,
  (VTBL_ENTRY)&_ZN6S216C34v112Ev,
  (VTBL_ENTRY)&_ZN6S216C34v113Ev,
  (VTBL_ENTRY)&_ZN6S216C34v114Ev,
  (VTBL_ENTRY)&_ZN6S216C34v115Ev,
  (VTBL_ENTRY)&_ZN6S216C34v116Ev,
  (VTBL_ENTRY)&_ZN6S216C34v117Ev,
  (VTBL_ENTRY)&_ZN6S216C34v118Ev,
  (VTBL_ENTRY)&_ZN6S216C34v119Ev,
  (VTBL_ENTRY)&_ZN6S216C34v120Ev,
  (VTBL_ENTRY)&_ZN6S216C34v121Ev,
  (VTBL_ENTRY)&_ZN6S216C34v122Ev,
  (VTBL_ENTRY)&_ZN6S216C34v123Ev,
  (VTBL_ENTRY)&_ZN6S216C24v124Ev,
  (VTBL_ENTRY)&_ZN6S216C24v125Ev,
  (VTBL_ENTRY)&_ZN6S216C24v126Ev,
  (VTBL_ENTRY)&_ZN6S216C24v127Ev,
  (VTBL_ENTRY)&_ZN6S216C24v128Ev,
  (VTBL_ENTRY)&_ZN6S216C24v129Ev,
  (VTBL_ENTRY)&_ZN6S216C24v130Ev,
  (VTBL_ENTRY)&_ZN6S216C24v131Ev,
  (VTBL_ENTRY)&_ZN6S216C24v132Ev,
  (VTBL_ENTRY)&_ZN6S216C24v133Ev,
  (VTBL_ENTRY)&_ZN6S216C24v134Ev,
};
extern VTBL_ENTRY _ZTI6S216C2[];
extern  VTBL_ENTRY _ZTV6S216C2[];
Class_Descriptor cd_S216C2 = {  "S216C2", // class name
  bases_S216C2, 4,
  &(vtc_S216C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,280), // object size
  NSPAIRA(_ZTI6S216C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C2),135, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S216C1  : S216C2 {
  void *s216c1f0;
  virtual  ~S216C1(); // _ZN6S216C1D1Ev
  virtual void  v1(); // _ZN6S216C12v1Ev
  virtual void  v2(); // _ZN6S216C12v2Ev
  virtual void  v3(); // _ZN6S216C12v3Ev
  S216C1(); // tgen
};
//SIG(1 S216C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 Fp[2] FC8 Fi:1 Fi:1 FC23{ m Fp FC7}} vd v1 v2 v3 Fp}


 S216C1 ::~S216C1(){ note_dtor("S216C1", this);}
void  S216C1 ::v1(){vfunc_called(this, "_ZN6S216C12v1Ev");}
void  S216C1 ::v2(){vfunc_called(this, "_ZN6S216C12v2Ev");}
void  S216C1 ::v3(){vfunc_called(this, "_ZN6S216C12v3Ev");}
S216C1 ::S216C1(){ note_ctor("S216C1", this);} // tgen

static void Test_S216C1()
{
  extern Class_Descriptor cd_S216C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,72)];
    init_test(&cd_S216C1, buf);
    S216C1 *dp, &lv = *(dp=new (buf) S216C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,284), "sizeof(S216C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S216C1)");
    check_base_class_offset(lv, (S216C6*)(S216C5*)(S216C4*)(S216C3*)(S216C2*), 0, "S216C1");
    check_base_class_offset(lv, (S216C5*)(S216C4*)(S216C3*)(S216C2*), 0, "S216C1");
    check_base_class_offset(lv, (S216C4*)(S216C3*)(S216C2*), 0, "S216C1");
    check_base_class_offset(lv, (S216C3*)(S216C2*), 0, "S216C1");
    check_base_class_offset(lv, (S216C2*), 0, "S216C1");
    check_field_offset(lv, s216c1f0, ABISELECT(392,280), "S216C1.s216c1f0");
    test_class_info(&lv, &cd_S216C1);
    dp->~S216C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS216C1(Test_S216C1, "S216C1", ABISELECT(400,284));

#else // __cplusplus

extern void _ZN6S216C1C1Ev();
extern void _ZN6S216C1D1Ev();
Name_Map name_map_S216C1[] = {
  NSPAIR(_ZN6S216C1C1Ev),
  NSPAIR(_ZN6S216C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S216C6;
extern VTBL_ENTRY _ZTI6S216C6[];
extern  VTBL_ENTRY _ZTV6S216C6[];
extern Class_Descriptor cd_S216C5;
extern VTBL_ENTRY _ZTI6S216C5[];
extern  VTBL_ENTRY _ZTV6S216C5[];
extern Class_Descriptor cd_S216C4;
extern VTBL_ENTRY _ZTI6S216C4[];
extern  VTBL_ENTRY _ZTV6S216C4[];
extern Class_Descriptor cd_S216C3;
extern VTBL_ENTRY _ZTI6S216C3[];
extern  VTBL_ENTRY _ZTV6S216C3[];
extern Class_Descriptor cd_S216C2;
extern VTBL_ENTRY _ZTI6S216C2[];
extern  VTBL_ENTRY _ZTV6S216C2[];
static Base_Class bases_S216C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S216C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S216C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S216C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S216C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S216C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S216C1[];
extern void _ZN6S216C1D1Ev();
extern void _ZN6S216C1D0Ev();
extern void _ZN6S216C62v4Ev();
extern void _ZN6S216C62v5Ev();
extern void _ZN6S216C62v6Ev();
extern void _ZN6S216C62v7Ev();
extern void _ZN6S216C62v8Ev();
extern void _ZN6S216C62v9Ev();
extern void _ZN6S216C63v10Ev();
extern void _ZN6S216C63v11Ev();
extern void _ZN6S216C63v12Ev();
extern void _ZN6S216C63v13Ev();
extern void _ZN6S216C63v14Ev();
extern void _ZN6S216C63v15Ev();
extern void _ZN6S216C63v16Ev();
extern void _ZN6S216C63v17Ev();
extern void _ZN6S216C63v18Ev();
extern void _ZN6S216C63v19Ev();
extern void _ZN6S216C63v20Ev();
extern void _ZN6S216C63v21Ev();
extern void _ZN6S216C63v22Ev();
extern void _ZN6S216C63v23Ev();
extern void _ZN6S216C63v24Ev();
extern void _ZN6S216C63v25Ev();
extern void _ZN6S216C63v26Ev();
extern void _ZN6S216C63v27Ev();
extern void _ZN6S216C63v28Ev();
extern void _ZN6S216C63v29Ev();
extern void _ZN6S216C63v30Ev();
extern void _ZN6S216C63v31Ev();
extern void _ZN6S216C63v32Ev();
extern void _ZN6S216C63v33Ev();
extern void _ZN6S216C63v34Ev();
extern void _ZN6S216C63v35Ev();
extern void _ZN6S216C63v36Ev();
extern void _ZN6S216C63v37Ev();
extern void _ZN6S216C63v38Ev();
extern void _ZN6S216C63v39Ev();
extern void _ZN6S216C63v40Ev();
extern void _ZN6S216C63v41Ev();
extern void _ZN6S216C63v42Ev();
extern void _ZN6S216C63v43Ev();
extern void _ZN6S216C63v44Ev();
extern void _ZN6S216C63v45Ev();
extern void _ZN6S216C63v46Ev();
extern void _ZN6S216C63v47Ev();
extern void _ZN6S216C63v48Ev();
extern void _ZN6S216C63v49Ev();
extern void _ZN6S216C63v50Ev();
extern void _ZN6S216C63v51Ev();
extern void _ZN6S216C63v52Ev();
extern void _ZN6S216C63v53Ev();
extern void _ZN6S216C63v54Ev();
extern void _ZN6S216C63v55Ev();
extern void _ZN6S216C63v56Ev();
extern void _ZN6S216C63v57Ev();
extern void _ZN6S216C63v58Ev();
extern void _ZN6S216C63v59Ev();
extern void _ZN6S216C63v60Ev();
extern void _ZN6S216C63v61Ev();
extern void _ZN6S216C63v62Ev();
extern void _ZN6S216C63v63Ev();
extern void _ZN6S216C63v64Ev();
extern void _ZN6S216C63v65Ev();
extern void _ZN6S216C63v66Ev();
extern void _ZN6S216C63v67Ev();
extern void _ZN6S216C53v68Ev();
extern void _ZN6S216C53v69Ev();
extern void _ZN6S216C53v70Ev();
extern void _ZN6S216C53v71Ev();
extern void _ZN6S216C53v72Ev();
extern void _ZN6S216C53v73Ev();
extern void _ZN6S216C53v74Ev();
extern void _ZN6S216C53v75Ev();
extern void _ZN6S216C53v76Ev();
extern void _ZN6S216C53v77Ev();
extern void _ZN6S216C53v78Ev();
extern void _ZN6S216C53v79Ev();
extern void _ZN6S216C53v80Ev();
extern void _ZN6S216C53v81Ev();
extern void _ZN6S216C53v82Ev();
extern void _ZN6S216C53v83Ev();
extern void _ZN6S216C53v84Ev();
extern void _ZN6S216C53v85Ev();
extern void _ZN6S216C53v86Ev();
extern void _ZN6S216C53v87Ev();
extern void _ZN6S216C53v88Ev();
extern void _ZN6S216C53v89Ev();
extern void _ZN6S216C43v90Ev();
extern void _ZN6S216C43v91Ev();
extern void _ZN6S216C43v92Ev();
extern void _ZN6S216C43v93Ev();
extern void _ZN6S216C43v94Ev();
extern void _ZN6S216C43v95Ev();
extern void _ZN6S216C43v96Ev();
extern void _ZN6S216C43v97Ev();
extern void _ZN6S216C43v98Ev();
extern void _ZN6S216C43v99Ev();
extern void _ZN6S216C44v100Ev();
extern void _ZN6S216C44v101Ev();
extern void _ZN6S216C44v102Ev();
extern void _ZN6S216C44v103Ev();
extern void _ZN6S216C44v104Ev();
extern void _ZN6S216C44v105Ev();
extern void _ZN6S216C44v106Ev();
extern void _ZN6S216C44v107Ev();
extern void _ZN6S216C44v108Ev();
extern void _ZN6S216C44v109Ev();
extern void _ZN6S216C34v110Ev();
extern void _ZN6S216C34v111Ev();
extern void _ZN6S216C34v112Ev();
extern void _ZN6S216C34v113Ev();
extern void _ZN6S216C34v114Ev();
extern void _ZN6S216C34v115Ev();
extern void _ZN6S216C34v116Ev();
extern void _ZN6S216C34v117Ev();
extern void _ZN6S216C34v118Ev();
extern void _ZN6S216C34v119Ev();
extern void _ZN6S216C34v120Ev();
extern void _ZN6S216C34v121Ev();
extern void _ZN6S216C34v122Ev();
extern void _ZN6S216C34v123Ev();
extern void _ZN6S216C24v124Ev();
extern void _ZN6S216C24v125Ev();
extern void _ZN6S216C24v126Ev();
extern void _ZN6S216C24v127Ev();
extern void _ZN6S216C24v128Ev();
extern void _ZN6S216C24v129Ev();
extern void _ZN6S216C24v130Ev();
extern void _ZN6S216C24v131Ev();
extern void _ZN6S216C24v132Ev();
extern void _ZN6S216C24v133Ev();
extern void _ZN6S216C24v134Ev();
extern void _ZN6S216C12v1Ev();
extern void _ZN6S216C12v2Ev();
extern void _ZN6S216C12v3Ev();
static  VTBL_ENTRY vtc_S216C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S216C1[0]),
  (VTBL_ENTRY)&_ZN6S216C1D1Ev,
  (VTBL_ENTRY)&_ZN6S216C1D0Ev,
  (VTBL_ENTRY)&_ZN6S216C62v4Ev,
  (VTBL_ENTRY)&_ZN6S216C62v5Ev,
  (VTBL_ENTRY)&_ZN6S216C62v6Ev,
  (VTBL_ENTRY)&_ZN6S216C62v7Ev,
  (VTBL_ENTRY)&_ZN6S216C62v8Ev,
  (VTBL_ENTRY)&_ZN6S216C62v9Ev,
  (VTBL_ENTRY)&_ZN6S216C63v10Ev,
  (VTBL_ENTRY)&_ZN6S216C63v11Ev,
  (VTBL_ENTRY)&_ZN6S216C63v12Ev,
  (VTBL_ENTRY)&_ZN6S216C63v13Ev,
  (VTBL_ENTRY)&_ZN6S216C63v14Ev,
  (VTBL_ENTRY)&_ZN6S216C63v15Ev,
  (VTBL_ENTRY)&_ZN6S216C63v16Ev,
  (VTBL_ENTRY)&_ZN6S216C63v17Ev,
  (VTBL_ENTRY)&_ZN6S216C63v18Ev,
  (VTBL_ENTRY)&_ZN6S216C63v19Ev,
  (VTBL_ENTRY)&_ZN6S216C63v20Ev,
  (VTBL_ENTRY)&_ZN6S216C63v21Ev,
  (VTBL_ENTRY)&_ZN6S216C63v22Ev,
  (VTBL_ENTRY)&_ZN6S216C63v23Ev,
  (VTBL_ENTRY)&_ZN6S216C63v24Ev,
  (VTBL_ENTRY)&_ZN6S216C63v25Ev,
  (VTBL_ENTRY)&_ZN6S216C63v26Ev,
  (VTBL_ENTRY)&_ZN6S216C63v27Ev,
  (VTBL_ENTRY)&_ZN6S216C63v28Ev,
  (VTBL_ENTRY)&_ZN6S216C63v29Ev,
  (VTBL_ENTRY)&_ZN6S216C63v30Ev,
  (VTBL_ENTRY)&_ZN6S216C63v31Ev,
  (VTBL_ENTRY)&_ZN6S216C63v32Ev,
  (VTBL_ENTRY)&_ZN6S216C63v33Ev,
  (VTBL_ENTRY)&_ZN6S216C63v34Ev,
  (VTBL_ENTRY)&_ZN6S216C63v35Ev,
  (VTBL_ENTRY)&_ZN6S216C63v36Ev,
  (VTBL_ENTRY)&_ZN6S216C63v37Ev,
  (VTBL_ENTRY)&_ZN6S216C63v38Ev,
  (VTBL_ENTRY)&_ZN6S216C63v39Ev,
  (VTBL_ENTRY)&_ZN6S216C63v40Ev,
  (VTBL_ENTRY)&_ZN6S216C63v41Ev,
  (VTBL_ENTRY)&_ZN6S216C63v42Ev,
  (VTBL_ENTRY)&_ZN6S216C63v43Ev,
  (VTBL_ENTRY)&_ZN6S216C63v44Ev,
  (VTBL_ENTRY)&_ZN6S216C63v45Ev,
  (VTBL_ENTRY)&_ZN6S216C63v46Ev,
  (VTBL_ENTRY)&_ZN6S216C63v47Ev,
  (VTBL_ENTRY)&_ZN6S216C63v48Ev,
  (VTBL_ENTRY)&_ZN6S216C63v49Ev,
  (VTBL_ENTRY)&_ZN6S216C63v50Ev,
  (VTBL_ENTRY)&_ZN6S216C63v51Ev,
  (VTBL_ENTRY)&_ZN6S216C63v52Ev,
  (VTBL_ENTRY)&_ZN6S216C63v53Ev,
  (VTBL_ENTRY)&_ZN6S216C63v54Ev,
  (VTBL_ENTRY)&_ZN6S216C63v55Ev,
  (VTBL_ENTRY)&_ZN6S216C63v56Ev,
  (VTBL_ENTRY)&_ZN6S216C63v57Ev,
  (VTBL_ENTRY)&_ZN6S216C63v58Ev,
  (VTBL_ENTRY)&_ZN6S216C63v59Ev,
  (VTBL_ENTRY)&_ZN6S216C63v60Ev,
  (VTBL_ENTRY)&_ZN6S216C63v61Ev,
  (VTBL_ENTRY)&_ZN6S216C63v62Ev,
  (VTBL_ENTRY)&_ZN6S216C63v63Ev,
  (VTBL_ENTRY)&_ZN6S216C63v64Ev,
  (VTBL_ENTRY)&_ZN6S216C63v65Ev,
  (VTBL_ENTRY)&_ZN6S216C63v66Ev,
  (VTBL_ENTRY)&_ZN6S216C63v67Ev,
  (VTBL_ENTRY)&_ZN6S216C53v68Ev,
  (VTBL_ENTRY)&_ZN6S216C53v69Ev,
  (VTBL_ENTRY)&_ZN6S216C53v70Ev,
  (VTBL_ENTRY)&_ZN6S216C53v71Ev,
  (VTBL_ENTRY)&_ZN6S216C53v72Ev,
  (VTBL_ENTRY)&_ZN6S216C53v73Ev,
  (VTBL_ENTRY)&_ZN6S216C53v74Ev,
  (VTBL_ENTRY)&_ZN6S216C53v75Ev,
  (VTBL_ENTRY)&_ZN6S216C53v76Ev,
  (VTBL_ENTRY)&_ZN6S216C53v77Ev,
  (VTBL_ENTRY)&_ZN6S216C53v78Ev,
  (VTBL_ENTRY)&_ZN6S216C53v79Ev,
  (VTBL_ENTRY)&_ZN6S216C53v80Ev,
  (VTBL_ENTRY)&_ZN6S216C53v81Ev,
  (VTBL_ENTRY)&_ZN6S216C53v82Ev,
  (VTBL_ENTRY)&_ZN6S216C53v83Ev,
  (VTBL_ENTRY)&_ZN6S216C53v84Ev,
  (VTBL_ENTRY)&_ZN6S216C53v85Ev,
  (VTBL_ENTRY)&_ZN6S216C53v86Ev,
  (VTBL_ENTRY)&_ZN6S216C53v87Ev,
  (VTBL_ENTRY)&_ZN6S216C53v88Ev,
  (VTBL_ENTRY)&_ZN6S216C53v89Ev,
  (VTBL_ENTRY)&_ZN6S216C43v90Ev,
  (VTBL_ENTRY)&_ZN6S216C43v91Ev,
  (VTBL_ENTRY)&_ZN6S216C43v92Ev,
  (VTBL_ENTRY)&_ZN6S216C43v93Ev,
  (VTBL_ENTRY)&_ZN6S216C43v94Ev,
  (VTBL_ENTRY)&_ZN6S216C43v95Ev,
  (VTBL_ENTRY)&_ZN6S216C43v96Ev,
  (VTBL_ENTRY)&_ZN6S216C43v97Ev,
  (VTBL_ENTRY)&_ZN6S216C43v98Ev,
  (VTBL_ENTRY)&_ZN6S216C43v99Ev,
  (VTBL_ENTRY)&_ZN6S216C44v100Ev,
  (VTBL_ENTRY)&_ZN6S216C44v101Ev,
  (VTBL_ENTRY)&_ZN6S216C44v102Ev,
  (VTBL_ENTRY)&_ZN6S216C44v103Ev,
  (VTBL_ENTRY)&_ZN6S216C44v104Ev,
  (VTBL_ENTRY)&_ZN6S216C44v105Ev,
  (VTBL_ENTRY)&_ZN6S216C44v106Ev,
  (VTBL_ENTRY)&_ZN6S216C44v107Ev,
  (VTBL_ENTRY)&_ZN6S216C44v108Ev,
  (VTBL_ENTRY)&_ZN6S216C44v109Ev,
  (VTBL_ENTRY)&_ZN6S216C34v110Ev,
  (VTBL_ENTRY)&_ZN6S216C34v111Ev,
  (VTBL_ENTRY)&_ZN6S216C34v112Ev,
  (VTBL_ENTRY)&_ZN6S216C34v113Ev,
  (VTBL_ENTRY)&_ZN6S216C34v114Ev,
  (VTBL_ENTRY)&_ZN6S216C34v115Ev,
  (VTBL_ENTRY)&_ZN6S216C34v116Ev,
  (VTBL_ENTRY)&_ZN6S216C34v117Ev,
  (VTBL_ENTRY)&_ZN6S216C34v118Ev,
  (VTBL_ENTRY)&_ZN6S216C34v119Ev,
  (VTBL_ENTRY)&_ZN6S216C34v120Ev,
  (VTBL_ENTRY)&_ZN6S216C34v121Ev,
  (VTBL_ENTRY)&_ZN6S216C34v122Ev,
  (VTBL_ENTRY)&_ZN6S216C34v123Ev,
  (VTBL_ENTRY)&_ZN6S216C24v124Ev,
  (VTBL_ENTRY)&_ZN6S216C24v125Ev,
  (VTBL_ENTRY)&_ZN6S216C24v126Ev,
  (VTBL_ENTRY)&_ZN6S216C24v127Ev,
  (VTBL_ENTRY)&_ZN6S216C24v128Ev,
  (VTBL_ENTRY)&_ZN6S216C24v129Ev,
  (VTBL_ENTRY)&_ZN6S216C24v130Ev,
  (VTBL_ENTRY)&_ZN6S216C24v131Ev,
  (VTBL_ENTRY)&_ZN6S216C24v132Ev,
  (VTBL_ENTRY)&_ZN6S216C24v133Ev,
  (VTBL_ENTRY)&_ZN6S216C24v134Ev,
  (VTBL_ENTRY)&_ZN6S216C12v1Ev,
  (VTBL_ENTRY)&_ZN6S216C12v2Ev,
  (VTBL_ENTRY)&_ZN6S216C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S216C1[];
extern  VTBL_ENTRY _ZTV6S216C1[];
Class_Descriptor cd_S216C1 = {  "S216C1", // class name
  bases_S216C1, 5,
  &(vtc_S216C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,284), // object size
  NSPAIRA(_ZTI6S216C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S216C1),138, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S215C6  {
  int s215c6f0;
  __tsi64 s215c6f1;
  void *s215c6f2[4];
  int s215c6f3[2];
  void *s215c6f4;
  ::S3350C4_nt s215c6f5;
  void *s215c6f6[2];
  virtual  ~S215C6(); // _ZN6S215C6D1Ev
  virtual void  v4(); // _ZN6S215C62v4Ev
  virtual void  v5(); // _ZN6S215C62v5Ev
  virtual void  v6(); // _ZN6S215C62v6Ev
  virtual void  v7(); // _ZN6S215C62v7Ev
  virtual void  v8(); // _ZN6S215C62v8Ev
  virtual void  v9(); // _ZN6S215C62v9Ev
  virtual void  v10(); // _ZN6S215C63v10Ev
  virtual void  v11(); // _ZN6S215C63v11Ev
  virtual void  v12(); // _ZN6S215C63v12Ev
  virtual void  v13(); // _ZN6S215C63v13Ev
  virtual void  v14(); // _ZN6S215C63v14Ev
  virtual void  v15(); // _ZN6S215C63v15Ev
  virtual void  v16(); // _ZN6S215C63v16Ev
  virtual void  v17(); // _ZN6S215C63v17Ev
  virtual void  v18(); // _ZN6S215C63v18Ev
  virtual void  v19(); // _ZN6S215C63v19Ev
  virtual void  v20(); // _ZN6S215C63v20Ev
  virtual void  v21(); // _ZN6S215C63v21Ev
  virtual void  v22(); // _ZN6S215C63v22Ev
  virtual void  v23(); // _ZN6S215C63v23Ev
  virtual void  v24(); // _ZN6S215C63v24Ev
  virtual void  v25(); // _ZN6S215C63v25Ev
  virtual void  v26(); // _ZN6S215C63v26Ev
  virtual void  v27(); // _ZN6S215C63v27Ev
  virtual void  v28(); // _ZN6S215C63v28Ev
  virtual void  v29(); // _ZN6S215C63v29Ev
  virtual void  v30(); // _ZN6S215C63v30Ev
  virtual void  v31(); // _ZN6S215C63v31Ev
  virtual void  v32(); // _ZN6S215C63v32Ev
  virtual void  v33(); // _ZN6S215C63v33Ev
  virtual void  v34(); // _ZN6S215C63v34Ev
  virtual void  v35(); // _ZN6S215C63v35Ev
  virtual void  v36(); // _ZN6S215C63v36Ev
  virtual void  v37(); // _ZN6S215C63v37Ev
  virtual void  v38(); // _ZN6S215C63v38Ev
  virtual void  v39(); // _ZN6S215C63v39Ev
  virtual void  v40(); // _ZN6S215C63v40Ev
  virtual void  v41(); // _ZN6S215C63v41Ev
  virtual void  v42(); // _ZN6S215C63v42Ev
  virtual void  v43(); // _ZN6S215C63v43Ev
  virtual void  v44(); // _ZN6S215C63v44Ev
  virtual void  v45(); // _ZN6S215C63v45Ev
  virtual void  v46(); // _ZN6S215C63v46Ev
  virtual void  v47(); // _ZN6S215C63v47Ev
  virtual void  v48(); // _ZN6S215C63v48Ev
  virtual void  v49(); // _ZN6S215C63v49Ev
  virtual void  v50(); // _ZN6S215C63v50Ev
  virtual void  v51(); // _ZN6S215C63v51Ev
  virtual void  v52(); // _ZN6S215C63v52Ev
  virtual void  v53(); // _ZN6S215C63v53Ev
  virtual void  v54(); // _ZN6S215C63v54Ev
  virtual void  v55(); // _ZN6S215C63v55Ev
  virtual void  v56(); // _ZN6S215C63v56Ev
  virtual void  v57(); // _ZN6S215C63v57Ev
  virtual void  v58(); // _ZN6S215C63v58Ev
  virtual void  v59(); // _ZN6S215C63v59Ev
  virtual void  v60(); // _ZN6S215C63v60Ev
  virtual void  v61(); // _ZN6S215C63v61Ev
  virtual void  v62(); // _ZN6S215C63v62Ev
  virtual void  v63(); // _ZN6S215C63v63Ev
  virtual void  v64(); // _ZN6S215C63v64Ev
  virtual void  v65(); // _ZN6S215C63v65Ev
  virtual void  v66(); // _ZN6S215C63v66Ev
  virtual void  v67(); // _ZN6S215C63v67Ev
  S215C6(); // tgen
};
//SIG(-1 S215C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S215C6 ::~S215C6(){ note_dtor("S215C6", this);}
void  S215C6 ::v4(){vfunc_called(this, "_ZN6S215C62v4Ev");}
void  S215C6 ::v5(){vfunc_called(this, "_ZN6S215C62v5Ev");}
void  S215C6 ::v6(){vfunc_called(this, "_ZN6S215C62v6Ev");}
void  S215C6 ::v7(){vfunc_called(this, "_ZN6S215C62v7Ev");}
void  S215C6 ::v8(){vfunc_called(this, "_ZN6S215C62v8Ev");}
void  S215C6 ::v9(){vfunc_called(this, "_ZN6S215C62v9Ev");}
void  S215C6 ::v10(){vfunc_called(this, "_ZN6S215C63v10Ev");}
void  S215C6 ::v11(){vfunc_called(this, "_ZN6S215C63v11Ev");}
void  S215C6 ::v12(){vfunc_called(this, "_ZN6S215C63v12Ev");}
void  S215C6 ::v13(){vfunc_called(this, "_ZN6S215C63v13Ev");}
void  S215C6 ::v14(){vfunc_called(this, "_ZN6S215C63v14Ev");}
void  S215C6 ::v15(){vfunc_called(this, "_ZN6S215C63v15Ev");}
void  S215C6 ::v16(){vfunc_called(this, "_ZN6S215C63v16Ev");}
void  S215C6 ::v17(){vfunc_called(this, "_ZN6S215C63v17Ev");}
void  S215C6 ::v18(){vfunc_called(this, "_ZN6S215C63v18Ev");}
void  S215C6 ::v19(){vfunc_called(this, "_ZN6S215C63v19Ev");}
void  S215C6 ::v20(){vfunc_called(this, "_ZN6S215C63v20Ev");}
void  S215C6 ::v21(){vfunc_called(this, "_ZN6S215C63v21Ev");}
void  S215C6 ::v22(){vfunc_called(this, "_ZN6S215C63v22Ev");}
void  S215C6 ::v23(){vfunc_called(this, "_ZN6S215C63v23Ev");}
void  S215C6 ::v24(){vfunc_called(this, "_ZN6S215C63v24Ev");}
void  S215C6 ::v25(){vfunc_called(this, "_ZN6S215C63v25Ev");}
void  S215C6 ::v26(){vfunc_called(this, "_ZN6S215C63v26Ev");}
void  S215C6 ::v27(){vfunc_called(this, "_ZN6S215C63v27Ev");}
void  S215C6 ::v28(){vfunc_called(this, "_ZN6S215C63v28Ev");}
void  S215C6 ::v29(){vfunc_called(this, "_ZN6S215C63v29Ev");}
void  S215C6 ::v30(){vfunc_called(this, "_ZN6S215C63v30Ev");}
void  S215C6 ::v31(){vfunc_called(this, "_ZN6S215C63v31Ev");}
void  S215C6 ::v32(){vfunc_called(this, "_ZN6S215C63v32Ev");}
void  S215C6 ::v33(){vfunc_called(this, "_ZN6S215C63v33Ev");}
void  S215C6 ::v34(){vfunc_called(this, "_ZN6S215C63v34Ev");}
void  S215C6 ::v35(){vfunc_called(this, "_ZN6S215C63v35Ev");}
void  S215C6 ::v36(){vfunc_called(this, "_ZN6S215C63v36Ev");}
void  S215C6 ::v37(){vfunc_called(this, "_ZN6S215C63v37Ev");}
void  S215C6 ::v38(){vfunc_called(this, "_ZN6S215C63v38Ev");}
void  S215C6 ::v39(){vfunc_called(this, "_ZN6S215C63v39Ev");}
void  S215C6 ::v40(){vfunc_called(this, "_ZN6S215C63v40Ev");}
void  S215C6 ::v41(){vfunc_called(this, "_ZN6S215C63v41Ev");}
void  S215C6 ::v42(){vfunc_called(this, "_ZN6S215C63v42Ev");}
void  S215C6 ::v43(){vfunc_called(this, "_ZN6S215C63v43Ev");}
void  S215C6 ::v44(){vfunc_called(this, "_ZN6S215C63v44Ev");}
void  S215C6 ::v45(){vfunc_called(this, "_ZN6S215C63v45Ev");}
void  S215C6 ::v46(){vfunc_called(this, "_ZN6S215C63v46Ev");}
void  S215C6 ::v47(){vfunc_called(this, "_ZN6S215C63v47Ev");}
void  S215C6 ::v48(){vfunc_called(this, "_ZN6S215C63v48Ev");}
void  S215C6 ::v49(){vfunc_called(this, "_ZN6S215C63v49Ev");}
void  S215C6 ::v50(){vfunc_called(this, "_ZN6S215C63v50Ev");}
void  S215C6 ::v51(){vfunc_called(this, "_ZN6S215C63v51Ev");}
void  S215C6 ::v52(){vfunc_called(this, "_ZN6S215C63v52Ev");}
void  S215C6 ::v53(){vfunc_called(this, "_ZN6S215C63v53Ev");}
void  S215C6 ::v54(){vfunc_called(this, "_ZN6S215C63v54Ev");}
void  S215C6 ::v55(){vfunc_called(this, "_ZN6S215C63v55Ev");}
void  S215C6 ::v56(){vfunc_called(this, "_ZN6S215C63v56Ev");}
void  S215C6 ::v57(){vfunc_called(this, "_ZN6S215C63v57Ev");}
void  S215C6 ::v58(){vfunc_called(this, "_ZN6S215C63v58Ev");}
void  S215C6 ::v59(){vfunc_called(this, "_ZN6S215C63v59Ev");}
void  S215C6 ::v60(){vfunc_called(this, "_ZN6S215C63v60Ev");}
void  S215C6 ::v61(){vfunc_called(this, "_ZN6S215C63v61Ev");}
void  S215C6 ::v62(){vfunc_called(this, "_ZN6S215C63v62Ev");}
void  S215C6 ::v63(){vfunc_called(this, "_ZN6S215C63v63Ev");}
void  S215C6 ::v64(){vfunc_called(this, "_ZN6S215C63v64Ev");}
void  S215C6 ::v65(){vfunc_called(this, "_ZN6S215C63v65Ev");}
void  S215C6 ::v66(){vfunc_called(this, "_ZN6S215C63v66Ev");}
void  S215C6 ::v67(){vfunc_called(this, "_ZN6S215C63v67Ev");}
S215C6 ::S215C6(){ note_ctor("S215C6", this);} // tgen

static void Test_S215C6()
{
  extern Class_Descriptor cd_S215C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S215C6, buf);
    S215C6 *dp, &lv = *(dp=new (buf) S215C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S215C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C6)");
    check_field_offset(lv, s215c6f0, ABISELECT(8,4), "S215C6.s215c6f0");
    check_field_offset(lv, s215c6f1, ABISELECT(16,8), "S215C6.s215c6f1");
    check_field_offset(lv, s215c6f2, ABISELECT(24,16), "S215C6.s215c6f2");
    check_field_offset(lv, s215c6f3, ABISELECT(56,32), "S215C6.s215c6f3");
    check_field_offset(lv, s215c6f4, ABISELECT(64,40), "S215C6.s215c6f4");
    check_field_offset(lv, s215c6f5, ABISELECT(72,44), "S215C6.s215c6f5");
    check_field_offset(lv, s215c6f6, ABISELECT(80,52), "S215C6.s215c6f6");
    test_class_info(&lv, &cd_S215C6);
    dp->~S215C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C6(Test_S215C6, "S215C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S215C6C1Ev();
extern void _ZN6S215C6D1Ev();
Name_Map name_map_S215C6[] = {
  NSPAIR(_ZN6S215C6C1Ev),
  NSPAIR(_ZN6S215C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S215C6[];
extern void _ZN6S215C6D1Ev();
extern void _ZN6S215C6D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
static  VTBL_ENTRY vtc_S215C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C6[0]),
  (VTBL_ENTRY)&_ZN6S215C6D1Ev,
  (VTBL_ENTRY)&_ZN6S215C6D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
Class_Descriptor cd_S215C6 = {  "S215C6", // class name
  0,0,//no base classes
  &(vtc_S215C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S215C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S215C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S215C5  : S215C6 {
  int s215c5f0[2];
  void *s215c5f1;
  int s215c5f2[2];
  ::S287C8_nt s215c5f3;
  ::S287C8_nt s215c5f4;
  ::S2121C38 s215c5f5;
  ::S287C8_nt s215c5f6;
  unsigned int s215c5f7:1;
  unsigned int s215c5f8:1;
  unsigned int s215c5f9:1;
  unsigned int s215c5f10:1;
  unsigned int s215c5f11:1;
  int s215c5f12[2];
  virtual  ~S215C5(); // _ZN6S215C5D1Ev
  virtual void  v68(); // _ZN6S215C53v68Ev
  virtual void  v69(); // _ZN6S215C53v69Ev
  virtual void  v70(); // _ZN6S215C53v70Ev
  virtual void  v71(); // _ZN6S215C53v71Ev
  virtual void  v72(); // _ZN6S215C53v72Ev
  virtual void  v73(); // _ZN6S215C53v73Ev
  virtual void  v74(); // _ZN6S215C53v74Ev
  virtual void  v75(); // _ZN6S215C53v75Ev
  virtual void  v76(); // _ZN6S215C53v76Ev
  virtual void  v77(); // _ZN6S215C53v77Ev
  virtual void  v78(); // _ZN6S215C53v78Ev
  virtual void  v79(); // _ZN6S215C53v79Ev
  virtual void  v80(); // _ZN6S215C53v80Ev
  virtual void  v81(); // _ZN6S215C53v81Ev
  virtual void  v82(); // _ZN6S215C53v82Ev
  virtual void  v83(); // _ZN6S215C53v83Ev
  virtual void  v84(); // _ZN6S215C53v84Ev
  virtual void  v85(); // _ZN6S215C53v85Ev
  virtual void  v86(); // _ZN6S215C53v86Ev
  virtual void  v87(); // _ZN6S215C53v87Ev
  virtual void  v88(); // _ZN6S215C53v88Ev
  virtual void  v89(); // _ZN6S215C53v89Ev
  S215C5(); // tgen
};
//SIG(-1 S215C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S215C5 ::~S215C5(){ note_dtor("S215C5", this);}
void  S215C5 ::v68(){vfunc_called(this, "_ZN6S215C53v68Ev");}
void  S215C5 ::v69(){vfunc_called(this, "_ZN6S215C53v69Ev");}
void  S215C5 ::v70(){vfunc_called(this, "_ZN6S215C53v70Ev");}
void  S215C5 ::v71(){vfunc_called(this, "_ZN6S215C53v71Ev");}
void  S215C5 ::v72(){vfunc_called(this, "_ZN6S215C53v72Ev");}
void  S215C5 ::v73(){vfunc_called(this, "_ZN6S215C53v73Ev");}
void  S215C5 ::v74(){vfunc_called(this, "_ZN6S215C53v74Ev");}
void  S215C5 ::v75(){vfunc_called(this, "_ZN6S215C53v75Ev");}
void  S215C5 ::v76(){vfunc_called(this, "_ZN6S215C53v76Ev");}
void  S215C5 ::v77(){vfunc_called(this, "_ZN6S215C53v77Ev");}
void  S215C5 ::v78(){vfunc_called(this, "_ZN6S215C53v78Ev");}
void  S215C5 ::v79(){vfunc_called(this, "_ZN6S215C53v79Ev");}
void  S215C5 ::v80(){vfunc_called(this, "_ZN6S215C53v80Ev");}
void  S215C5 ::v81(){vfunc_called(this, "_ZN6S215C53v81Ev");}
void  S215C5 ::v82(){vfunc_called(this, "_ZN6S215C53v82Ev");}
void  S215C5 ::v83(){vfunc_called(this, "_ZN6S215C53v83Ev");}
void  S215C5 ::v84(){vfunc_called(this, "_ZN6S215C53v84Ev");}
void  S215C5 ::v85(){vfunc_called(this, "_ZN6S215C53v85Ev");}
void  S215C5 ::v86(){vfunc_called(this, "_ZN6S215C53v86Ev");}
void  S215C5 ::v87(){vfunc_called(this, "_ZN6S215C53v87Ev");}
void  S215C5 ::v88(){vfunc_called(this, "_ZN6S215C53v88Ev");}
void  S215C5 ::v89(){vfunc_called(this, "_ZN6S215C53v89Ev");}
S215C5 ::S215C5(){ note_ctor("S215C5", this);} // tgen

static void Test_S215C5()
{
  extern Class_Descriptor cd_S215C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S215C5, buf);
    S215C5 *dp, &lv = *(dp=new (buf) S215C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S215C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C5)");
    check_base_class_offset(lv, (S215C6*), 0, "S215C5");
    check_field_offset(lv, s215c5f0, ABISELECT(96,60), "S215C5.s215c5f0");
    check_field_offset(lv, s215c5f1, ABISELECT(104,68), "S215C5.s215c5f1");
    check_field_offset(lv, s215c5f2, ABISELECT(112,72), "S215C5.s215c5f2");
    check_field_offset(lv, s215c5f3, ABISELECT(120,80), "S215C5.s215c5f3");
    check_field_offset(lv, s215c5f4, ABISELECT(136,92), "S215C5.s215c5f4");
    check_field_offset(lv, s215c5f5, ABISELECT(152,104), "S215C5.s215c5f5");
    check_field_offset(lv, s215c5f6, ABISELECT(160,108), "S215C5.s215c5f6");
    set_bf_and_test(lv, s215c5f7, ABISELECT(176,120), 0, 1, 1, "S215C5");
    set_bf_and_test(lv, s215c5f8, ABISELECT(176,120), 1, 1, 1, "S215C5");
    set_bf_and_test(lv, s215c5f9, ABISELECT(176,120), 2, 1, 1, "S215C5");
    set_bf_and_test(lv, s215c5f10, ABISELECT(176,120), 3, 1, 1, "S215C5");
    set_bf_and_test(lv, s215c5f11, ABISELECT(176,120), 4, 1, 1, "S215C5");
    check_field_offset(lv, s215c5f12, ABISELECT(180,124), "S215C5.s215c5f12");
    test_class_info(&lv, &cd_S215C5);
    dp->~S215C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C5(Test_S215C5, "S215C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S215C5C1Ev();
extern void _ZN6S215C5D1Ev();
Name_Map name_map_S215C5[] = {
  NSPAIR(_ZN6S215C5C1Ev),
  NSPAIR(_ZN6S215C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
static Base_Class bases_S215C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S215C5[];
extern void _ZN6S215C5D1Ev();
extern void _ZN6S215C5D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
static  VTBL_ENTRY vtc_S215C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C5[0]),
  (VTBL_ENTRY)&_ZN6S215C5D1Ev,
  (VTBL_ENTRY)&_ZN6S215C5D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
Class_Descriptor cd_S215C5 = {  "S215C5", // class name
  bases_S215C5, 1,
  &(vtc_S215C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S215C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S215C4  : S215C5 {
  unsigned int s215c4f0:1;
  unsigned int s215c4f1:1;
  unsigned int s215c4f2:1;
  ::S3350C17 s215c4f3;
  ::S3350C11 s215c4f4;
  ::S3350C5_nt s215c4f5;
  ::S287C27 s215c4f6;
  int s215c4f7[3];
  virtual  ~S215C4(); // _ZN6S215C4D1Ev
  virtual void  v90(); // _ZN6S215C43v90Ev
  virtual void  v91(); // _ZN6S215C43v91Ev
  virtual void  v92(); // _ZN6S215C43v92Ev
  virtual void  v93(); // _ZN6S215C43v93Ev
  virtual void  v94(); // _ZN6S215C43v94Ev
  virtual void  v95(); // _ZN6S215C43v95Ev
  virtual void  v96(); // _ZN6S215C43v96Ev
  virtual void  v97(); // _ZN6S215C43v97Ev
  virtual void  v98(); // _ZN6S215C43v98Ev
  virtual void  v99(); // _ZN6S215C43v99Ev
  virtual void  v100(); // _ZN6S215C44v100Ev
  virtual void  v101(); // _ZN6S215C44v101Ev
  virtual void  v102(); // _ZN6S215C44v102Ev
  virtual void  v103(); // _ZN6S215C44v103Ev
  virtual void  v104(); // _ZN6S215C44v104Ev
  virtual void  v105(); // _ZN6S215C44v105Ev
  virtual void  v106(); // _ZN6S215C44v106Ev
  virtual void  v107(); // _ZN6S215C44v107Ev
  virtual void  v108(); // _ZN6S215C44v108Ev
  virtual void  v109(); // _ZN6S215C44v109Ev
  S215C4(); // tgen
};
//SIG(-1 S215C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S215C4 ::~S215C4(){ note_dtor("S215C4", this);}
void  S215C4 ::v90(){vfunc_called(this, "_ZN6S215C43v90Ev");}
void  S215C4 ::v91(){vfunc_called(this, "_ZN6S215C43v91Ev");}
void  S215C4 ::v92(){vfunc_called(this, "_ZN6S215C43v92Ev");}
void  S215C4 ::v93(){vfunc_called(this, "_ZN6S215C43v93Ev");}
void  S215C4 ::v94(){vfunc_called(this, "_ZN6S215C43v94Ev");}
void  S215C4 ::v95(){vfunc_called(this, "_ZN6S215C43v95Ev");}
void  S215C4 ::v96(){vfunc_called(this, "_ZN6S215C43v96Ev");}
void  S215C4 ::v97(){vfunc_called(this, "_ZN6S215C43v97Ev");}
void  S215C4 ::v98(){vfunc_called(this, "_ZN6S215C43v98Ev");}
void  S215C4 ::v99(){vfunc_called(this, "_ZN6S215C43v99Ev");}
void  S215C4 ::v100(){vfunc_called(this, "_ZN6S215C44v100Ev");}
void  S215C4 ::v101(){vfunc_called(this, "_ZN6S215C44v101Ev");}
void  S215C4 ::v102(){vfunc_called(this, "_ZN6S215C44v102Ev");}
void  S215C4 ::v103(){vfunc_called(this, "_ZN6S215C44v103Ev");}
void  S215C4 ::v104(){vfunc_called(this, "_ZN6S215C44v104Ev");}
void  S215C4 ::v105(){vfunc_called(this, "_ZN6S215C44v105Ev");}
void  S215C4 ::v106(){vfunc_called(this, "_ZN6S215C44v106Ev");}
void  S215C4 ::v107(){vfunc_called(this, "_ZN6S215C44v107Ev");}
void  S215C4 ::v108(){vfunc_called(this, "_ZN6S215C44v108Ev");}
void  S215C4 ::v109(){vfunc_called(this, "_ZN6S215C44v109Ev");}
S215C4 ::S215C4(){ note_ctor("S215C4", this);} // tgen

static void Test_S215C4()
{
  extern Class_Descriptor cd_S215C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S215C4, buf);
    S215C4 *dp, &lv = *(dp=new (buf) S215C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S215C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C4)");
    check_base_class_offset(lv, (S215C6*)(S215C5*), 0, "S215C4");
    check_base_class_offset(lv, (S215C5*), 0, "S215C4");
    set_bf_and_test(lv, s215c4f0, ABISELECT(188,132), 0, 1, 1, "S215C4");
    set_bf_and_test(lv, s215c4f1, ABISELECT(188,132), 1, 1, 1, "S215C4");
    set_bf_and_test(lv, s215c4f2, ABISELECT(188,132), 2, 1, 1, "S215C4");
    check_field_offset(lv, s215c4f3, ABISELECT(192,136), "S215C4.s215c4f3");
    check_field_offset(lv, s215c4f4, ABISELECT(208,148), "S215C4.s215c4f4");
    check_field_offset(lv, s215c4f5, ABISELECT(224,160), "S215C4.s215c4f5");
    check_field_offset(lv, s215c4f6, ABISELECT(240,172), "S215C4.s215c4f6");
    check_field_offset(lv, s215c4f7, ABISELECT(256,184), "S215C4.s215c4f7");
    test_class_info(&lv, &cd_S215C4);
    dp->~S215C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C4(Test_S215C4, "S215C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S215C4C1Ev();
extern void _ZN6S215C4D1Ev();
Name_Map name_map_S215C4[] = {
  NSPAIR(_ZN6S215C4C1Ev),
  NSPAIR(_ZN6S215C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
extern Class_Descriptor cd_S215C5;
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
static Base_Class bases_S215C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S215C4[];
extern void _ZN6S215C4D1Ev();
extern void _ZN6S215C4D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
extern void _ZN6S215C43v90Ev();
extern void _ZN6S215C43v91Ev();
extern void _ZN6S215C43v92Ev();
extern void _ZN6S215C43v93Ev();
extern void _ZN6S215C43v94Ev();
extern void _ZN6S215C43v95Ev();
extern void _ZN6S215C43v96Ev();
extern void _ZN6S215C43v97Ev();
extern void _ZN6S215C43v98Ev();
extern void _ZN6S215C43v99Ev();
extern void _ZN6S215C44v100Ev();
extern void _ZN6S215C44v101Ev();
extern void _ZN6S215C44v102Ev();
extern void _ZN6S215C44v103Ev();
extern void _ZN6S215C44v104Ev();
extern void _ZN6S215C44v105Ev();
extern void _ZN6S215C44v106Ev();
extern void _ZN6S215C44v107Ev();
extern void _ZN6S215C44v108Ev();
extern void _ZN6S215C44v109Ev();
static  VTBL_ENTRY vtc_S215C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C4[0]),
  (VTBL_ENTRY)&_ZN6S215C4D1Ev,
  (VTBL_ENTRY)&_ZN6S215C4D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
  (VTBL_ENTRY)&_ZN6S215C43v90Ev,
  (VTBL_ENTRY)&_ZN6S215C43v91Ev,
  (VTBL_ENTRY)&_ZN6S215C43v92Ev,
  (VTBL_ENTRY)&_ZN6S215C43v93Ev,
  (VTBL_ENTRY)&_ZN6S215C43v94Ev,
  (VTBL_ENTRY)&_ZN6S215C43v95Ev,
  (VTBL_ENTRY)&_ZN6S215C43v96Ev,
  (VTBL_ENTRY)&_ZN6S215C43v97Ev,
  (VTBL_ENTRY)&_ZN6S215C43v98Ev,
  (VTBL_ENTRY)&_ZN6S215C43v99Ev,
  (VTBL_ENTRY)&_ZN6S215C44v100Ev,
  (VTBL_ENTRY)&_ZN6S215C44v101Ev,
  (VTBL_ENTRY)&_ZN6S215C44v102Ev,
  (VTBL_ENTRY)&_ZN6S215C44v103Ev,
  (VTBL_ENTRY)&_ZN6S215C44v104Ev,
  (VTBL_ENTRY)&_ZN6S215C44v105Ev,
  (VTBL_ENTRY)&_ZN6S215C44v106Ev,
  (VTBL_ENTRY)&_ZN6S215C44v107Ev,
  (VTBL_ENTRY)&_ZN6S215C44v108Ev,
  (VTBL_ENTRY)&_ZN6S215C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S215C4[];
extern  VTBL_ENTRY _ZTV6S215C4[];
Class_Descriptor cd_S215C4 = {  "S215C4", // class name
  bases_S215C4, 2,
  &(vtc_S215C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S215C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S215C3  : S215C4 {
  void *s215c3f0[2];
  int s215c3f1[4];
  unsigned int s215c3f2:1;
  unsigned int s215c3f3:1;
  unsigned int s215c3f4:1;
  char s215c3f5;
  int s215c3f6;
  unsigned int s215c3f7:1;
  ::S287C23 s215c3f8;
  virtual  ~S215C3(); // _ZN6S215C3D1Ev
  virtual void  v110(); // _ZN6S215C34v110Ev
  virtual void  v111(); // _ZN6S215C34v111Ev
  virtual void  v112(); // _ZN6S215C34v112Ev
  virtual void  v113(); // _ZN6S215C34v113Ev
  virtual void  v114(); // _ZN6S215C34v114Ev
  virtual void  v115(); // _ZN6S215C34v115Ev
  virtual void  v116(); // _ZN6S215C34v116Ev
  virtual void  v117(); // _ZN6S215C34v117Ev
  virtual void  v118(); // _ZN6S215C34v118Ev
  virtual void  v119(); // _ZN6S215C34v119Ev
  virtual void  v120(); // _ZN6S215C34v120Ev
  virtual void  v121(); // _ZN6S215C34v121Ev
  virtual void  v122(); // _ZN6S215C34v122Ev
  virtual void  v123(); // _ZN6S215C34v123Ev
  S215C3(); // tgen
};
//SIG(-1 S215C3) C1{ BC2{ BC3{ BC4{ vd v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC19{ BC20{ BC9}}}


 S215C3 ::~S215C3(){ note_dtor("S215C3", this);}
void  S215C3 ::v110(){vfunc_called(this, "_ZN6S215C34v110Ev");}
void  S215C3 ::v111(){vfunc_called(this, "_ZN6S215C34v111Ev");}
void  S215C3 ::v112(){vfunc_called(this, "_ZN6S215C34v112Ev");}
void  S215C3 ::v113(){vfunc_called(this, "_ZN6S215C34v113Ev");}
void  S215C3 ::v114(){vfunc_called(this, "_ZN6S215C34v114Ev");}
void  S215C3 ::v115(){vfunc_called(this, "_ZN6S215C34v115Ev");}
void  S215C3 ::v116(){vfunc_called(this, "_ZN6S215C34v116Ev");}
void  S215C3 ::v117(){vfunc_called(this, "_ZN6S215C34v117Ev");}
void  S215C3 ::v118(){vfunc_called(this, "_ZN6S215C34v118Ev");}
void  S215C3 ::v119(){vfunc_called(this, "_ZN6S215C34v119Ev");}
void  S215C3 ::v120(){vfunc_called(this, "_ZN6S215C34v120Ev");}
void  S215C3 ::v121(){vfunc_called(this, "_ZN6S215C34v121Ev");}
void  S215C3 ::v122(){vfunc_called(this, "_ZN6S215C34v122Ev");}
void  S215C3 ::v123(){vfunc_called(this, "_ZN6S215C34v123Ev");}
S215C3 ::S215C3(){ note_ctor("S215C3", this);} // tgen

static void Test_S215C3()
{
  extern Class_Descriptor cd_S215C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,62)];
    init_test(&cd_S215C3, buf);
    S215C3 *dp, &lv = *(dp=new (buf) S215C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,244), "sizeof(S215C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C3)");
    check_base_class_offset(lv, (S215C6*)(S215C5*)(S215C4*), 0, "S215C3");
    check_base_class_offset(lv, (S215C5*)(S215C4*), 0, "S215C3");
    check_base_class_offset(lv, (S215C4*), 0, "S215C3");
    check_field_offset(lv, s215c3f0, ABISELECT(272,196), "S215C3.s215c3f0");
    check_field_offset(lv, s215c3f1, ABISELECT(288,204), "S215C3.s215c3f1");
    set_bf_and_test(lv, s215c3f2, ABISELECT(304,220), 0, 1, 1, "S215C3");
    set_bf_and_test(lv, s215c3f3, ABISELECT(304,220), 1, 1, 1, "S215C3");
    set_bf_and_test(lv, s215c3f4, ABISELECT(304,220), 2, 1, 1, "S215C3");
    check_field_offset(lv, s215c3f5, ABISELECT(305,221), "S215C3.s215c3f5");
    check_field_offset(lv, s215c3f6, ABISELECT(308,224), "S215C3.s215c3f6");
    set_bf_and_test(lv, s215c3f7, ABISELECT(312,228), 0, 1, 1, "S215C3");
    check_field_offset(lv, s215c3f8, ABISELECT(320,232), "S215C3.s215c3f8");
    test_class_info(&lv, &cd_S215C3);
    dp->~S215C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C3(Test_S215C3, "S215C3", ABISELECT(336,244));

#else // __cplusplus

extern void _ZN6S215C3C1Ev();
extern void _ZN6S215C3D1Ev();
Name_Map name_map_S215C3[] = {
  NSPAIR(_ZN6S215C3C1Ev),
  NSPAIR(_ZN6S215C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
extern Class_Descriptor cd_S215C5;
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
extern Class_Descriptor cd_S215C4;
extern VTBL_ENTRY _ZTI6S215C4[];
extern  VTBL_ENTRY _ZTV6S215C4[];
static Base_Class bases_S215C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S215C3[];
extern void _ZN6S215C3D1Ev();
extern void _ZN6S215C3D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
extern void _ZN6S215C43v90Ev();
extern void _ZN6S215C43v91Ev();
extern void _ZN6S215C43v92Ev();
extern void _ZN6S215C43v93Ev();
extern void _ZN6S215C43v94Ev();
extern void _ZN6S215C43v95Ev();
extern void _ZN6S215C43v96Ev();
extern void _ZN6S215C43v97Ev();
extern void _ZN6S215C43v98Ev();
extern void _ZN6S215C43v99Ev();
extern void _ZN6S215C44v100Ev();
extern void _ZN6S215C44v101Ev();
extern void _ZN6S215C44v102Ev();
extern void _ZN6S215C44v103Ev();
extern void _ZN6S215C44v104Ev();
extern void _ZN6S215C44v105Ev();
extern void _ZN6S215C44v106Ev();
extern void _ZN6S215C44v107Ev();
extern void _ZN6S215C44v108Ev();
extern void _ZN6S215C44v109Ev();
extern void _ZN6S215C34v110Ev();
extern void _ZN6S215C34v111Ev();
extern void _ZN6S215C34v112Ev();
extern void _ZN6S215C34v113Ev();
extern void _ZN6S215C34v114Ev();
extern void _ZN6S215C34v115Ev();
extern void _ZN6S215C34v116Ev();
extern void _ZN6S215C34v117Ev();
extern void _ZN6S215C34v118Ev();
extern void _ZN6S215C34v119Ev();
extern void _ZN6S215C34v120Ev();
extern void _ZN6S215C34v121Ev();
extern void _ZN6S215C34v122Ev();
extern void _ZN6S215C34v123Ev();
static  VTBL_ENTRY vtc_S215C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C3[0]),
  (VTBL_ENTRY)&_ZN6S215C3D1Ev,
  (VTBL_ENTRY)&_ZN6S215C3D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
  (VTBL_ENTRY)&_ZN6S215C43v90Ev,
  (VTBL_ENTRY)&_ZN6S215C43v91Ev,
  (VTBL_ENTRY)&_ZN6S215C43v92Ev,
  (VTBL_ENTRY)&_ZN6S215C43v93Ev,
  (VTBL_ENTRY)&_ZN6S215C43v94Ev,
  (VTBL_ENTRY)&_ZN6S215C43v95Ev,
  (VTBL_ENTRY)&_ZN6S215C43v96Ev,
  (VTBL_ENTRY)&_ZN6S215C43v97Ev,
  (VTBL_ENTRY)&_ZN6S215C43v98Ev,
  (VTBL_ENTRY)&_ZN6S215C43v99Ev,
  (VTBL_ENTRY)&_ZN6S215C44v100Ev,
  (VTBL_ENTRY)&_ZN6S215C44v101Ev,
  (VTBL_ENTRY)&_ZN6S215C44v102Ev,
  (VTBL_ENTRY)&_ZN6S215C44v103Ev,
  (VTBL_ENTRY)&_ZN6S215C44v104Ev,
  (VTBL_ENTRY)&_ZN6S215C44v105Ev,
  (VTBL_ENTRY)&_ZN6S215C44v106Ev,
  (VTBL_ENTRY)&_ZN6S215C44v107Ev,
  (VTBL_ENTRY)&_ZN6S215C44v108Ev,
  (VTBL_ENTRY)&_ZN6S215C44v109Ev,
  (VTBL_ENTRY)&_ZN6S215C34v110Ev,
  (VTBL_ENTRY)&_ZN6S215C34v111Ev,
  (VTBL_ENTRY)&_ZN6S215C34v112Ev,
  (VTBL_ENTRY)&_ZN6S215C34v113Ev,
  (VTBL_ENTRY)&_ZN6S215C34v114Ev,
  (VTBL_ENTRY)&_ZN6S215C34v115Ev,
  (VTBL_ENTRY)&_ZN6S215C34v116Ev,
  (VTBL_ENTRY)&_ZN6S215C34v117Ev,
  (VTBL_ENTRY)&_ZN6S215C34v118Ev,
  (VTBL_ENTRY)&_ZN6S215C34v119Ev,
  (VTBL_ENTRY)&_ZN6S215C34v120Ev,
  (VTBL_ENTRY)&_ZN6S215C34v121Ev,
  (VTBL_ENTRY)&_ZN6S215C34v122Ev,
  (VTBL_ENTRY)&_ZN6S215C34v123Ev,
};
extern VTBL_ENTRY _ZTI6S215C3[];
extern  VTBL_ENTRY _ZTV6S215C3[];
Class_Descriptor cd_S215C3 = {  "S215C3", // class name
  bases_S215C3, 3,
  &(vtc_S215C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,244), // object size
  NSPAIRA(_ZTI6S215C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C3),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S215C2  : S215C3 {
  ::S287C19 s215c2f0;
  ::S287C19 s215c2f1;
  unsigned int s215c2f2:1;
  unsigned int s215c2f3:1;
  unsigned int s215c2f4:1;
  ::S287C9 s215c2f5;
  virtual  ~S215C2(); // _ZN6S215C2D1Ev
  virtual void  v124(); // _ZN6S215C24v124Ev
  virtual void  v125(); // _ZN6S215C24v125Ev
  virtual void  v126(); // _ZN6S215C24v126Ev
  virtual void  v127(); // _ZN6S215C24v127Ev
  virtual void  v128(); // _ZN6S215C24v128Ev
  S215C2(); // tgen
};
//SIG(-1 S215C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 FC22{ BC23{ BC10}} FC22 Fi:1 Fi:1 Fi:1 FC8}


 S215C2 ::~S215C2(){ note_dtor("S215C2", this);}
void  S215C2 ::v124(){vfunc_called(this, "_ZN6S215C24v124Ev");}
void  S215C2 ::v125(){vfunc_called(this, "_ZN6S215C24v125Ev");}
void  S215C2 ::v126(){vfunc_called(this, "_ZN6S215C24v126Ev");}
void  S215C2 ::v127(){vfunc_called(this, "_ZN6S215C24v127Ev");}
void  S215C2 ::v128(){vfunc_called(this, "_ZN6S215C24v128Ev");}
S215C2 ::S215C2(){ note_ctor("S215C2", this);} // tgen

static void Test_S215C2()
{
  extern Class_Descriptor cd_S215C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,72)];
    init_test(&cd_S215C2, buf);
    S215C2 *dp, &lv = *(dp=new (buf) S215C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,284), "sizeof(S215C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C2)");
    check_base_class_offset(lv, (S215C6*)(S215C5*)(S215C4*)(S215C3*), 0, "S215C2");
    check_base_class_offset(lv, (S215C5*)(S215C4*)(S215C3*), 0, "S215C2");
    check_base_class_offset(lv, (S215C4*)(S215C3*), 0, "S215C2");
    check_base_class_offset(lv, (S215C3*), 0, "S215C2");
    check_field_offset(lv, s215c2f0, ABISELECT(336,244), "S215C2.s215c2f0");
    check_field_offset(lv, s215c2f1, ABISELECT(352,256), "S215C2.s215c2f1");
    set_bf_and_test(lv, s215c2f2, ABISELECT(368,268), 0, 1, 1, "S215C2");
    set_bf_and_test(lv, s215c2f3, ABISELECT(368,268), 1, 1, 1, "S215C2");
    set_bf_and_test(lv, s215c2f4, ABISELECT(368,268), 2, 1, 1, "S215C2");
    check_field_offset(lv, s215c2f5, ABISELECT(376,272), "S215C2.s215c2f5");
    test_class_info(&lv, &cd_S215C2);
    dp->~S215C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C2(Test_S215C2, "S215C2", ABISELECT(392,284));

#else // __cplusplus

extern void _ZN6S215C2C1Ev();
extern void _ZN6S215C2D1Ev();
Name_Map name_map_S215C2[] = {
  NSPAIR(_ZN6S215C2C1Ev),
  NSPAIR(_ZN6S215C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
extern Class_Descriptor cd_S215C5;
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
extern Class_Descriptor cd_S215C4;
extern VTBL_ENTRY _ZTI6S215C4[];
extern  VTBL_ENTRY _ZTV6S215C4[];
extern Class_Descriptor cd_S215C3;
extern VTBL_ENTRY _ZTI6S215C3[];
extern  VTBL_ENTRY _ZTV6S215C3[];
static Base_Class bases_S215C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S215C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S215C2[];
extern void _ZN6S215C2D1Ev();
extern void _ZN6S215C2D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
extern void _ZN6S215C43v90Ev();
extern void _ZN6S215C43v91Ev();
extern void _ZN6S215C43v92Ev();
extern void _ZN6S215C43v93Ev();
extern void _ZN6S215C43v94Ev();
extern void _ZN6S215C43v95Ev();
extern void _ZN6S215C43v96Ev();
extern void _ZN6S215C43v97Ev();
extern void _ZN6S215C43v98Ev();
extern void _ZN6S215C43v99Ev();
extern void _ZN6S215C44v100Ev();
extern void _ZN6S215C44v101Ev();
extern void _ZN6S215C44v102Ev();
extern void _ZN6S215C44v103Ev();
extern void _ZN6S215C44v104Ev();
extern void _ZN6S215C44v105Ev();
extern void _ZN6S215C44v106Ev();
extern void _ZN6S215C44v107Ev();
extern void _ZN6S215C44v108Ev();
extern void _ZN6S215C44v109Ev();
extern void _ZN6S215C34v110Ev();
extern void _ZN6S215C34v111Ev();
extern void _ZN6S215C34v112Ev();
extern void _ZN6S215C34v113Ev();
extern void _ZN6S215C34v114Ev();
extern void _ZN6S215C34v115Ev();
extern void _ZN6S215C34v116Ev();
extern void _ZN6S215C34v117Ev();
extern void _ZN6S215C34v118Ev();
extern void _ZN6S215C34v119Ev();
extern void _ZN6S215C34v120Ev();
extern void _ZN6S215C34v121Ev();
extern void _ZN6S215C34v122Ev();
extern void _ZN6S215C34v123Ev();
extern void _ZN6S215C24v124Ev();
extern void _ZN6S215C24v125Ev();
extern void _ZN6S215C24v126Ev();
extern void _ZN6S215C24v127Ev();
extern void _ZN6S215C24v128Ev();
static  VTBL_ENTRY vtc_S215C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C2[0]),
  (VTBL_ENTRY)&_ZN6S215C2D1Ev,
  (VTBL_ENTRY)&_ZN6S215C2D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
  (VTBL_ENTRY)&_ZN6S215C43v90Ev,
  (VTBL_ENTRY)&_ZN6S215C43v91Ev,
  (VTBL_ENTRY)&_ZN6S215C43v92Ev,
  (VTBL_ENTRY)&_ZN6S215C43v93Ev,
  (VTBL_ENTRY)&_ZN6S215C43v94Ev,
  (VTBL_ENTRY)&_ZN6S215C43v95Ev,
  (VTBL_ENTRY)&_ZN6S215C43v96Ev,
  (VTBL_ENTRY)&_ZN6S215C43v97Ev,
  (VTBL_ENTRY)&_ZN6S215C43v98Ev,
  (VTBL_ENTRY)&_ZN6S215C43v99Ev,
  (VTBL_ENTRY)&_ZN6S215C44v100Ev,
  (VTBL_ENTRY)&_ZN6S215C44v101Ev,
  (VTBL_ENTRY)&_ZN6S215C44v102Ev,
  (VTBL_ENTRY)&_ZN6S215C44v103Ev,
  (VTBL_ENTRY)&_ZN6S215C44v104Ev,
  (VTBL_ENTRY)&_ZN6S215C44v105Ev,
  (VTBL_ENTRY)&_ZN6S215C44v106Ev,
  (VTBL_ENTRY)&_ZN6S215C44v107Ev,
  (VTBL_ENTRY)&_ZN6S215C44v108Ev,
  (VTBL_ENTRY)&_ZN6S215C44v109Ev,
  (VTBL_ENTRY)&_ZN6S215C34v110Ev,
  (VTBL_ENTRY)&_ZN6S215C34v111Ev,
  (VTBL_ENTRY)&_ZN6S215C34v112Ev,
  (VTBL_ENTRY)&_ZN6S215C34v113Ev,
  (VTBL_ENTRY)&_ZN6S215C34v114Ev,
  (VTBL_ENTRY)&_ZN6S215C34v115Ev,
  (VTBL_ENTRY)&_ZN6S215C34v116Ev,
  (VTBL_ENTRY)&_ZN6S215C34v117Ev,
  (VTBL_ENTRY)&_ZN6S215C34v118Ev,
  (VTBL_ENTRY)&_ZN6S215C34v119Ev,
  (VTBL_ENTRY)&_ZN6S215C34v120Ev,
  (VTBL_ENTRY)&_ZN6S215C34v121Ev,
  (VTBL_ENTRY)&_ZN6S215C34v122Ev,
  (VTBL_ENTRY)&_ZN6S215C34v123Ev,
  (VTBL_ENTRY)&_ZN6S215C24v124Ev,
  (VTBL_ENTRY)&_ZN6S215C24v125Ev,
  (VTBL_ENTRY)&_ZN6S215C24v126Ev,
  (VTBL_ENTRY)&_ZN6S215C24v127Ev,
  (VTBL_ENTRY)&_ZN6S215C24v128Ev,
};
extern VTBL_ENTRY _ZTI6S215C2[];
extern  VTBL_ENTRY _ZTV6S215C2[];
Class_Descriptor cd_S215C2 = {  "S215C2", // class name
  bases_S215C2, 4,
  &(vtc_S215C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,284), // object size
  NSPAIRA(_ZTI6S215C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C2),129, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S215C1  : S215C2 {
  unsigned int s215c1f0:1;
  virtual  ~S215C1(); // _ZN6S215C1D1Ev
  virtual void  v1(); // _ZN6S215C12v1Ev
  virtual void  v2(); // _ZN6S215C12v2Ev
  virtual void  v3(); // _ZN6S215C12v3Ev
  S215C1(); // tgen
};
//SIG(1 S215C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 Fp[2] Fi[4] Fi:1 Fi:1 Fi:1 Fc Fi Fi:1 FC21{ BC22{ BC11}}} vd v124 v125 v126 v127 v128 FC23{ BC24{ BC11}} FC23 Fi:1 Fi:1 Fi:1 FC9} vd v1 v2 v3 Fi:1}


 S215C1 ::~S215C1(){ note_dtor("S215C1", this);}
void  S215C1 ::v1(){vfunc_called(this, "_ZN6S215C12v1Ev");}
void  S215C1 ::v2(){vfunc_called(this, "_ZN6S215C12v2Ev");}
void  S215C1 ::v3(){vfunc_called(this, "_ZN6S215C12v3Ev");}
S215C1 ::S215C1(){ note_ctor("S215C1", this);} // tgen

static void Test_S215C1()
{
  extern Class_Descriptor cd_S215C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,73)];
    init_test(&cd_S215C1, buf);
    S215C1 *dp, &lv = *(dp=new (buf) S215C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S215C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S215C1)");
    check_base_class_offset(lv, (S215C6*)(S215C5*)(S215C4*)(S215C3*)(S215C2*), 0, "S215C1");
    check_base_class_offset(lv, (S215C5*)(S215C4*)(S215C3*)(S215C2*), 0, "S215C1");
    check_base_class_offset(lv, (S215C4*)(S215C3*)(S215C2*), 0, "S215C1");
    check_base_class_offset(lv, (S215C3*)(S215C2*), 0, "S215C1");
    check_base_class_offset(lv, (S215C2*), 0, "S215C1");
    set_bf_and_test(lv, s215c1f0, ABISELECT(392,284), 0, 1, 1, "S215C1");
    test_class_info(&lv, &cd_S215C1);
    dp->~S215C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS215C1(Test_S215C1, "S215C1", ABISELECT(400,288));

#else // __cplusplus

extern void _ZN6S215C1C1Ev();
extern void _ZN6S215C1D1Ev();
Name_Map name_map_S215C1[] = {
  NSPAIR(_ZN6S215C1C1Ev),
  NSPAIR(_ZN6S215C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S215C6;
extern VTBL_ENTRY _ZTI6S215C6[];
extern  VTBL_ENTRY _ZTV6S215C6[];
extern Class_Descriptor cd_S215C5;
extern VTBL_ENTRY _ZTI6S215C5[];
extern  VTBL_ENTRY _ZTV6S215C5[];
extern Class_Descriptor cd_S215C4;
extern VTBL_ENTRY _ZTI6S215C4[];
extern  VTBL_ENTRY _ZTV6S215C4[];
extern Class_Descriptor cd_S215C3;
extern VTBL_ENTRY _ZTI6S215C3[];
extern  VTBL_ENTRY _ZTV6S215C3[];
extern Class_Descriptor cd_S215C2;
extern VTBL_ENTRY _ZTI6S215C2[];
extern  VTBL_ENTRY _ZTV6S215C2[];
static Base_Class bases_S215C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S215C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S215C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S215C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S215C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S215C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S215C1[];
extern void _ZN6S215C1D1Ev();
extern void _ZN6S215C1D0Ev();
extern void _ZN6S215C62v4Ev();
extern void _ZN6S215C62v5Ev();
extern void _ZN6S215C62v6Ev();
extern void _ZN6S215C62v7Ev();
extern void _ZN6S215C62v8Ev();
extern void _ZN6S215C62v9Ev();
extern void _ZN6S215C63v10Ev();
extern void _ZN6S215C63v11Ev();
extern void _ZN6S215C63v12Ev();
extern void _ZN6S215C63v13Ev();
extern void _ZN6S215C63v14Ev();
extern void _ZN6S215C63v15Ev();
extern void _ZN6S215C63v16Ev();
extern void _ZN6S215C63v17Ev();
extern void _ZN6S215C63v18Ev();
extern void _ZN6S215C63v19Ev();
extern void _ZN6S215C63v20Ev();
extern void _ZN6S215C63v21Ev();
extern void _ZN6S215C63v22Ev();
extern void _ZN6S215C63v23Ev();
extern void _ZN6S215C63v24Ev();
extern void _ZN6S215C63v25Ev();
extern void _ZN6S215C63v26Ev();
extern void _ZN6S215C63v27Ev();
extern void _ZN6S215C63v28Ev();
extern void _ZN6S215C63v29Ev();
extern void _ZN6S215C63v30Ev();
extern void _ZN6S215C63v31Ev();
extern void _ZN6S215C63v32Ev();
extern void _ZN6S215C63v33Ev();
extern void _ZN6S215C63v34Ev();
extern void _ZN6S215C63v35Ev();
extern void _ZN6S215C63v36Ev();
extern void _ZN6S215C63v37Ev();
extern void _ZN6S215C63v38Ev();
extern void _ZN6S215C63v39Ev();
extern void _ZN6S215C63v40Ev();
extern void _ZN6S215C63v41Ev();
extern void _ZN6S215C63v42Ev();
extern void _ZN6S215C63v43Ev();
extern void _ZN6S215C63v44Ev();
extern void _ZN6S215C63v45Ev();
extern void _ZN6S215C63v46Ev();
extern void _ZN6S215C63v47Ev();
extern void _ZN6S215C63v48Ev();
extern void _ZN6S215C63v49Ev();
extern void _ZN6S215C63v50Ev();
extern void _ZN6S215C63v51Ev();
extern void _ZN6S215C63v52Ev();
extern void _ZN6S215C63v53Ev();
extern void _ZN6S215C63v54Ev();
extern void _ZN6S215C63v55Ev();
extern void _ZN6S215C63v56Ev();
extern void _ZN6S215C63v57Ev();
extern void _ZN6S215C63v58Ev();
extern void _ZN6S215C63v59Ev();
extern void _ZN6S215C63v60Ev();
extern void _ZN6S215C63v61Ev();
extern void _ZN6S215C63v62Ev();
extern void _ZN6S215C63v63Ev();
extern void _ZN6S215C63v64Ev();
extern void _ZN6S215C63v65Ev();
extern void _ZN6S215C63v66Ev();
extern void _ZN6S215C63v67Ev();
extern void _ZN6S215C53v68Ev();
extern void _ZN6S215C53v69Ev();
extern void _ZN6S215C53v70Ev();
extern void _ZN6S215C53v71Ev();
extern void _ZN6S215C53v72Ev();
extern void _ZN6S215C53v73Ev();
extern void _ZN6S215C53v74Ev();
extern void _ZN6S215C53v75Ev();
extern void _ZN6S215C53v76Ev();
extern void _ZN6S215C53v77Ev();
extern void _ZN6S215C53v78Ev();
extern void _ZN6S215C53v79Ev();
extern void _ZN6S215C53v80Ev();
extern void _ZN6S215C53v81Ev();
extern void _ZN6S215C53v82Ev();
extern void _ZN6S215C53v83Ev();
extern void _ZN6S215C53v84Ev();
extern void _ZN6S215C53v85Ev();
extern void _ZN6S215C53v86Ev();
extern void _ZN6S215C53v87Ev();
extern void _ZN6S215C53v88Ev();
extern void _ZN6S215C53v89Ev();
extern void _ZN6S215C43v90Ev();
extern void _ZN6S215C43v91Ev();
extern void _ZN6S215C43v92Ev();
extern void _ZN6S215C43v93Ev();
extern void _ZN6S215C43v94Ev();
extern void _ZN6S215C43v95Ev();
extern void _ZN6S215C43v96Ev();
extern void _ZN6S215C43v97Ev();
extern void _ZN6S215C43v98Ev();
extern void _ZN6S215C43v99Ev();
extern void _ZN6S215C44v100Ev();
extern void _ZN6S215C44v101Ev();
extern void _ZN6S215C44v102Ev();
extern void _ZN6S215C44v103Ev();
extern void _ZN6S215C44v104Ev();
extern void _ZN6S215C44v105Ev();
extern void _ZN6S215C44v106Ev();
extern void _ZN6S215C44v107Ev();
extern void _ZN6S215C44v108Ev();
extern void _ZN6S215C44v109Ev();
extern void _ZN6S215C34v110Ev();
extern void _ZN6S215C34v111Ev();
extern void _ZN6S215C34v112Ev();
extern void _ZN6S215C34v113Ev();
extern void _ZN6S215C34v114Ev();
extern void _ZN6S215C34v115Ev();
extern void _ZN6S215C34v116Ev();
extern void _ZN6S215C34v117Ev();
extern void _ZN6S215C34v118Ev();
extern void _ZN6S215C34v119Ev();
extern void _ZN6S215C34v120Ev();
extern void _ZN6S215C34v121Ev();
extern void _ZN6S215C34v122Ev();
extern void _ZN6S215C34v123Ev();
extern void _ZN6S215C24v124Ev();
extern void _ZN6S215C24v125Ev();
extern void _ZN6S215C24v126Ev();
extern void _ZN6S215C24v127Ev();
extern void _ZN6S215C24v128Ev();
extern void _ZN6S215C12v1Ev();
extern void _ZN6S215C12v2Ev();
extern void _ZN6S215C12v3Ev();
static  VTBL_ENTRY vtc_S215C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S215C1[0]),
  (VTBL_ENTRY)&_ZN6S215C1D1Ev,
  (VTBL_ENTRY)&_ZN6S215C1D0Ev,
  (VTBL_ENTRY)&_ZN6S215C62v4Ev,
  (VTBL_ENTRY)&_ZN6S215C62v5Ev,
  (VTBL_ENTRY)&_ZN6S215C62v6Ev,
  (VTBL_ENTRY)&_ZN6S215C62v7Ev,
  (VTBL_ENTRY)&_ZN6S215C62v8Ev,
  (VTBL_ENTRY)&_ZN6S215C62v9Ev,
  (VTBL_ENTRY)&_ZN6S215C63v10Ev,
  (VTBL_ENTRY)&_ZN6S215C63v11Ev,
  (VTBL_ENTRY)&_ZN6S215C63v12Ev,
  (VTBL_ENTRY)&_ZN6S215C63v13Ev,
  (VTBL_ENTRY)&_ZN6S215C63v14Ev,
  (VTBL_ENTRY)&_ZN6S215C63v15Ev,
  (VTBL_ENTRY)&_ZN6S215C63v16Ev,
  (VTBL_ENTRY)&_ZN6S215C63v17Ev,
  (VTBL_ENTRY)&_ZN6S215C63v18Ev,
  (VTBL_ENTRY)&_ZN6S215C63v19Ev,
  (VTBL_ENTRY)&_ZN6S215C63v20Ev,
  (VTBL_ENTRY)&_ZN6S215C63v21Ev,
  (VTBL_ENTRY)&_ZN6S215C63v22Ev,
  (VTBL_ENTRY)&_ZN6S215C63v23Ev,
  (VTBL_ENTRY)&_ZN6S215C63v24Ev,
  (VTBL_ENTRY)&_ZN6S215C63v25Ev,
  (VTBL_ENTRY)&_ZN6S215C63v26Ev,
  (VTBL_ENTRY)&_ZN6S215C63v27Ev,
  (VTBL_ENTRY)&_ZN6S215C63v28Ev,
  (VTBL_ENTRY)&_ZN6S215C63v29Ev,
  (VTBL_ENTRY)&_ZN6S215C63v30Ev,
  (VTBL_ENTRY)&_ZN6S215C63v31Ev,
  (VTBL_ENTRY)&_ZN6S215C63v32Ev,
  (VTBL_ENTRY)&_ZN6S215C63v33Ev,
  (VTBL_ENTRY)&_ZN6S215C63v34Ev,
  (VTBL_ENTRY)&_ZN6S215C63v35Ev,
  (VTBL_ENTRY)&_ZN6S215C63v36Ev,
  (VTBL_ENTRY)&_ZN6S215C63v37Ev,
  (VTBL_ENTRY)&_ZN6S215C63v38Ev,
  (VTBL_ENTRY)&_ZN6S215C63v39Ev,
  (VTBL_ENTRY)&_ZN6S215C63v40Ev,
  (VTBL_ENTRY)&_ZN6S215C63v41Ev,
  (VTBL_ENTRY)&_ZN6S215C63v42Ev,
  (VTBL_ENTRY)&_ZN6S215C63v43Ev,
  (VTBL_ENTRY)&_ZN6S215C63v44Ev,
  (VTBL_ENTRY)&_ZN6S215C63v45Ev,
  (VTBL_ENTRY)&_ZN6S215C63v46Ev,
  (VTBL_ENTRY)&_ZN6S215C63v47Ev,
  (VTBL_ENTRY)&_ZN6S215C63v48Ev,
  (VTBL_ENTRY)&_ZN6S215C63v49Ev,
  (VTBL_ENTRY)&_ZN6S215C63v50Ev,
  (VTBL_ENTRY)&_ZN6S215C63v51Ev,
  (VTBL_ENTRY)&_ZN6S215C63v52Ev,
  (VTBL_ENTRY)&_ZN6S215C63v53Ev,
  (VTBL_ENTRY)&_ZN6S215C63v54Ev,
  (VTBL_ENTRY)&_ZN6S215C63v55Ev,
  (VTBL_ENTRY)&_ZN6S215C63v56Ev,
  (VTBL_ENTRY)&_ZN6S215C63v57Ev,
  (VTBL_ENTRY)&_ZN6S215C63v58Ev,
  (VTBL_ENTRY)&_ZN6S215C63v59Ev,
  (VTBL_ENTRY)&_ZN6S215C63v60Ev,
  (VTBL_ENTRY)&_ZN6S215C63v61Ev,
  (VTBL_ENTRY)&_ZN6S215C63v62Ev,
  (VTBL_ENTRY)&_ZN6S215C63v63Ev,
  (VTBL_ENTRY)&_ZN6S215C63v64Ev,
  (VTBL_ENTRY)&_ZN6S215C63v65Ev,
  (VTBL_ENTRY)&_ZN6S215C63v66Ev,
  (VTBL_ENTRY)&_ZN6S215C63v67Ev,
  (VTBL_ENTRY)&_ZN6S215C53v68Ev,
  (VTBL_ENTRY)&_ZN6S215C53v69Ev,
  (VTBL_ENTRY)&_ZN6S215C53v70Ev,
  (VTBL_ENTRY)&_ZN6S215C53v71Ev,
  (VTBL_ENTRY)&_ZN6S215C53v72Ev,
  (VTBL_ENTRY)&_ZN6S215C53v73Ev,
  (VTBL_ENTRY)&_ZN6S215C53v74Ev,
  (VTBL_ENTRY)&_ZN6S215C53v75Ev,
  (VTBL_ENTRY)&_ZN6S215C53v76Ev,
  (VTBL_ENTRY)&_ZN6S215C53v77Ev,
  (VTBL_ENTRY)&_ZN6S215C53v78Ev,
  (VTBL_ENTRY)&_ZN6S215C53v79Ev,
  (VTBL_ENTRY)&_ZN6S215C53v80Ev,
  (VTBL_ENTRY)&_ZN6S215C53v81Ev,
  (VTBL_ENTRY)&_ZN6S215C53v82Ev,
  (VTBL_ENTRY)&_ZN6S215C53v83Ev,
  (VTBL_ENTRY)&_ZN6S215C53v84Ev,
  (VTBL_ENTRY)&_ZN6S215C53v85Ev,
  (VTBL_ENTRY)&_ZN6S215C53v86Ev,
  (VTBL_ENTRY)&_ZN6S215C53v87Ev,
  (VTBL_ENTRY)&_ZN6S215C53v88Ev,
  (VTBL_ENTRY)&_ZN6S215C53v89Ev,
  (VTBL_ENTRY)&_ZN6S215C43v90Ev,
  (VTBL_ENTRY)&_ZN6S215C43v91Ev,
  (VTBL_ENTRY)&_ZN6S215C43v92Ev,
  (VTBL_ENTRY)&_ZN6S215C43v93Ev,
  (VTBL_ENTRY)&_ZN6S215C43v94Ev,
  (VTBL_ENTRY)&_ZN6S215C43v95Ev,
  (VTBL_ENTRY)&_ZN6S215C43v96Ev,
  (VTBL_ENTRY)&_ZN6S215C43v97Ev,
  (VTBL_ENTRY)&_ZN6S215C43v98Ev,
  (VTBL_ENTRY)&_ZN6S215C43v99Ev,
  (VTBL_ENTRY)&_ZN6S215C44v100Ev,
  (VTBL_ENTRY)&_ZN6S215C44v101Ev,
  (VTBL_ENTRY)&_ZN6S215C44v102Ev,
  (VTBL_ENTRY)&_ZN6S215C44v103Ev,
  (VTBL_ENTRY)&_ZN6S215C44v104Ev,
  (VTBL_ENTRY)&_ZN6S215C44v105Ev,
  (VTBL_ENTRY)&_ZN6S215C44v106Ev,
  (VTBL_ENTRY)&_ZN6S215C44v107Ev,
  (VTBL_ENTRY)&_ZN6S215C44v108Ev,
  (VTBL_ENTRY)&_ZN6S215C44v109Ev,
  (VTBL_ENTRY)&_ZN6S215C34v110Ev,
  (VTBL_ENTRY)&_ZN6S215C34v111Ev,
  (VTBL_ENTRY)&_ZN6S215C34v112Ev,
  (VTBL_ENTRY)&_ZN6S215C34v113Ev,
  (VTBL_ENTRY)&_ZN6S215C34v114Ev,
  (VTBL_ENTRY)&_ZN6S215C34v115Ev,
  (VTBL_ENTRY)&_ZN6S215C34v116Ev,
  (VTBL_ENTRY)&_ZN6S215C34v117Ev,
  (VTBL_ENTRY)&_ZN6S215C34v118Ev,
  (VTBL_ENTRY)&_ZN6S215C34v119Ev,
  (VTBL_ENTRY)&_ZN6S215C34v120Ev,
  (VTBL_ENTRY)&_ZN6S215C34v121Ev,
  (VTBL_ENTRY)&_ZN6S215C34v122Ev,
  (VTBL_ENTRY)&_ZN6S215C34v123Ev,
  (VTBL_ENTRY)&_ZN6S215C24v124Ev,
  (VTBL_ENTRY)&_ZN6S215C24v125Ev,
  (VTBL_ENTRY)&_ZN6S215C24v126Ev,
  (VTBL_ENTRY)&_ZN6S215C24v127Ev,
  (VTBL_ENTRY)&_ZN6S215C24v128Ev,
  (VTBL_ENTRY)&_ZN6S215C12v1Ev,
  (VTBL_ENTRY)&_ZN6S215C12v2Ev,
  (VTBL_ENTRY)&_ZN6S215C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S215C1[];
extern  VTBL_ENTRY _ZTV6S215C1[];
Class_Descriptor cd_S215C1 = {  "S215C1", // class name
  bases_S215C1, 5,
  &(vtc_S215C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,288), // object size
  NSPAIRA(_ZTI6S215C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S215C1),132, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C8  {
  int s32c8f0;
  __tsi64 s32c8f1;
  void *s32c8f2[4];
  int s32c8f3[2];
  void *s32c8f4;
  ::S3350C4_nt s32c8f5;
  void *s32c8f6[2];
  virtual  ~S32C8(); // _ZN5S32C8D1Ev
  virtual void  v4(); // _ZN5S32C82v4Ev
  virtual void  v5(); // _ZN5S32C82v5Ev
  virtual void  v6(); // _ZN5S32C82v6Ev
  virtual void  v7(); // _ZN5S32C82v7Ev
  virtual void  v8(); // _ZN5S32C82v8Ev
  virtual void  v9(); // _ZN5S32C82v9Ev
  virtual void  v10(); // _ZN5S32C83v10Ev
  virtual void  v11(); // _ZN5S32C83v11Ev
  virtual void  v12(); // _ZN5S32C83v12Ev
  virtual void  v13(); // _ZN5S32C83v13Ev
  virtual void  v14(); // _ZN5S32C83v14Ev
  virtual void  v15(); // _ZN5S32C83v15Ev
  virtual void  v16(); // _ZN5S32C83v16Ev
  virtual void  v17(); // _ZN5S32C83v17Ev
  virtual void  v18(); // _ZN5S32C83v18Ev
  virtual void  v19(); // _ZN5S32C83v19Ev
  virtual void  v20(); // _ZN5S32C83v20Ev
  virtual void  v21(); // _ZN5S32C83v21Ev
  virtual void  v22(); // _ZN5S32C83v22Ev
  virtual void  v23(); // _ZN5S32C83v23Ev
  virtual void  v24(); // _ZN5S32C83v24Ev
  virtual void  v25(); // _ZN5S32C83v25Ev
  virtual void  v26(); // _ZN5S32C83v26Ev
  virtual void  v27(); // _ZN5S32C83v27Ev
  virtual void  v28(); // _ZN5S32C83v28Ev
  virtual void  v29(); // _ZN5S32C83v29Ev
  virtual void  v30(); // _ZN5S32C83v30Ev
  virtual void  v31(); // _ZN5S32C83v31Ev
  virtual void  v32(); // _ZN5S32C83v32Ev
  virtual void  v33(); // _ZN5S32C83v33Ev
  virtual void  v34(); // _ZN5S32C83v34Ev
  virtual void  v35(); // _ZN5S32C83v35Ev
  virtual void  v36(); // _ZN5S32C83v36Ev
  virtual void  v37(); // _ZN5S32C83v37Ev
  virtual void  v38(); // _ZN5S32C83v38Ev
  virtual void  v39(); // _ZN5S32C83v39Ev
  virtual void  v40(); // _ZN5S32C83v40Ev
  virtual void  v41(); // _ZN5S32C83v41Ev
  virtual void  v42(); // _ZN5S32C83v42Ev
  virtual void  v43(); // _ZN5S32C83v43Ev
  virtual void  v44(); // _ZN5S32C83v44Ev
  virtual void  v45(); // _ZN5S32C83v45Ev
  virtual void  v46(); // _ZN5S32C83v46Ev
  virtual void  v47(); // _ZN5S32C83v47Ev
  virtual void  v48(); // _ZN5S32C83v48Ev
  virtual void  v49(); // _ZN5S32C83v49Ev
  virtual void  v50(); // _ZN5S32C83v50Ev
  virtual void  v51(); // _ZN5S32C83v51Ev
  virtual void  v52(); // _ZN5S32C83v52Ev
  virtual void  v53(); // _ZN5S32C83v53Ev
  virtual void  v54(); // _ZN5S32C83v54Ev
  virtual void  v55(); // _ZN5S32C83v55Ev
  virtual void  v56(); // _ZN5S32C83v56Ev
  virtual void  v57(); // _ZN5S32C83v57Ev
  virtual void  v58(); // _ZN5S32C83v58Ev
  virtual void  v59(); // _ZN5S32C83v59Ev
  virtual void  v60(); // _ZN5S32C83v60Ev
  virtual void  v61(); // _ZN5S32C83v61Ev
  virtual void  v62(); // _ZN5S32C83v62Ev
  virtual void  v63(); // _ZN5S32C83v63Ev
  virtual void  v64(); // _ZN5S32C83v64Ev
  virtual void  v65(); // _ZN5S32C83v65Ev
  virtual void  v66(); // _ZN5S32C83v66Ev
  virtual void  v67(); // _ZN5S32C83v67Ev
  S32C8(); // tgen
};
//SIG(-1 S32C8) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S32C8 ::~S32C8(){ note_dtor("S32C8", this);}
void  S32C8 ::v4(){vfunc_called(this, "_ZN5S32C82v4Ev");}
void  S32C8 ::v5(){vfunc_called(this, "_ZN5S32C82v5Ev");}
void  S32C8 ::v6(){vfunc_called(this, "_ZN5S32C82v6Ev");}
void  S32C8 ::v7(){vfunc_called(this, "_ZN5S32C82v7Ev");}
void  S32C8 ::v8(){vfunc_called(this, "_ZN5S32C82v8Ev");}
void  S32C8 ::v9(){vfunc_called(this, "_ZN5S32C82v9Ev");}
void  S32C8 ::v10(){vfunc_called(this, "_ZN5S32C83v10Ev");}
void  S32C8 ::v11(){vfunc_called(this, "_ZN5S32C83v11Ev");}
void  S32C8 ::v12(){vfunc_called(this, "_ZN5S32C83v12Ev");}
void  S32C8 ::v13(){vfunc_called(this, "_ZN5S32C83v13Ev");}
void  S32C8 ::v14(){vfunc_called(this, "_ZN5S32C83v14Ev");}
void  S32C8 ::v15(){vfunc_called(this, "_ZN5S32C83v15Ev");}
void  S32C8 ::v16(){vfunc_called(this, "_ZN5S32C83v16Ev");}
void  S32C8 ::v17(){vfunc_called(this, "_ZN5S32C83v17Ev");}
void  S32C8 ::v18(){vfunc_called(this, "_ZN5S32C83v18Ev");}
void  S32C8 ::v19(){vfunc_called(this, "_ZN5S32C83v19Ev");}
void  S32C8 ::v20(){vfunc_called(this, "_ZN5S32C83v20Ev");}
void  S32C8 ::v21(){vfunc_called(this, "_ZN5S32C83v21Ev");}
void  S32C8 ::v22(){vfunc_called(this, "_ZN5S32C83v22Ev");}
void  S32C8 ::v23(){vfunc_called(this, "_ZN5S32C83v23Ev");}
void  S32C8 ::v24(){vfunc_called(this, "_ZN5S32C83v24Ev");}
void  S32C8 ::v25(){vfunc_called(this, "_ZN5S32C83v25Ev");}
void  S32C8 ::v26(){vfunc_called(this, "_ZN5S32C83v26Ev");}
void  S32C8 ::v27(){vfunc_called(this, "_ZN5S32C83v27Ev");}
void  S32C8 ::v28(){vfunc_called(this, "_ZN5S32C83v28Ev");}
void  S32C8 ::v29(){vfunc_called(this, "_ZN5S32C83v29Ev");}
void  S32C8 ::v30(){vfunc_called(this, "_ZN5S32C83v30Ev");}
void  S32C8 ::v31(){vfunc_called(this, "_ZN5S32C83v31Ev");}
void  S32C8 ::v32(){vfunc_called(this, "_ZN5S32C83v32Ev");}
void  S32C8 ::v33(){vfunc_called(this, "_ZN5S32C83v33Ev");}
void  S32C8 ::v34(){vfunc_called(this, "_ZN5S32C83v34Ev");}
void  S32C8 ::v35(){vfunc_called(this, "_ZN5S32C83v35Ev");}
void  S32C8 ::v36(){vfunc_called(this, "_ZN5S32C83v36Ev");}
void  S32C8 ::v37(){vfunc_called(this, "_ZN5S32C83v37Ev");}
void  S32C8 ::v38(){vfunc_called(this, "_ZN5S32C83v38Ev");}
void  S32C8 ::v39(){vfunc_called(this, "_ZN5S32C83v39Ev");}
void  S32C8 ::v40(){vfunc_called(this, "_ZN5S32C83v40Ev");}
void  S32C8 ::v41(){vfunc_called(this, "_ZN5S32C83v41Ev");}
void  S32C8 ::v42(){vfunc_called(this, "_ZN5S32C83v42Ev");}
void  S32C8 ::v43(){vfunc_called(this, "_ZN5S32C83v43Ev");}
void  S32C8 ::v44(){vfunc_called(this, "_ZN5S32C83v44Ev");}
void  S32C8 ::v45(){vfunc_called(this, "_ZN5S32C83v45Ev");}
void  S32C8 ::v46(){vfunc_called(this, "_ZN5S32C83v46Ev");}
void  S32C8 ::v47(){vfunc_called(this, "_ZN5S32C83v47Ev");}
void  S32C8 ::v48(){vfunc_called(this, "_ZN5S32C83v48Ev");}
void  S32C8 ::v49(){vfunc_called(this, "_ZN5S32C83v49Ev");}
void  S32C8 ::v50(){vfunc_called(this, "_ZN5S32C83v50Ev");}
void  S32C8 ::v51(){vfunc_called(this, "_ZN5S32C83v51Ev");}
void  S32C8 ::v52(){vfunc_called(this, "_ZN5S32C83v52Ev");}
void  S32C8 ::v53(){vfunc_called(this, "_ZN5S32C83v53Ev");}
void  S32C8 ::v54(){vfunc_called(this, "_ZN5S32C83v54Ev");}
void  S32C8 ::v55(){vfunc_called(this, "_ZN5S32C83v55Ev");}
void  S32C8 ::v56(){vfunc_called(this, "_ZN5S32C83v56Ev");}
void  S32C8 ::v57(){vfunc_called(this, "_ZN5S32C83v57Ev");}
void  S32C8 ::v58(){vfunc_called(this, "_ZN5S32C83v58Ev");}
void  S32C8 ::v59(){vfunc_called(this, "_ZN5S32C83v59Ev");}
void  S32C8 ::v60(){vfunc_called(this, "_ZN5S32C83v60Ev");}
void  S32C8 ::v61(){vfunc_called(this, "_ZN5S32C83v61Ev");}
void  S32C8 ::v62(){vfunc_called(this, "_ZN5S32C83v62Ev");}
void  S32C8 ::v63(){vfunc_called(this, "_ZN5S32C83v63Ev");}
void  S32C8 ::v64(){vfunc_called(this, "_ZN5S32C83v64Ev");}
void  S32C8 ::v65(){vfunc_called(this, "_ZN5S32C83v65Ev");}
void  S32C8 ::v66(){vfunc_called(this, "_ZN5S32C83v66Ev");}
void  S32C8 ::v67(){vfunc_called(this, "_ZN5S32C83v67Ev");}
S32C8 ::S32C8(){ note_ctor("S32C8", this);} // tgen

static void Test_S32C8()
{
  extern Class_Descriptor cd_S32C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S32C8, buf);
    S32C8 *dp, &lv = *(dp=new (buf) S32C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S32C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C8)");
    check_field_offset(lv, s32c8f0, ABISELECT(8,4), "S32C8.s32c8f0");
    check_field_offset(lv, s32c8f1, ABISELECT(16,8), "S32C8.s32c8f1");
    check_field_offset(lv, s32c8f2, ABISELECT(24,16), "S32C8.s32c8f2");
    check_field_offset(lv, s32c8f3, ABISELECT(56,32), "S32C8.s32c8f3");
    check_field_offset(lv, s32c8f4, ABISELECT(64,40), "S32C8.s32c8f4");
    check_field_offset(lv, s32c8f5, ABISELECT(72,44), "S32C8.s32c8f5");
    check_field_offset(lv, s32c8f6, ABISELECT(80,52), "S32C8.s32c8f6");
    test_class_info(&lv, &cd_S32C8);
    dp->~S32C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C8(Test_S32C8, "S32C8", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S32C8C1Ev();
extern void _ZN5S32C8D1Ev();
Name_Map name_map_S32C8[] = {
  NSPAIR(_ZN5S32C8C1Ev),
  NSPAIR(_ZN5S32C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S32C8[];
extern void _ZN5S32C8D1Ev();
extern void _ZN5S32C8D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
static  VTBL_ENTRY vtc_S32C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C8[0]),
  (VTBL_ENTRY)&_ZN5S32C8D1Ev,
  (VTBL_ENTRY)&_ZN5S32C8D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
};
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
Class_Descriptor cd_S32C8 = {  "S32C8", // class name
  0,0,//no base classes
  &(vtc_S32C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S32C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S32C8),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C7  : S32C8 {
  int s32c7f0[2];
  void *s32c7f1;
  int s32c7f2[2];
  ::S287C8_nt s32c7f3;
  ::S287C8_nt s32c7f4;
  ::S2121C38 s32c7f5;
  ::S287C8_nt s32c7f6;
  unsigned int s32c7f7:1;
  unsigned int s32c7f8:1;
  unsigned int s32c7f9:1;
  unsigned int s32c7f10:1;
  unsigned int s32c7f11:1;
  int s32c7f12[2];
  virtual  ~S32C7(); // _ZN5S32C7D1Ev
  virtual void  v68(); // _ZN5S32C73v68Ev
  virtual void  v69(); // _ZN5S32C73v69Ev
  virtual void  v70(); // _ZN5S32C73v70Ev
  virtual void  v71(); // _ZN5S32C73v71Ev
  virtual void  v72(); // _ZN5S32C73v72Ev
  virtual void  v73(); // _ZN5S32C73v73Ev
  virtual void  v74(); // _ZN5S32C73v74Ev
  virtual void  v75(); // _ZN5S32C73v75Ev
  virtual void  v76(); // _ZN5S32C73v76Ev
  virtual void  v77(); // _ZN5S32C73v77Ev
  virtual void  v78(); // _ZN5S32C73v78Ev
  virtual void  v79(); // _ZN5S32C73v79Ev
  virtual void  v80(); // _ZN5S32C73v80Ev
  virtual void  v81(); // _ZN5S32C73v81Ev
  virtual void  v82(); // _ZN5S32C73v82Ev
  virtual void  v83(); // _ZN5S32C73v83Ev
  virtual void  v84(); // _ZN5S32C73v84Ev
  virtual void  v85(); // _ZN5S32C73v85Ev
  virtual void  v86(); // _ZN5S32C73v86Ev
  virtual void  v87(); // _ZN5S32C73v87Ev
  virtual void  v88(); // _ZN5S32C73v88Ev
  virtual void  v89(); // _ZN5S32C73v89Ev
  S32C7(); // tgen
};
//SIG(-1 S32C7) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S32C7 ::~S32C7(){ note_dtor("S32C7", this);}
void  S32C7 ::v68(){vfunc_called(this, "_ZN5S32C73v68Ev");}
void  S32C7 ::v69(){vfunc_called(this, "_ZN5S32C73v69Ev");}
void  S32C7 ::v70(){vfunc_called(this, "_ZN5S32C73v70Ev");}
void  S32C7 ::v71(){vfunc_called(this, "_ZN5S32C73v71Ev");}
void  S32C7 ::v72(){vfunc_called(this, "_ZN5S32C73v72Ev");}
void  S32C7 ::v73(){vfunc_called(this, "_ZN5S32C73v73Ev");}
void  S32C7 ::v74(){vfunc_called(this, "_ZN5S32C73v74Ev");}
void  S32C7 ::v75(){vfunc_called(this, "_ZN5S32C73v75Ev");}
void  S32C7 ::v76(){vfunc_called(this, "_ZN5S32C73v76Ev");}
void  S32C7 ::v77(){vfunc_called(this, "_ZN5S32C73v77Ev");}
void  S32C7 ::v78(){vfunc_called(this, "_ZN5S32C73v78Ev");}
void  S32C7 ::v79(){vfunc_called(this, "_ZN5S32C73v79Ev");}
void  S32C7 ::v80(){vfunc_called(this, "_ZN5S32C73v80Ev");}
void  S32C7 ::v81(){vfunc_called(this, "_ZN5S32C73v81Ev");}
void  S32C7 ::v82(){vfunc_called(this, "_ZN5S32C73v82Ev");}
void  S32C7 ::v83(){vfunc_called(this, "_ZN5S32C73v83Ev");}
void  S32C7 ::v84(){vfunc_called(this, "_ZN5S32C73v84Ev");}
void  S32C7 ::v85(){vfunc_called(this, "_ZN5S32C73v85Ev");}
void  S32C7 ::v86(){vfunc_called(this, "_ZN5S32C73v86Ev");}
void  S32C7 ::v87(){vfunc_called(this, "_ZN5S32C73v87Ev");}
void  S32C7 ::v88(){vfunc_called(this, "_ZN5S32C73v88Ev");}
void  S32C7 ::v89(){vfunc_called(this, "_ZN5S32C73v89Ev");}
S32C7 ::S32C7(){ note_ctor("S32C7", this);} // tgen

static void Test_S32C7()
{
  extern Class_Descriptor cd_S32C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S32C7, buf);
    S32C7 *dp, &lv = *(dp=new (buf) S32C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S32C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C7)");
    check_base_class_offset(lv, (S32C8*), 0, "S32C7");
    check_field_offset(lv, s32c7f0, ABISELECT(96,60), "S32C7.s32c7f0");
    check_field_offset(lv, s32c7f1, ABISELECT(104,68), "S32C7.s32c7f1");
    check_field_offset(lv, s32c7f2, ABISELECT(112,72), "S32C7.s32c7f2");
    check_field_offset(lv, s32c7f3, ABISELECT(120,80), "S32C7.s32c7f3");
    check_field_offset(lv, s32c7f4, ABISELECT(136,92), "S32C7.s32c7f4");
    check_field_offset(lv, s32c7f5, ABISELECT(152,104), "S32C7.s32c7f5");
    check_field_offset(lv, s32c7f6, ABISELECT(160,108), "S32C7.s32c7f6");
    set_bf_and_test(lv, s32c7f7, ABISELECT(176,120), 0, 1, 1, "S32C7");
    set_bf_and_test(lv, s32c7f8, ABISELECT(176,120), 1, 1, 1, "S32C7");
    set_bf_and_test(lv, s32c7f9, ABISELECT(176,120), 2, 1, 1, "S32C7");
    set_bf_and_test(lv, s32c7f10, ABISELECT(176,120), 3, 1, 1, "S32C7");
    set_bf_and_test(lv, s32c7f11, ABISELECT(176,120), 4, 1, 1, "S32C7");
    check_field_offset(lv, s32c7f12, ABISELECT(180,124), "S32C7.s32c7f12");
    test_class_info(&lv, &cd_S32C7);
    dp->~S32C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C7(Test_S32C7, "S32C7", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S32C7C1Ev();
extern void _ZN5S32C7D1Ev();
Name_Map name_map_S32C7[] = {
  NSPAIR(_ZN5S32C7C1Ev),
  NSPAIR(_ZN5S32C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
static Base_Class bases_S32C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S32C7[];
extern void _ZN5S32C7D1Ev();
extern void _ZN5S32C7D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
static  VTBL_ENTRY vtc_S32C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C7[0]),
  (VTBL_ENTRY)&_ZN5S32C7D1Ev,
  (VTBL_ENTRY)&_ZN5S32C7D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
};
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
Class_Descriptor cd_S32C7 = {  "S32C7", // class name
  bases_S32C7, 1,
  &(vtc_S32C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S32C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C7),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C6  : S32C7 {
  unsigned int s32c6f0:1;
  unsigned int s32c6f1:1;
  unsigned int s32c6f2:1;
  ::S3350C17 s32c6f3;
  ::S3350C11 s32c6f4;
  ::S3350C5_nt s32c6f5;
  ::S287C27 s32c6f6;
  int s32c6f7[3];
  virtual  ~S32C6(); // _ZN5S32C6D1Ev
  virtual void  v90(); // _ZN5S32C63v90Ev
  virtual void  v91(); // _ZN5S32C63v91Ev
  virtual void  v92(); // _ZN5S32C63v92Ev
  virtual void  v93(); // _ZN5S32C63v93Ev
  virtual void  v94(); // _ZN5S32C63v94Ev
  virtual void  v95(); // _ZN5S32C63v95Ev
  virtual void  v96(); // _ZN5S32C63v96Ev
  virtual void  v97(); // _ZN5S32C63v97Ev
  virtual void  v98(); // _ZN5S32C63v98Ev
  virtual void  v99(); // _ZN5S32C63v99Ev
  virtual void  v100(); // _ZN5S32C64v100Ev
  virtual void  v101(); // _ZN5S32C64v101Ev
  virtual void  v102(); // _ZN5S32C64v102Ev
  virtual void  v103(); // _ZN5S32C64v103Ev
  virtual void  v104(); // _ZN5S32C64v104Ev
  virtual void  v105(); // _ZN5S32C64v105Ev
  virtual void  v106(); // _ZN5S32C64v106Ev
  virtual void  v107(); // _ZN5S32C64v107Ev
  virtual void  v108(); // _ZN5S32C64v108Ev
  virtual void  v109(); // _ZN5S32C64v109Ev
  S32C6(); // tgen
};
//SIG(-1 S32C6) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S32C6 ::~S32C6(){ note_dtor("S32C6", this);}
void  S32C6 ::v90(){vfunc_called(this, "_ZN5S32C63v90Ev");}
void  S32C6 ::v91(){vfunc_called(this, "_ZN5S32C63v91Ev");}
void  S32C6 ::v92(){vfunc_called(this, "_ZN5S32C63v92Ev");}
void  S32C6 ::v93(){vfunc_called(this, "_ZN5S32C63v93Ev");}
void  S32C6 ::v94(){vfunc_called(this, "_ZN5S32C63v94Ev");}
void  S32C6 ::v95(){vfunc_called(this, "_ZN5S32C63v95Ev");}
void  S32C6 ::v96(){vfunc_called(this, "_ZN5S32C63v96Ev");}
void  S32C6 ::v97(){vfunc_called(this, "_ZN5S32C63v97Ev");}
void  S32C6 ::v98(){vfunc_called(this, "_ZN5S32C63v98Ev");}
void  S32C6 ::v99(){vfunc_called(this, "_ZN5S32C63v99Ev");}
void  S32C6 ::v100(){vfunc_called(this, "_ZN5S32C64v100Ev");}
void  S32C6 ::v101(){vfunc_called(this, "_ZN5S32C64v101Ev");}
void  S32C6 ::v102(){vfunc_called(this, "_ZN5S32C64v102Ev");}
void  S32C6 ::v103(){vfunc_called(this, "_ZN5S32C64v103Ev");}
void  S32C6 ::v104(){vfunc_called(this, "_ZN5S32C64v104Ev");}
void  S32C6 ::v105(){vfunc_called(this, "_ZN5S32C64v105Ev");}
void  S32C6 ::v106(){vfunc_called(this, "_ZN5S32C64v106Ev");}
void  S32C6 ::v107(){vfunc_called(this, "_ZN5S32C64v107Ev");}
void  S32C6 ::v108(){vfunc_called(this, "_ZN5S32C64v108Ev");}
void  S32C6 ::v109(){vfunc_called(this, "_ZN5S32C64v109Ev");}
S32C6 ::S32C6(){ note_ctor("S32C6", this);} // tgen

static void Test_S32C6()
{
  extern Class_Descriptor cd_S32C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S32C6, buf);
    S32C6 *dp, &lv = *(dp=new (buf) S32C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S32C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C6)");
    check_base_class_offset(lv, (S32C8*)(S32C7*), 0, "S32C6");
    check_base_class_offset(lv, (S32C7*), 0, "S32C6");
    set_bf_and_test(lv, s32c6f0, ABISELECT(188,132), 0, 1, 1, "S32C6");
    set_bf_and_test(lv, s32c6f1, ABISELECT(188,132), 1, 1, 1, "S32C6");
    set_bf_and_test(lv, s32c6f2, ABISELECT(188,132), 2, 1, 1, "S32C6");
    check_field_offset(lv, s32c6f3, ABISELECT(192,136), "S32C6.s32c6f3");
    check_field_offset(lv, s32c6f4, ABISELECT(208,148), "S32C6.s32c6f4");
    check_field_offset(lv, s32c6f5, ABISELECT(224,160), "S32C6.s32c6f5");
    check_field_offset(lv, s32c6f6, ABISELECT(240,172), "S32C6.s32c6f6");
    check_field_offset(lv, s32c6f7, ABISELECT(256,184), "S32C6.s32c6f7");
    test_class_info(&lv, &cd_S32C6);
    dp->~S32C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C6(Test_S32C6, "S32C6", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S32C6C1Ev();
extern void _ZN5S32C6D1Ev();
Name_Map name_map_S32C6[] = {
  NSPAIR(_ZN5S32C6C1Ev),
  NSPAIR(_ZN5S32C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
static Base_Class bases_S32C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S32C6[];
extern void _ZN5S32C6D1Ev();
extern void _ZN5S32C6D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
static  VTBL_ENTRY vtc_S32C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C6[0]),
  (VTBL_ENTRY)&_ZN5S32C6D1Ev,
  (VTBL_ENTRY)&_ZN5S32C6D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
};
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
Class_Descriptor cd_S32C6 = {  "S32C6", // class name
  bases_S32C6, 2,
  &(vtc_S32C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S32C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C6),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C5  : S32C6 {
  ::S3350C4_nt s32c5f0;
  unsigned int s32c5f1:1;
  ::S287C23 s32c5f2;
  virtual  ~S32C5(); // _ZN5S32C5D1Ev
  virtual void  v110(); // _ZN5S32C54v110Ev
  virtual void  v111(); // _ZN5S32C54v111Ev
  virtual void  v112(); // _ZN5S32C54v112Ev
  virtual void  v113(); // _ZN5S32C54v113Ev
  S32C5(); // tgen
};
//SIG(-1 S32C5) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S32C5 ::~S32C5(){ note_dtor("S32C5", this);}
void  S32C5 ::v110(){vfunc_called(this, "_ZN5S32C54v110Ev");}
void  S32C5 ::v111(){vfunc_called(this, "_ZN5S32C54v111Ev");}
void  S32C5 ::v112(){vfunc_called(this, "_ZN5S32C54v112Ev");}
void  S32C5 ::v113(){vfunc_called(this, "_ZN5S32C54v113Ev");}
S32C5 ::S32C5(){ note_ctor("S32C5", this);} // tgen

static void Test_S32C5()
{
  extern Class_Descriptor cd_S32C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S32C5, buf);
    S32C5 *dp, &lv = *(dp=new (buf) S32C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S32C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C5)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*), 0, "S32C5");
    check_base_class_offset(lv, (S32C7*)(S32C6*), 0, "S32C5");
    check_base_class_offset(lv, (S32C6*), 0, "S32C5");
    check_field_offset(lv, s32c5f0, ABISELECT(268,196), "S32C5.s32c5f0");
    set_bf_and_test(lv, s32c5f1, ABISELECT(276,204), 0, 1, 1, "S32C5");
    check_field_offset(lv, s32c5f2, ABISELECT(280,208), "S32C5.s32c5f2");
    test_class_info(&lv, &cd_S32C5);
    dp->~S32C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C5(Test_S32C5, "S32C5", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S32C5C1Ev();
extern void _ZN5S32C5D1Ev();
Name_Map name_map_S32C5[] = {
  NSPAIR(_ZN5S32C5C1Ev),
  NSPAIR(_ZN5S32C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
static Base_Class bases_S32C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S32C5[];
extern void _ZN5S32C5D1Ev();
extern void _ZN5S32C5D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
static  VTBL_ENTRY vtc_S32C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C5[0]),
  (VTBL_ENTRY)&_ZN5S32C5D1Ev,
  (VTBL_ENTRY)&_ZN5S32C5D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
};
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
Class_Descriptor cd_S32C5 = {  "S32C5", // class name
  bases_S32C5, 3,
  &(vtc_S32C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S32C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C5),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C4  : S32C5 {
  int s32c4f0;
  unsigned int s32c4f1:1;
  virtual  ~S32C4(); // _ZN5S32C4D1Ev
  virtual void  v114(); // _ZN5S32C44v114Ev
  virtual void  v115(); // _ZN5S32C44v115Ev
  virtual void  v116(); // _ZN5S32C44v116Ev
  virtual void  v117(); // _ZN5S32C44v117Ev
  virtual void  v118(); // _ZN5S32C44v118Ev
  virtual void  v119(); // _ZN5S32C44v119Ev
  virtual void  v120(); // _ZN5S32C44v120Ev
  virtual void  v121(); // _ZN5S32C44v121Ev
  S32C4(); // tgen
};
//SIG(-1 S32C4) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S32C4 ::~S32C4(){ note_dtor("S32C4", this);}
void  S32C4 ::v114(){vfunc_called(this, "_ZN5S32C44v114Ev");}
void  S32C4 ::v115(){vfunc_called(this, "_ZN5S32C44v115Ev");}
void  S32C4 ::v116(){vfunc_called(this, "_ZN5S32C44v116Ev");}
void  S32C4 ::v117(){vfunc_called(this, "_ZN5S32C44v117Ev");}
void  S32C4 ::v118(){vfunc_called(this, "_ZN5S32C44v118Ev");}
void  S32C4 ::v119(){vfunc_called(this, "_ZN5S32C44v119Ev");}
void  S32C4 ::v120(){vfunc_called(this, "_ZN5S32C44v120Ev");}
void  S32C4 ::v121(){vfunc_called(this, "_ZN5S32C44v121Ev");}
S32C4 ::S32C4(){ note_ctor("S32C4", this);} // tgen

static void Test_S32C4()
{
  extern Class_Descriptor cd_S32C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S32C4, buf);
    S32C4 *dp, &lv = *(dp=new (buf) S32C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S32C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C4)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*)(S32C5*), 0, "S32C4");
    check_base_class_offset(lv, (S32C7*)(S32C6*)(S32C5*), 0, "S32C4");
    check_base_class_offset(lv, (S32C6*)(S32C5*), 0, "S32C4");
    check_base_class_offset(lv, (S32C5*), 0, "S32C4");
    check_field_offset(lv, s32c4f0, ABISELECT(296,220), "S32C4.s32c4f0");
    set_bf_and_test(lv, s32c4f1, ABISELECT(300,224), 0, 1, 1, "S32C4");
    test_class_info(&lv, &cd_S32C4);
    dp->~S32C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C4(Test_S32C4, "S32C4", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S32C4C1Ev();
extern void _ZN5S32C4D1Ev();
Name_Map name_map_S32C4[] = {
  NSPAIR(_ZN5S32C4C1Ev),
  NSPAIR(_ZN5S32C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
extern Class_Descriptor cd_S32C5;
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
static Base_Class bases_S32C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S32C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S32C4[];
extern void _ZN5S32C4D1Ev();
extern void _ZN5S32C4D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
extern void _ZN5S32C44v114Ev();
extern void _ZN5S32C44v115Ev();
extern void _ZN5S32C44v116Ev();
extern void _ZN5S32C44v117Ev();
extern void _ZN5S32C44v118Ev();
extern void _ZN5S32C44v119Ev();
extern void _ZN5S32C44v120Ev();
extern void _ZN5S32C44v121Ev();
static  VTBL_ENTRY vtc_S32C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C4[0]),
  (VTBL_ENTRY)&_ZN5S32C4D1Ev,
  (VTBL_ENTRY)&_ZN5S32C4D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
  (VTBL_ENTRY)&_ZN5S32C44v114Ev,
  (VTBL_ENTRY)&_ZN5S32C44v115Ev,
  (VTBL_ENTRY)&_ZN5S32C44v116Ev,
  (VTBL_ENTRY)&_ZN5S32C44v117Ev,
  (VTBL_ENTRY)&_ZN5S32C44v118Ev,
  (VTBL_ENTRY)&_ZN5S32C44v119Ev,
  (VTBL_ENTRY)&_ZN5S32C44v120Ev,
  (VTBL_ENTRY)&_ZN5S32C44v121Ev,
};
extern VTBL_ENTRY _ZTI5S32C4[];
extern  VTBL_ENTRY _ZTV5S32C4[];
Class_Descriptor cd_S32C4 = {  "S32C4", // class name
  bases_S32C4, 4,
  &(vtc_S32C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S32C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C4),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C3  : S32C4 {
  int s32c3f0;
  virtual  ~S32C3(); // _ZN5S32C3D1Ev
  virtual void  v122(); // _ZN5S32C34v122Ev
  virtual void  v123(); // _ZN5S32C34v123Ev
  S32C3(); // tgen
};
//SIG(-1 S32C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S32C3 ::~S32C3(){ note_dtor("S32C3", this);}
void  S32C3 ::v122(){vfunc_called(this, "_ZN5S32C34v122Ev");}
void  S32C3 ::v123(){vfunc_called(this, "_ZN5S32C34v123Ev");}
S32C3 ::S32C3(){ note_ctor("S32C3", this);} // tgen

static void Test_S32C3()
{
  extern Class_Descriptor cd_S32C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S32C3, buf);
    S32C3 *dp, &lv = *(dp=new (buf) S32C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S32C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C3)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*)(S32C5*)(S32C4*), 0, "S32C3");
    check_base_class_offset(lv, (S32C7*)(S32C6*)(S32C5*)(S32C4*), 0, "S32C3");
    check_base_class_offset(lv, (S32C6*)(S32C5*)(S32C4*), 0, "S32C3");
    check_base_class_offset(lv, (S32C5*)(S32C4*), 0, "S32C3");
    check_base_class_offset(lv, (S32C4*), 0, "S32C3");
    check_field_offset(lv, s32c3f0, ABISELECT(304,228), "S32C3.s32c3f0");
    test_class_info(&lv, &cd_S32C3);
    dp->~S32C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C3(Test_S32C3, "S32C3", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S32C3C1Ev();
extern void _ZN5S32C3D1Ev();
Name_Map name_map_S32C3[] = {
  NSPAIR(_ZN5S32C3C1Ev),
  NSPAIR(_ZN5S32C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
extern Class_Descriptor cd_S32C5;
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
extern Class_Descriptor cd_S32C4;
extern VTBL_ENTRY _ZTI5S32C4[];
extern  VTBL_ENTRY _ZTV5S32C4[];
static Base_Class bases_S32C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S32C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S32C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S32C3[];
extern void _ZN5S32C3D1Ev();
extern void _ZN5S32C3D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
extern void _ZN5S32C44v114Ev();
extern void _ZN5S32C44v115Ev();
extern void _ZN5S32C44v116Ev();
extern void _ZN5S32C44v117Ev();
extern void _ZN5S32C44v118Ev();
extern void _ZN5S32C44v119Ev();
extern void _ZN5S32C44v120Ev();
extern void _ZN5S32C44v121Ev();
extern void _ZN5S32C34v122Ev();
extern void _ZN5S32C34v123Ev();
static  VTBL_ENTRY vtc_S32C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C3[0]),
  (VTBL_ENTRY)&_ZN5S32C3D1Ev,
  (VTBL_ENTRY)&_ZN5S32C3D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
  (VTBL_ENTRY)&_ZN5S32C44v114Ev,
  (VTBL_ENTRY)&_ZN5S32C44v115Ev,
  (VTBL_ENTRY)&_ZN5S32C44v116Ev,
  (VTBL_ENTRY)&_ZN5S32C44v117Ev,
  (VTBL_ENTRY)&_ZN5S32C44v118Ev,
  (VTBL_ENTRY)&_ZN5S32C44v119Ev,
  (VTBL_ENTRY)&_ZN5S32C44v120Ev,
  (VTBL_ENTRY)&_ZN5S32C44v121Ev,
  (VTBL_ENTRY)&_ZN5S32C34v122Ev,
  (VTBL_ENTRY)&_ZN5S32C34v123Ev,
};
extern VTBL_ENTRY _ZTI5S32C3[];
extern  VTBL_ENTRY _ZTV5S32C3[];
Class_Descriptor cd_S32C3 = {  "S32C3", // class name
  bases_S32C3, 5,
  &(vtc_S32C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S32C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C3),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C2  : S32C3 {
  void *s32c2f0;
  ::S287C8_nt s32c2f1;
  virtual  ~S32C2(); // _ZN5S32C2D1Ev
  virtual void  v124(); // _ZN5S32C24v124Ev
  virtual void  v125(); // _ZN5S32C24v125Ev
  S32C2(); // tgen
};
//SIG(-1 S32C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v121 v122 Fi} vd v1 v2 Fp FC9}


 S32C2 ::~S32C2(){ note_dtor("S32C2", this);}
void  S32C2 ::v124(){vfunc_called(this, "_ZN5S32C24v124Ev");}
void  S32C2 ::v125(){vfunc_called(this, "_ZN5S32C24v125Ev");}
S32C2 ::S32C2(){ note_ctor("S32C2", this);} // tgen

static void Test_S32C2()
{
  extern Class_Descriptor cd_S32C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S32C2, buf);
    S32C2 *dp, &lv = *(dp=new (buf) S32C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S32C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C2)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*)(S32C5*)(S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C7*)(S32C6*)(S32C5*)(S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C6*)(S32C5*)(S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C5*)(S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C4*)(S32C3*), 0, "S32C2");
    check_base_class_offset(lv, (S32C3*), 0, "S32C2");
    check_field_offset(lv, s32c2f0, ABISELECT(312,232), "S32C2.s32c2f0");
    check_field_offset(lv, s32c2f1, ABISELECT(320,236), "S32C2.s32c2f1");
    test_class_info(&lv, &cd_S32C2);
    dp->~S32C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C2(Test_S32C2, "S32C2", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN5S32C2C1Ev();
extern void _ZN5S32C2D1Ev();
Name_Map name_map_S32C2[] = {
  NSPAIR(_ZN5S32C2C1Ev),
  NSPAIR(_ZN5S32C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
extern Class_Descriptor cd_S32C5;
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
extern Class_Descriptor cd_S32C4;
extern VTBL_ENTRY _ZTI5S32C4[];
extern  VTBL_ENTRY _ZTV5S32C4[];
extern Class_Descriptor cd_S32C3;
extern VTBL_ENTRY _ZTI5S32C3[];
extern  VTBL_ENTRY _ZTV5S32C3[];
static Base_Class bases_S32C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S32C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S32C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S32C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S32C2[];
extern void _ZN5S32C2D1Ev();
extern void _ZN5S32C2D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
extern void _ZN5S32C44v114Ev();
extern void _ZN5S32C44v115Ev();
extern void _ZN5S32C44v116Ev();
extern void _ZN5S32C44v117Ev();
extern void _ZN5S32C44v118Ev();
extern void _ZN5S32C44v119Ev();
extern void _ZN5S32C44v120Ev();
extern void _ZN5S32C44v121Ev();
extern void _ZN5S32C34v122Ev();
extern void _ZN5S32C34v123Ev();
extern void _ZN5S32C24v124Ev();
extern void _ZN5S32C24v125Ev();
static  VTBL_ENTRY vtc_S32C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C2[0]),
  (VTBL_ENTRY)&_ZN5S32C2D1Ev,
  (VTBL_ENTRY)&_ZN5S32C2D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
  (VTBL_ENTRY)&_ZN5S32C44v114Ev,
  (VTBL_ENTRY)&_ZN5S32C44v115Ev,
  (VTBL_ENTRY)&_ZN5S32C44v116Ev,
  (VTBL_ENTRY)&_ZN5S32C44v117Ev,
  (VTBL_ENTRY)&_ZN5S32C44v118Ev,
  (VTBL_ENTRY)&_ZN5S32C44v119Ev,
  (VTBL_ENTRY)&_ZN5S32C44v120Ev,
  (VTBL_ENTRY)&_ZN5S32C44v121Ev,
  (VTBL_ENTRY)&_ZN5S32C34v122Ev,
  (VTBL_ENTRY)&_ZN5S32C34v123Ev,
  (VTBL_ENTRY)&_ZN5S32C24v124Ev,
  (VTBL_ENTRY)&_ZN5S32C24v125Ev,
};
extern VTBL_ENTRY _ZTI5S32C2[];
extern  VTBL_ENTRY _ZTV5S32C2[];
Class_Descriptor cd_S32C2 = {  "S32C2", // class name
  bases_S32C2, 6,
  &(vtc_S32C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI5S32C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C27_nt  {
  int s32c27f0[4];
  unsigned int s32c27f1:1;
  void  mf32c27(); // _ZN9S32C27_nt7mf32c27Ev
};
//SIG(-1 S32C27_nt) C1{ m Fi[4] Fi:1}


void  S32C27_nt ::mf32c27(){}

//skip512 S32C27_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S32C1  : S32C2 {
  ::S287C8_nt s32c1f0;
  void *s32c1f1;
  ::S287C19 s32c1f2;
  ::S32C27_nt s32c1f3;
  unsigned int s32c1f4:1;
  virtual  ~S32C1(); // _ZN5S32C1D1Ev
  virtual void  v1(); // _ZN5S32C12v1Ev
  virtual void  v2(); // _ZN5S32C12v2Ev
  virtual void  v3(); // _ZN5S32C12v3Ev
  S32C1(); // tgen
};
//SIG(1 S32C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC9{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC10{ BC11{ BC12{ BC13{ m Fp Fi[2]}}}} FC10 FC14{ m} FC10 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC15{ BC16{ BC13}} FC17{ BC18{ BC13}} FC19{ BC20{ BC13}} FC21{ BC22{ BC13}} Fi[3]} vd v110 v111 v112 v113 FC9 Fi:1 FC23{ BC24{ BC13}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v124 v125 Fp FC10} vd v1 v2 v3 FC10 Fp FC25{ BC26{ BC13}} FC27{ m Fi[4] Fi:1} Fi:1}


 S32C1 ::~S32C1(){ note_dtor("S32C1", this);}
void  S32C1 ::v1(){vfunc_called(this, "_ZN5S32C12v1Ev");}
void  S32C1 ::v2(){vfunc_called(this, "_ZN5S32C12v2Ev");}
void  S32C1 ::v3(){vfunc_called(this, "_ZN5S32C12v3Ev");}
S32C1 ::S32C1(){ note_ctor("S32C1", this);} // tgen

static void Test_S32C1()
{
  extern Class_Descriptor cd_S32C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,76)];
    init_test(&cd_S32C1, buf);
    S32C1 *dp, &lv = *(dp=new (buf) S32C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,300), "sizeof(S32C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S32C1)");
    check_base_class_offset(lv, (S32C8*)(S32C7*)(S32C6*)(S32C5*)(S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C7*)(S32C6*)(S32C5*)(S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C6*)(S32C5*)(S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C5*)(S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C4*)(S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C3*)(S32C2*), 0, "S32C1");
    check_base_class_offset(lv, (S32C2*), 0, "S32C1");
    check_field_offset(lv, s32c1f0, ABISELECT(336,248), "S32C1.s32c1f0");
    check_field_offset(lv, s32c1f1, ABISELECT(352,260), "S32C1.s32c1f1");
    check_field_offset(lv, s32c1f2, ABISELECT(360,264), "S32C1.s32c1f2");
    check_field_offset(lv, s32c1f3, ABISELECT(376,276), "S32C1.s32c1f3");
    set_bf_and_test(lv, s32c1f4, ABISELECT(396,296), 0, 1, 1, "S32C1");
    test_class_info(&lv, &cd_S32C1);
    dp->~S32C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS32C1(Test_S32C1, "S32C1", ABISELECT(400,300));

#else // __cplusplus

extern void _ZN5S32C1C1Ev();
extern void _ZN5S32C1D1Ev();
Name_Map name_map_S32C1[] = {
  NSPAIR(_ZN5S32C1C1Ev),
  NSPAIR(_ZN5S32C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S32C8;
extern VTBL_ENTRY _ZTI5S32C8[];
extern  VTBL_ENTRY _ZTV5S32C8[];
extern Class_Descriptor cd_S32C7;
extern VTBL_ENTRY _ZTI5S32C7[];
extern  VTBL_ENTRY _ZTV5S32C7[];
extern Class_Descriptor cd_S32C6;
extern VTBL_ENTRY _ZTI5S32C6[];
extern  VTBL_ENTRY _ZTV5S32C6[];
extern Class_Descriptor cd_S32C5;
extern VTBL_ENTRY _ZTI5S32C5[];
extern  VTBL_ENTRY _ZTV5S32C5[];
extern Class_Descriptor cd_S32C4;
extern VTBL_ENTRY _ZTI5S32C4[];
extern  VTBL_ENTRY _ZTV5S32C4[];
extern Class_Descriptor cd_S32C3;
extern VTBL_ENTRY _ZTI5S32C3[];
extern  VTBL_ENTRY _ZTV5S32C3[];
extern Class_Descriptor cd_S32C2;
extern VTBL_ENTRY _ZTI5S32C2[];
extern  VTBL_ENTRY _ZTV5S32C2[];
static Base_Class bases_S32C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S32C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S32C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S32C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S32C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S32C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S32C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S32C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S32C1[];
extern void _ZN5S32C1D1Ev();
extern void _ZN5S32C1D0Ev();
extern void _ZN5S32C82v4Ev();
extern void _ZN5S32C82v5Ev();
extern void _ZN5S32C82v6Ev();
extern void _ZN5S32C82v7Ev();
extern void _ZN5S32C82v8Ev();
extern void _ZN5S32C82v9Ev();
extern void _ZN5S32C83v10Ev();
extern void _ZN5S32C83v11Ev();
extern void _ZN5S32C83v12Ev();
extern void _ZN5S32C83v13Ev();
extern void _ZN5S32C83v14Ev();
extern void _ZN5S32C83v15Ev();
extern void _ZN5S32C83v16Ev();
extern void _ZN5S32C83v17Ev();
extern void _ZN5S32C83v18Ev();
extern void _ZN5S32C83v19Ev();
extern void _ZN5S32C83v20Ev();
extern void _ZN5S32C83v21Ev();
extern void _ZN5S32C83v22Ev();
extern void _ZN5S32C83v23Ev();
extern void _ZN5S32C83v24Ev();
extern void _ZN5S32C83v25Ev();
extern void _ZN5S32C83v26Ev();
extern void _ZN5S32C83v27Ev();
extern void _ZN5S32C83v28Ev();
extern void _ZN5S32C83v29Ev();
extern void _ZN5S32C83v30Ev();
extern void _ZN5S32C83v31Ev();
extern void _ZN5S32C83v32Ev();
extern void _ZN5S32C83v33Ev();
extern void _ZN5S32C83v34Ev();
extern void _ZN5S32C83v35Ev();
extern void _ZN5S32C83v36Ev();
extern void _ZN5S32C83v37Ev();
extern void _ZN5S32C83v38Ev();
extern void _ZN5S32C83v39Ev();
extern void _ZN5S32C83v40Ev();
extern void _ZN5S32C83v41Ev();
extern void _ZN5S32C83v42Ev();
extern void _ZN5S32C83v43Ev();
extern void _ZN5S32C83v44Ev();
extern void _ZN5S32C83v45Ev();
extern void _ZN5S32C83v46Ev();
extern void _ZN5S32C83v47Ev();
extern void _ZN5S32C83v48Ev();
extern void _ZN5S32C83v49Ev();
extern void _ZN5S32C83v50Ev();
extern void _ZN5S32C83v51Ev();
extern void _ZN5S32C83v52Ev();
extern void _ZN5S32C83v53Ev();
extern void _ZN5S32C83v54Ev();
extern void _ZN5S32C83v55Ev();
extern void _ZN5S32C83v56Ev();
extern void _ZN5S32C83v57Ev();
extern void _ZN5S32C83v58Ev();
extern void _ZN5S32C83v59Ev();
extern void _ZN5S32C83v60Ev();
extern void _ZN5S32C83v61Ev();
extern void _ZN5S32C83v62Ev();
extern void _ZN5S32C83v63Ev();
extern void _ZN5S32C83v64Ev();
extern void _ZN5S32C83v65Ev();
extern void _ZN5S32C83v66Ev();
extern void _ZN5S32C83v67Ev();
extern void _ZN5S32C73v68Ev();
extern void _ZN5S32C73v69Ev();
extern void _ZN5S32C73v70Ev();
extern void _ZN5S32C73v71Ev();
extern void _ZN5S32C73v72Ev();
extern void _ZN5S32C73v73Ev();
extern void _ZN5S32C73v74Ev();
extern void _ZN5S32C73v75Ev();
extern void _ZN5S32C73v76Ev();
extern void _ZN5S32C73v77Ev();
extern void _ZN5S32C73v78Ev();
extern void _ZN5S32C73v79Ev();
extern void _ZN5S32C73v80Ev();
extern void _ZN5S32C73v81Ev();
extern void _ZN5S32C73v82Ev();
extern void _ZN5S32C73v83Ev();
extern void _ZN5S32C73v84Ev();
extern void _ZN5S32C73v85Ev();
extern void _ZN5S32C73v86Ev();
extern void _ZN5S32C73v87Ev();
extern void _ZN5S32C73v88Ev();
extern void _ZN5S32C73v89Ev();
extern void _ZN5S32C63v90Ev();
extern void _ZN5S32C63v91Ev();
extern void _ZN5S32C63v92Ev();
extern void _ZN5S32C63v93Ev();
extern void _ZN5S32C63v94Ev();
extern void _ZN5S32C63v95Ev();
extern void _ZN5S32C63v96Ev();
extern void _ZN5S32C63v97Ev();
extern void _ZN5S32C63v98Ev();
extern void _ZN5S32C63v99Ev();
extern void _ZN5S32C64v100Ev();
extern void _ZN5S32C64v101Ev();
extern void _ZN5S32C64v102Ev();
extern void _ZN5S32C64v103Ev();
extern void _ZN5S32C64v104Ev();
extern void _ZN5S32C64v105Ev();
extern void _ZN5S32C64v106Ev();
extern void _ZN5S32C64v107Ev();
extern void _ZN5S32C64v108Ev();
extern void _ZN5S32C64v109Ev();
extern void _ZN5S32C54v110Ev();
extern void _ZN5S32C54v111Ev();
extern void _ZN5S32C54v112Ev();
extern void _ZN5S32C54v113Ev();
extern void _ZN5S32C44v114Ev();
extern void _ZN5S32C44v115Ev();
extern void _ZN5S32C44v116Ev();
extern void _ZN5S32C44v117Ev();
extern void _ZN5S32C44v118Ev();
extern void _ZN5S32C44v119Ev();
extern void _ZN5S32C44v120Ev();
extern void _ZN5S32C44v121Ev();
extern void _ZN5S32C34v122Ev();
extern void _ZN5S32C34v123Ev();
extern void _ZN5S32C24v124Ev();
extern void _ZN5S32C24v125Ev();
extern void _ZN5S32C12v1Ev();
extern void _ZN5S32C12v2Ev();
extern void _ZN5S32C12v3Ev();
static  VTBL_ENTRY vtc_S32C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S32C1[0]),
  (VTBL_ENTRY)&_ZN5S32C1D1Ev,
  (VTBL_ENTRY)&_ZN5S32C1D0Ev,
  (VTBL_ENTRY)&_ZN5S32C82v4Ev,
  (VTBL_ENTRY)&_ZN5S32C82v5Ev,
  (VTBL_ENTRY)&_ZN5S32C82v6Ev,
  (VTBL_ENTRY)&_ZN5S32C82v7Ev,
  (VTBL_ENTRY)&_ZN5S32C82v8Ev,
  (VTBL_ENTRY)&_ZN5S32C82v9Ev,
  (VTBL_ENTRY)&_ZN5S32C83v10Ev,
  (VTBL_ENTRY)&_ZN5S32C83v11Ev,
  (VTBL_ENTRY)&_ZN5S32C83v12Ev,
  (VTBL_ENTRY)&_ZN5S32C83v13Ev,
  (VTBL_ENTRY)&_ZN5S32C83v14Ev,
  (VTBL_ENTRY)&_ZN5S32C83v15Ev,
  (VTBL_ENTRY)&_ZN5S32C83v16Ev,
  (VTBL_ENTRY)&_ZN5S32C83v17Ev,
  (VTBL_ENTRY)&_ZN5S32C83v18Ev,
  (VTBL_ENTRY)&_ZN5S32C83v19Ev,
  (VTBL_ENTRY)&_ZN5S32C83v20Ev,
  (VTBL_ENTRY)&_ZN5S32C83v21Ev,
  (VTBL_ENTRY)&_ZN5S32C83v22Ev,
  (VTBL_ENTRY)&_ZN5S32C83v23Ev,
  (VTBL_ENTRY)&_ZN5S32C83v24Ev,
  (VTBL_ENTRY)&_ZN5S32C83v25Ev,
  (VTBL_ENTRY)&_ZN5S32C83v26Ev,
  (VTBL_ENTRY)&_ZN5S32C83v27Ev,
  (VTBL_ENTRY)&_ZN5S32C83v28Ev,
  (VTBL_ENTRY)&_ZN5S32C83v29Ev,
  (VTBL_ENTRY)&_ZN5S32C83v30Ev,
  (VTBL_ENTRY)&_ZN5S32C83v31Ev,
  (VTBL_ENTRY)&_ZN5S32C83v32Ev,
  (VTBL_ENTRY)&_ZN5S32C83v33Ev,
  (VTBL_ENTRY)&_ZN5S32C83v34Ev,
  (VTBL_ENTRY)&_ZN5S32C83v35Ev,
  (VTBL_ENTRY)&_ZN5S32C83v36Ev,
  (VTBL_ENTRY)&_ZN5S32C83v37Ev,
  (VTBL_ENTRY)&_ZN5S32C83v38Ev,
  (VTBL_ENTRY)&_ZN5S32C83v39Ev,
  (VTBL_ENTRY)&_ZN5S32C83v40Ev,
  (VTBL_ENTRY)&_ZN5S32C83v41Ev,
  (VTBL_ENTRY)&_ZN5S32C83v42Ev,
  (VTBL_ENTRY)&_ZN5S32C83v43Ev,
  (VTBL_ENTRY)&_ZN5S32C83v44Ev,
  (VTBL_ENTRY)&_ZN5S32C83v45Ev,
  (VTBL_ENTRY)&_ZN5S32C83v46Ev,
  (VTBL_ENTRY)&_ZN5S32C83v47Ev,
  (VTBL_ENTRY)&_ZN5S32C83v48Ev,
  (VTBL_ENTRY)&_ZN5S32C83v49Ev,
  (VTBL_ENTRY)&_ZN5S32C83v50Ev,
  (VTBL_ENTRY)&_ZN5S32C83v51Ev,
  (VTBL_ENTRY)&_ZN5S32C83v52Ev,
  (VTBL_ENTRY)&_ZN5S32C83v53Ev,
  (VTBL_ENTRY)&_ZN5S32C83v54Ev,
  (VTBL_ENTRY)&_ZN5S32C83v55Ev,
  (VTBL_ENTRY)&_ZN5S32C83v56Ev,
  (VTBL_ENTRY)&_ZN5S32C83v57Ev,
  (VTBL_ENTRY)&_ZN5S32C83v58Ev,
  (VTBL_ENTRY)&_ZN5S32C83v59Ev,
  (VTBL_ENTRY)&_ZN5S32C83v60Ev,
  (VTBL_ENTRY)&_ZN5S32C83v61Ev,
  (VTBL_ENTRY)&_ZN5S32C83v62Ev,
  (VTBL_ENTRY)&_ZN5S32C83v63Ev,
  (VTBL_ENTRY)&_ZN5S32C83v64Ev,
  (VTBL_ENTRY)&_ZN5S32C83v65Ev,
  (VTBL_ENTRY)&_ZN5S32C83v66Ev,
  (VTBL_ENTRY)&_ZN5S32C83v67Ev,
  (VTBL_ENTRY)&_ZN5S32C73v68Ev,
  (VTBL_ENTRY)&_ZN5S32C73v69Ev,
  (VTBL_ENTRY)&_ZN5S32C73v70Ev,
  (VTBL_ENTRY)&_ZN5S32C73v71Ev,
  (VTBL_ENTRY)&_ZN5S32C73v72Ev,
  (VTBL_ENTRY)&_ZN5S32C73v73Ev,
  (VTBL_ENTRY)&_ZN5S32C73v74Ev,
  (VTBL_ENTRY)&_ZN5S32C73v75Ev,
  (VTBL_ENTRY)&_ZN5S32C73v76Ev,
  (VTBL_ENTRY)&_ZN5S32C73v77Ev,
  (VTBL_ENTRY)&_ZN5S32C73v78Ev,
  (VTBL_ENTRY)&_ZN5S32C73v79Ev,
  (VTBL_ENTRY)&_ZN5S32C73v80Ev,
  (VTBL_ENTRY)&_ZN5S32C73v81Ev,
  (VTBL_ENTRY)&_ZN5S32C73v82Ev,
  (VTBL_ENTRY)&_ZN5S32C73v83Ev,
  (VTBL_ENTRY)&_ZN5S32C73v84Ev,
  (VTBL_ENTRY)&_ZN5S32C73v85Ev,
  (VTBL_ENTRY)&_ZN5S32C73v86Ev,
  (VTBL_ENTRY)&_ZN5S32C73v87Ev,
  (VTBL_ENTRY)&_ZN5S32C73v88Ev,
  (VTBL_ENTRY)&_ZN5S32C73v89Ev,
  (VTBL_ENTRY)&_ZN5S32C63v90Ev,
  (VTBL_ENTRY)&_ZN5S32C63v91Ev,
  (VTBL_ENTRY)&_ZN5S32C63v92Ev,
  (VTBL_ENTRY)&_ZN5S32C63v93Ev,
  (VTBL_ENTRY)&_ZN5S32C63v94Ev,
  (VTBL_ENTRY)&_ZN5S32C63v95Ev,
  (VTBL_ENTRY)&_ZN5S32C63v96Ev,
  (VTBL_ENTRY)&_ZN5S32C63v97Ev,
  (VTBL_ENTRY)&_ZN5S32C63v98Ev,
  (VTBL_ENTRY)&_ZN5S32C63v99Ev,
  (VTBL_ENTRY)&_ZN5S32C64v100Ev,
  (VTBL_ENTRY)&_ZN5S32C64v101Ev,
  (VTBL_ENTRY)&_ZN5S32C64v102Ev,
  (VTBL_ENTRY)&_ZN5S32C64v103Ev,
  (VTBL_ENTRY)&_ZN5S32C64v104Ev,
  (VTBL_ENTRY)&_ZN5S32C64v105Ev,
  (VTBL_ENTRY)&_ZN5S32C64v106Ev,
  (VTBL_ENTRY)&_ZN5S32C64v107Ev,
  (VTBL_ENTRY)&_ZN5S32C64v108Ev,
  (VTBL_ENTRY)&_ZN5S32C64v109Ev,
  (VTBL_ENTRY)&_ZN5S32C54v110Ev,
  (VTBL_ENTRY)&_ZN5S32C54v111Ev,
  (VTBL_ENTRY)&_ZN5S32C54v112Ev,
  (VTBL_ENTRY)&_ZN5S32C54v113Ev,
  (VTBL_ENTRY)&_ZN5S32C44v114Ev,
  (VTBL_ENTRY)&_ZN5S32C44v115Ev,
  (VTBL_ENTRY)&_ZN5S32C44v116Ev,
  (VTBL_ENTRY)&_ZN5S32C44v117Ev,
  (VTBL_ENTRY)&_ZN5S32C44v118Ev,
  (VTBL_ENTRY)&_ZN5S32C44v119Ev,
  (VTBL_ENTRY)&_ZN5S32C44v120Ev,
  (VTBL_ENTRY)&_ZN5S32C44v121Ev,
  (VTBL_ENTRY)&_ZN5S32C34v122Ev,
  (VTBL_ENTRY)&_ZN5S32C34v123Ev,
  (VTBL_ENTRY)&_ZN5S32C24v124Ev,
  (VTBL_ENTRY)&_ZN5S32C24v125Ev,
  (VTBL_ENTRY)&_ZN5S32C12v1Ev,
  (VTBL_ENTRY)&_ZN5S32C12v2Ev,
  (VTBL_ENTRY)&_ZN5S32C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S32C1[];
extern  VTBL_ENTRY _ZTV5S32C1[];
Class_Descriptor cd_S32C1 = {  "S32C1", // class name
  bases_S32C1, 7,
  &(vtc_S32C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,300), // object size
  NSPAIRA(_ZTI5S32C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S32C1),129, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C8  {
  int s33c8f0;
  __tsi64 s33c8f1;
  void *s33c8f2[4];
  int s33c8f3[2];
  void *s33c8f4;
  ::S3350C4_nt s33c8f5;
  void *s33c8f6[2];
  virtual  ~S33C8(); // _ZN5S33C8D1Ev
  virtual void  v4(); // _ZN5S33C82v4Ev
  virtual void  v5(); // _ZN5S33C82v5Ev
  virtual void  v6(); // _ZN5S33C82v6Ev
  virtual void  v7(); // _ZN5S33C82v7Ev
  virtual void  v8(); // _ZN5S33C82v8Ev
  virtual void  v9(); // _ZN5S33C82v9Ev
  virtual void  v10(); // _ZN5S33C83v10Ev
  virtual void  v11(); // _ZN5S33C83v11Ev
  virtual void  v12(); // _ZN5S33C83v12Ev
  virtual void  v13(); // _ZN5S33C83v13Ev
  virtual void  v14(); // _ZN5S33C83v14Ev
  virtual void  v15(); // _ZN5S33C83v15Ev
  virtual void  v16(); // _ZN5S33C83v16Ev
  virtual void  v17(); // _ZN5S33C83v17Ev
  virtual void  v18(); // _ZN5S33C83v18Ev
  virtual void  v19(); // _ZN5S33C83v19Ev
  virtual void  v20(); // _ZN5S33C83v20Ev
  virtual void  v21(); // _ZN5S33C83v21Ev
  virtual void  v22(); // _ZN5S33C83v22Ev
  virtual void  v23(); // _ZN5S33C83v23Ev
  virtual void  v24(); // _ZN5S33C83v24Ev
  virtual void  v25(); // _ZN5S33C83v25Ev
  virtual void  v26(); // _ZN5S33C83v26Ev
  virtual void  v27(); // _ZN5S33C83v27Ev
  virtual void  v28(); // _ZN5S33C83v28Ev
  virtual void  v29(); // _ZN5S33C83v29Ev
  virtual void  v30(); // _ZN5S33C83v30Ev
  virtual void  v31(); // _ZN5S33C83v31Ev
  virtual void  v32(); // _ZN5S33C83v32Ev
  virtual void  v33(); // _ZN5S33C83v33Ev
  virtual void  v34(); // _ZN5S33C83v34Ev
  virtual void  v35(); // _ZN5S33C83v35Ev
  virtual void  v36(); // _ZN5S33C83v36Ev
  virtual void  v37(); // _ZN5S33C83v37Ev
  virtual void  v38(); // _ZN5S33C83v38Ev
  virtual void  v39(); // _ZN5S33C83v39Ev
  virtual void  v40(); // _ZN5S33C83v40Ev
  virtual void  v41(); // _ZN5S33C83v41Ev
  virtual void  v42(); // _ZN5S33C83v42Ev
  virtual void  v43(); // _ZN5S33C83v43Ev
  virtual void  v44(); // _ZN5S33C83v44Ev
  virtual void  v45(); // _ZN5S33C83v45Ev
  virtual void  v46(); // _ZN5S33C83v46Ev
  virtual void  v47(); // _ZN5S33C83v47Ev
  virtual void  v48(); // _ZN5S33C83v48Ev
  virtual void  v49(); // _ZN5S33C83v49Ev
  virtual void  v50(); // _ZN5S33C83v50Ev
  virtual void  v51(); // _ZN5S33C83v51Ev
  virtual void  v52(); // _ZN5S33C83v52Ev
  virtual void  v53(); // _ZN5S33C83v53Ev
  virtual void  v54(); // _ZN5S33C83v54Ev
  virtual void  v55(); // _ZN5S33C83v55Ev
  virtual void  v56(); // _ZN5S33C83v56Ev
  virtual void  v57(); // _ZN5S33C83v57Ev
  virtual void  v58(); // _ZN5S33C83v58Ev
  virtual void  v59(); // _ZN5S33C83v59Ev
  virtual void  v60(); // _ZN5S33C83v60Ev
  virtual void  v61(); // _ZN5S33C83v61Ev
  virtual void  v62(); // _ZN5S33C83v62Ev
  virtual void  v63(); // _ZN5S33C83v63Ev
  virtual void  v64(); // _ZN5S33C83v64Ev
  virtual void  v65(); // _ZN5S33C83v65Ev
  virtual void  v66(); // _ZN5S33C83v66Ev
  virtual void  v67(); // _ZN5S33C83v67Ev
  S33C8(); // tgen
};
//SIG(-1 S33C8) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S33C8 ::~S33C8(){ note_dtor("S33C8", this);}
void  S33C8 ::v4(){vfunc_called(this, "_ZN5S33C82v4Ev");}
void  S33C8 ::v5(){vfunc_called(this, "_ZN5S33C82v5Ev");}
void  S33C8 ::v6(){vfunc_called(this, "_ZN5S33C82v6Ev");}
void  S33C8 ::v7(){vfunc_called(this, "_ZN5S33C82v7Ev");}
void  S33C8 ::v8(){vfunc_called(this, "_ZN5S33C82v8Ev");}
void  S33C8 ::v9(){vfunc_called(this, "_ZN5S33C82v9Ev");}
void  S33C8 ::v10(){vfunc_called(this, "_ZN5S33C83v10Ev");}
void  S33C8 ::v11(){vfunc_called(this, "_ZN5S33C83v11Ev");}
void  S33C8 ::v12(){vfunc_called(this, "_ZN5S33C83v12Ev");}
void  S33C8 ::v13(){vfunc_called(this, "_ZN5S33C83v13Ev");}
void  S33C8 ::v14(){vfunc_called(this, "_ZN5S33C83v14Ev");}
void  S33C8 ::v15(){vfunc_called(this, "_ZN5S33C83v15Ev");}
void  S33C8 ::v16(){vfunc_called(this, "_ZN5S33C83v16Ev");}
void  S33C8 ::v17(){vfunc_called(this, "_ZN5S33C83v17Ev");}
void  S33C8 ::v18(){vfunc_called(this, "_ZN5S33C83v18Ev");}
void  S33C8 ::v19(){vfunc_called(this, "_ZN5S33C83v19Ev");}
void  S33C8 ::v20(){vfunc_called(this, "_ZN5S33C83v20Ev");}
void  S33C8 ::v21(){vfunc_called(this, "_ZN5S33C83v21Ev");}
void  S33C8 ::v22(){vfunc_called(this, "_ZN5S33C83v22Ev");}
void  S33C8 ::v23(){vfunc_called(this, "_ZN5S33C83v23Ev");}
void  S33C8 ::v24(){vfunc_called(this, "_ZN5S33C83v24Ev");}
void  S33C8 ::v25(){vfunc_called(this, "_ZN5S33C83v25Ev");}
void  S33C8 ::v26(){vfunc_called(this, "_ZN5S33C83v26Ev");}
void  S33C8 ::v27(){vfunc_called(this, "_ZN5S33C83v27Ev");}
void  S33C8 ::v28(){vfunc_called(this, "_ZN5S33C83v28Ev");}
void  S33C8 ::v29(){vfunc_called(this, "_ZN5S33C83v29Ev");}
void  S33C8 ::v30(){vfunc_called(this, "_ZN5S33C83v30Ev");}
void  S33C8 ::v31(){vfunc_called(this, "_ZN5S33C83v31Ev");}
void  S33C8 ::v32(){vfunc_called(this, "_ZN5S33C83v32Ev");}
void  S33C8 ::v33(){vfunc_called(this, "_ZN5S33C83v33Ev");}
void  S33C8 ::v34(){vfunc_called(this, "_ZN5S33C83v34Ev");}
void  S33C8 ::v35(){vfunc_called(this, "_ZN5S33C83v35Ev");}
void  S33C8 ::v36(){vfunc_called(this, "_ZN5S33C83v36Ev");}
void  S33C8 ::v37(){vfunc_called(this, "_ZN5S33C83v37Ev");}
void  S33C8 ::v38(){vfunc_called(this, "_ZN5S33C83v38Ev");}
void  S33C8 ::v39(){vfunc_called(this, "_ZN5S33C83v39Ev");}
void  S33C8 ::v40(){vfunc_called(this, "_ZN5S33C83v40Ev");}
void  S33C8 ::v41(){vfunc_called(this, "_ZN5S33C83v41Ev");}
void  S33C8 ::v42(){vfunc_called(this, "_ZN5S33C83v42Ev");}
void  S33C8 ::v43(){vfunc_called(this, "_ZN5S33C83v43Ev");}
void  S33C8 ::v44(){vfunc_called(this, "_ZN5S33C83v44Ev");}
void  S33C8 ::v45(){vfunc_called(this, "_ZN5S33C83v45Ev");}
void  S33C8 ::v46(){vfunc_called(this, "_ZN5S33C83v46Ev");}
void  S33C8 ::v47(){vfunc_called(this, "_ZN5S33C83v47Ev");}
void  S33C8 ::v48(){vfunc_called(this, "_ZN5S33C83v48Ev");}
void  S33C8 ::v49(){vfunc_called(this, "_ZN5S33C83v49Ev");}
void  S33C8 ::v50(){vfunc_called(this, "_ZN5S33C83v50Ev");}
void  S33C8 ::v51(){vfunc_called(this, "_ZN5S33C83v51Ev");}
void  S33C8 ::v52(){vfunc_called(this, "_ZN5S33C83v52Ev");}
void  S33C8 ::v53(){vfunc_called(this, "_ZN5S33C83v53Ev");}
void  S33C8 ::v54(){vfunc_called(this, "_ZN5S33C83v54Ev");}
void  S33C8 ::v55(){vfunc_called(this, "_ZN5S33C83v55Ev");}
void  S33C8 ::v56(){vfunc_called(this, "_ZN5S33C83v56Ev");}
void  S33C8 ::v57(){vfunc_called(this, "_ZN5S33C83v57Ev");}
void  S33C8 ::v58(){vfunc_called(this, "_ZN5S33C83v58Ev");}
void  S33C8 ::v59(){vfunc_called(this, "_ZN5S33C83v59Ev");}
void  S33C8 ::v60(){vfunc_called(this, "_ZN5S33C83v60Ev");}
void  S33C8 ::v61(){vfunc_called(this, "_ZN5S33C83v61Ev");}
void  S33C8 ::v62(){vfunc_called(this, "_ZN5S33C83v62Ev");}
void  S33C8 ::v63(){vfunc_called(this, "_ZN5S33C83v63Ev");}
void  S33C8 ::v64(){vfunc_called(this, "_ZN5S33C83v64Ev");}
void  S33C8 ::v65(){vfunc_called(this, "_ZN5S33C83v65Ev");}
void  S33C8 ::v66(){vfunc_called(this, "_ZN5S33C83v66Ev");}
void  S33C8 ::v67(){vfunc_called(this, "_ZN5S33C83v67Ev");}
S33C8 ::S33C8(){ note_ctor("S33C8", this);} // tgen

static void Test_S33C8()
{
  extern Class_Descriptor cd_S33C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S33C8, buf);
    S33C8 *dp, &lv = *(dp=new (buf) S33C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S33C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C8)");
    check_field_offset(lv, s33c8f0, ABISELECT(8,4), "S33C8.s33c8f0");
    check_field_offset(lv, s33c8f1, ABISELECT(16,8), "S33C8.s33c8f1");
    check_field_offset(lv, s33c8f2, ABISELECT(24,16), "S33C8.s33c8f2");
    check_field_offset(lv, s33c8f3, ABISELECT(56,32), "S33C8.s33c8f3");
    check_field_offset(lv, s33c8f4, ABISELECT(64,40), "S33C8.s33c8f4");
    check_field_offset(lv, s33c8f5, ABISELECT(72,44), "S33C8.s33c8f5");
    check_field_offset(lv, s33c8f6, ABISELECT(80,52), "S33C8.s33c8f6");
    test_class_info(&lv, &cd_S33C8);
    dp->~S33C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C8(Test_S33C8, "S33C8", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S33C8C1Ev();
extern void _ZN5S33C8D1Ev();
Name_Map name_map_S33C8[] = {
  NSPAIR(_ZN5S33C8C1Ev),
  NSPAIR(_ZN5S33C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S33C8[];
extern void _ZN5S33C8D1Ev();
extern void _ZN5S33C8D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
static  VTBL_ENTRY vtc_S33C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C8[0]),
  (VTBL_ENTRY)&_ZN5S33C8D1Ev,
  (VTBL_ENTRY)&_ZN5S33C8D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
};
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
Class_Descriptor cd_S33C8 = {  "S33C8", // class name
  0,0,//no base classes
  &(vtc_S33C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S33C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S33C8),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C7  : S33C8 {
  int s33c7f0[2];
  void *s33c7f1;
  int s33c7f2[2];
  ::S287C8_nt s33c7f3;
  ::S287C8_nt s33c7f4;
  ::S2121C38 s33c7f5;
  ::S287C8_nt s33c7f6;
  unsigned int s33c7f7:1;
  unsigned int s33c7f8:1;
  unsigned int s33c7f9:1;
  unsigned int s33c7f10:1;
  unsigned int s33c7f11:1;
  int s33c7f12[2];
  virtual  ~S33C7(); // _ZN5S33C7D1Ev
  virtual void  v68(); // _ZN5S33C73v68Ev
  virtual void  v69(); // _ZN5S33C73v69Ev
  virtual void  v70(); // _ZN5S33C73v70Ev
  virtual void  v71(); // _ZN5S33C73v71Ev
  virtual void  v72(); // _ZN5S33C73v72Ev
  virtual void  v73(); // _ZN5S33C73v73Ev
  virtual void  v74(); // _ZN5S33C73v74Ev
  virtual void  v75(); // _ZN5S33C73v75Ev
  virtual void  v76(); // _ZN5S33C73v76Ev
  virtual void  v77(); // _ZN5S33C73v77Ev
  virtual void  v78(); // _ZN5S33C73v78Ev
  virtual void  v79(); // _ZN5S33C73v79Ev
  virtual void  v80(); // _ZN5S33C73v80Ev
  virtual void  v81(); // _ZN5S33C73v81Ev
  virtual void  v82(); // _ZN5S33C73v82Ev
  virtual void  v83(); // _ZN5S33C73v83Ev
  virtual void  v84(); // _ZN5S33C73v84Ev
  virtual void  v85(); // _ZN5S33C73v85Ev
  virtual void  v86(); // _ZN5S33C73v86Ev
  virtual void  v87(); // _ZN5S33C73v87Ev
  virtual void  v88(); // _ZN5S33C73v88Ev
  virtual void  v89(); // _ZN5S33C73v89Ev
  S33C7(); // tgen
};
//SIG(-1 S33C7) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S33C7 ::~S33C7(){ note_dtor("S33C7", this);}
void  S33C7 ::v68(){vfunc_called(this, "_ZN5S33C73v68Ev");}
void  S33C7 ::v69(){vfunc_called(this, "_ZN5S33C73v69Ev");}
void  S33C7 ::v70(){vfunc_called(this, "_ZN5S33C73v70Ev");}
void  S33C7 ::v71(){vfunc_called(this, "_ZN5S33C73v71Ev");}
void  S33C7 ::v72(){vfunc_called(this, "_ZN5S33C73v72Ev");}
void  S33C7 ::v73(){vfunc_called(this, "_ZN5S33C73v73Ev");}
void  S33C7 ::v74(){vfunc_called(this, "_ZN5S33C73v74Ev");}
void  S33C7 ::v75(){vfunc_called(this, "_ZN5S33C73v75Ev");}
void  S33C7 ::v76(){vfunc_called(this, "_ZN5S33C73v76Ev");}
void  S33C7 ::v77(){vfunc_called(this, "_ZN5S33C73v77Ev");}
void  S33C7 ::v78(){vfunc_called(this, "_ZN5S33C73v78Ev");}
void  S33C7 ::v79(){vfunc_called(this, "_ZN5S33C73v79Ev");}
void  S33C7 ::v80(){vfunc_called(this, "_ZN5S33C73v80Ev");}
void  S33C7 ::v81(){vfunc_called(this, "_ZN5S33C73v81Ev");}
void  S33C7 ::v82(){vfunc_called(this, "_ZN5S33C73v82Ev");}
void  S33C7 ::v83(){vfunc_called(this, "_ZN5S33C73v83Ev");}
void  S33C7 ::v84(){vfunc_called(this, "_ZN5S33C73v84Ev");}
void  S33C7 ::v85(){vfunc_called(this, "_ZN5S33C73v85Ev");}
void  S33C7 ::v86(){vfunc_called(this, "_ZN5S33C73v86Ev");}
void  S33C7 ::v87(){vfunc_called(this, "_ZN5S33C73v87Ev");}
void  S33C7 ::v88(){vfunc_called(this, "_ZN5S33C73v88Ev");}
void  S33C7 ::v89(){vfunc_called(this, "_ZN5S33C73v89Ev");}
S33C7 ::S33C7(){ note_ctor("S33C7", this);} // tgen

static void Test_S33C7()
{
  extern Class_Descriptor cd_S33C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S33C7, buf);
    S33C7 *dp, &lv = *(dp=new (buf) S33C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S33C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C7)");
    check_base_class_offset(lv, (S33C8*), 0, "S33C7");
    check_field_offset(lv, s33c7f0, ABISELECT(96,60), "S33C7.s33c7f0");
    check_field_offset(lv, s33c7f1, ABISELECT(104,68), "S33C7.s33c7f1");
    check_field_offset(lv, s33c7f2, ABISELECT(112,72), "S33C7.s33c7f2");
    check_field_offset(lv, s33c7f3, ABISELECT(120,80), "S33C7.s33c7f3");
    check_field_offset(lv, s33c7f4, ABISELECT(136,92), "S33C7.s33c7f4");
    check_field_offset(lv, s33c7f5, ABISELECT(152,104), "S33C7.s33c7f5");
    check_field_offset(lv, s33c7f6, ABISELECT(160,108), "S33C7.s33c7f6");
    set_bf_and_test(lv, s33c7f7, ABISELECT(176,120), 0, 1, 1, "S33C7");
    set_bf_and_test(lv, s33c7f8, ABISELECT(176,120), 1, 1, 1, "S33C7");
    set_bf_and_test(lv, s33c7f9, ABISELECT(176,120), 2, 1, 1, "S33C7");
    set_bf_and_test(lv, s33c7f10, ABISELECT(176,120), 3, 1, 1, "S33C7");
    set_bf_and_test(lv, s33c7f11, ABISELECT(176,120), 4, 1, 1, "S33C7");
    check_field_offset(lv, s33c7f12, ABISELECT(180,124), "S33C7.s33c7f12");
    test_class_info(&lv, &cd_S33C7);
    dp->~S33C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C7(Test_S33C7, "S33C7", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S33C7C1Ev();
extern void _ZN5S33C7D1Ev();
Name_Map name_map_S33C7[] = {
  NSPAIR(_ZN5S33C7C1Ev),
  NSPAIR(_ZN5S33C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
static Base_Class bases_S33C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S33C7[];
extern void _ZN5S33C7D1Ev();
extern void _ZN5S33C7D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
static  VTBL_ENTRY vtc_S33C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C7[0]),
  (VTBL_ENTRY)&_ZN5S33C7D1Ev,
  (VTBL_ENTRY)&_ZN5S33C7D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
};
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
Class_Descriptor cd_S33C7 = {  "S33C7", // class name
  bases_S33C7, 1,
  &(vtc_S33C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S33C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C7),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C6  : S33C7 {
  unsigned int s33c6f0:1;
  unsigned int s33c6f1:1;
  unsigned int s33c6f2:1;
  ::S3350C17 s33c6f3;
  ::S3350C11 s33c6f4;
  ::S3350C5_nt s33c6f5;
  ::S287C27 s33c6f6;
  int s33c6f7[3];
  virtual  ~S33C6(); // _ZN5S33C6D1Ev
  virtual void  v90(); // _ZN5S33C63v90Ev
  virtual void  v91(); // _ZN5S33C63v91Ev
  virtual void  v92(); // _ZN5S33C63v92Ev
  virtual void  v93(); // _ZN5S33C63v93Ev
  virtual void  v94(); // _ZN5S33C63v94Ev
  virtual void  v95(); // _ZN5S33C63v95Ev
  virtual void  v96(); // _ZN5S33C63v96Ev
  virtual void  v97(); // _ZN5S33C63v97Ev
  virtual void  v98(); // _ZN5S33C63v98Ev
  virtual void  v99(); // _ZN5S33C63v99Ev
  virtual void  v100(); // _ZN5S33C64v100Ev
  virtual void  v101(); // _ZN5S33C64v101Ev
  virtual void  v102(); // _ZN5S33C64v102Ev
  virtual void  v103(); // _ZN5S33C64v103Ev
  virtual void  v104(); // _ZN5S33C64v104Ev
  virtual void  v105(); // _ZN5S33C64v105Ev
  virtual void  v106(); // _ZN5S33C64v106Ev
  virtual void  v107(); // _ZN5S33C64v107Ev
  virtual void  v108(); // _ZN5S33C64v108Ev
  virtual void  v109(); // _ZN5S33C64v109Ev
  S33C6(); // tgen
};
//SIG(-1 S33C6) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S33C6 ::~S33C6(){ note_dtor("S33C6", this);}
void  S33C6 ::v90(){vfunc_called(this, "_ZN5S33C63v90Ev");}
void  S33C6 ::v91(){vfunc_called(this, "_ZN5S33C63v91Ev");}
void  S33C6 ::v92(){vfunc_called(this, "_ZN5S33C63v92Ev");}
void  S33C6 ::v93(){vfunc_called(this, "_ZN5S33C63v93Ev");}
void  S33C6 ::v94(){vfunc_called(this, "_ZN5S33C63v94Ev");}
void  S33C6 ::v95(){vfunc_called(this, "_ZN5S33C63v95Ev");}
void  S33C6 ::v96(){vfunc_called(this, "_ZN5S33C63v96Ev");}
void  S33C6 ::v97(){vfunc_called(this, "_ZN5S33C63v97Ev");}
void  S33C6 ::v98(){vfunc_called(this, "_ZN5S33C63v98Ev");}
void  S33C6 ::v99(){vfunc_called(this, "_ZN5S33C63v99Ev");}
void  S33C6 ::v100(){vfunc_called(this, "_ZN5S33C64v100Ev");}
void  S33C6 ::v101(){vfunc_called(this, "_ZN5S33C64v101Ev");}
void  S33C6 ::v102(){vfunc_called(this, "_ZN5S33C64v102Ev");}
void  S33C6 ::v103(){vfunc_called(this, "_ZN5S33C64v103Ev");}
void  S33C6 ::v104(){vfunc_called(this, "_ZN5S33C64v104Ev");}
void  S33C6 ::v105(){vfunc_called(this, "_ZN5S33C64v105Ev");}
void  S33C6 ::v106(){vfunc_called(this, "_ZN5S33C64v106Ev");}
void  S33C6 ::v107(){vfunc_called(this, "_ZN5S33C64v107Ev");}
void  S33C6 ::v108(){vfunc_called(this, "_ZN5S33C64v108Ev");}
void  S33C6 ::v109(){vfunc_called(this, "_ZN5S33C64v109Ev");}
S33C6 ::S33C6(){ note_ctor("S33C6", this);} // tgen

static void Test_S33C6()
{
  extern Class_Descriptor cd_S33C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S33C6, buf);
    S33C6 *dp, &lv = *(dp=new (buf) S33C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S33C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C6)");
    check_base_class_offset(lv, (S33C8*)(S33C7*), 0, "S33C6");
    check_base_class_offset(lv, (S33C7*), 0, "S33C6");
    set_bf_and_test(lv, s33c6f0, ABISELECT(188,132), 0, 1, 1, "S33C6");
    set_bf_and_test(lv, s33c6f1, ABISELECT(188,132), 1, 1, 1, "S33C6");
    set_bf_and_test(lv, s33c6f2, ABISELECT(188,132), 2, 1, 1, "S33C6");
    check_field_offset(lv, s33c6f3, ABISELECT(192,136), "S33C6.s33c6f3");
    check_field_offset(lv, s33c6f4, ABISELECT(208,148), "S33C6.s33c6f4");
    check_field_offset(lv, s33c6f5, ABISELECT(224,160), "S33C6.s33c6f5");
    check_field_offset(lv, s33c6f6, ABISELECT(240,172), "S33C6.s33c6f6");
    check_field_offset(lv, s33c6f7, ABISELECT(256,184), "S33C6.s33c6f7");
    test_class_info(&lv, &cd_S33C6);
    dp->~S33C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C6(Test_S33C6, "S33C6", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S33C6C1Ev();
extern void _ZN5S33C6D1Ev();
Name_Map name_map_S33C6[] = {
  NSPAIR(_ZN5S33C6C1Ev),
  NSPAIR(_ZN5S33C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
static Base_Class bases_S33C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S33C6[];
extern void _ZN5S33C6D1Ev();
extern void _ZN5S33C6D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
static  VTBL_ENTRY vtc_S33C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C6[0]),
  (VTBL_ENTRY)&_ZN5S33C6D1Ev,
  (VTBL_ENTRY)&_ZN5S33C6D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
};
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
Class_Descriptor cd_S33C6 = {  "S33C6", // class name
  bases_S33C6, 2,
  &(vtc_S33C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S33C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C6),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C5  : S33C6 {
  ::S3350C4_nt s33c5f0;
  unsigned int s33c5f1:1;
  ::S287C23 s33c5f2;
  virtual  ~S33C5(); // _ZN5S33C5D1Ev
  virtual void  v110(); // _ZN5S33C54v110Ev
  virtual void  v111(); // _ZN5S33C54v111Ev
  virtual void  v112(); // _ZN5S33C54v112Ev
  virtual void  v113(); // _ZN5S33C54v113Ev
  S33C5(); // tgen
};
//SIG(-1 S33C5) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S33C5 ::~S33C5(){ note_dtor("S33C5", this);}
void  S33C5 ::v110(){vfunc_called(this, "_ZN5S33C54v110Ev");}
void  S33C5 ::v111(){vfunc_called(this, "_ZN5S33C54v111Ev");}
void  S33C5 ::v112(){vfunc_called(this, "_ZN5S33C54v112Ev");}
void  S33C5 ::v113(){vfunc_called(this, "_ZN5S33C54v113Ev");}
S33C5 ::S33C5(){ note_ctor("S33C5", this);} // tgen

static void Test_S33C5()
{
  extern Class_Descriptor cd_S33C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S33C5, buf);
    S33C5 *dp, &lv = *(dp=new (buf) S33C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S33C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C5)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*), 0, "S33C5");
    check_base_class_offset(lv, (S33C7*)(S33C6*), 0, "S33C5");
    check_base_class_offset(lv, (S33C6*), 0, "S33C5");
    check_field_offset(lv, s33c5f0, ABISELECT(268,196), "S33C5.s33c5f0");
    set_bf_and_test(lv, s33c5f1, ABISELECT(276,204), 0, 1, 1, "S33C5");
    check_field_offset(lv, s33c5f2, ABISELECT(280,208), "S33C5.s33c5f2");
    test_class_info(&lv, &cd_S33C5);
    dp->~S33C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C5(Test_S33C5, "S33C5", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S33C5C1Ev();
extern void _ZN5S33C5D1Ev();
Name_Map name_map_S33C5[] = {
  NSPAIR(_ZN5S33C5C1Ev),
  NSPAIR(_ZN5S33C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
static Base_Class bases_S33C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S33C5[];
extern void _ZN5S33C5D1Ev();
extern void _ZN5S33C5D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
static  VTBL_ENTRY vtc_S33C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C5[0]),
  (VTBL_ENTRY)&_ZN5S33C5D1Ev,
  (VTBL_ENTRY)&_ZN5S33C5D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
};
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
Class_Descriptor cd_S33C5 = {  "S33C5", // class name
  bases_S33C5, 3,
  &(vtc_S33C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S33C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C5),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C4  : S33C5 {
  int s33c4f0;
  unsigned int s33c4f1:1;
  virtual  ~S33C4(); // _ZN5S33C4D1Ev
  virtual void  v114(); // _ZN5S33C44v114Ev
  virtual void  v115(); // _ZN5S33C44v115Ev
  virtual void  v116(); // _ZN5S33C44v116Ev
  virtual void  v117(); // _ZN5S33C44v117Ev
  virtual void  v118(); // _ZN5S33C44v118Ev
  virtual void  v119(); // _ZN5S33C44v119Ev
  virtual void  v120(); // _ZN5S33C44v120Ev
  virtual void  v121(); // _ZN5S33C44v121Ev
  S33C4(); // tgen
};
//SIG(-1 S33C4) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S33C4 ::~S33C4(){ note_dtor("S33C4", this);}
void  S33C4 ::v114(){vfunc_called(this, "_ZN5S33C44v114Ev");}
void  S33C4 ::v115(){vfunc_called(this, "_ZN5S33C44v115Ev");}
void  S33C4 ::v116(){vfunc_called(this, "_ZN5S33C44v116Ev");}
void  S33C4 ::v117(){vfunc_called(this, "_ZN5S33C44v117Ev");}
void  S33C4 ::v118(){vfunc_called(this, "_ZN5S33C44v118Ev");}
void  S33C4 ::v119(){vfunc_called(this, "_ZN5S33C44v119Ev");}
void  S33C4 ::v120(){vfunc_called(this, "_ZN5S33C44v120Ev");}
void  S33C4 ::v121(){vfunc_called(this, "_ZN5S33C44v121Ev");}
S33C4 ::S33C4(){ note_ctor("S33C4", this);} // tgen

static void Test_S33C4()
{
  extern Class_Descriptor cd_S33C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S33C4, buf);
    S33C4 *dp, &lv = *(dp=new (buf) S33C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S33C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C4)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*)(S33C5*), 0, "S33C4");
    check_base_class_offset(lv, (S33C7*)(S33C6*)(S33C5*), 0, "S33C4");
    check_base_class_offset(lv, (S33C6*)(S33C5*), 0, "S33C4");
    check_base_class_offset(lv, (S33C5*), 0, "S33C4");
    check_field_offset(lv, s33c4f0, ABISELECT(296,220), "S33C4.s33c4f0");
    set_bf_and_test(lv, s33c4f1, ABISELECT(300,224), 0, 1, 1, "S33C4");
    test_class_info(&lv, &cd_S33C4);
    dp->~S33C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C4(Test_S33C4, "S33C4", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S33C4C1Ev();
extern void _ZN5S33C4D1Ev();
Name_Map name_map_S33C4[] = {
  NSPAIR(_ZN5S33C4C1Ev),
  NSPAIR(_ZN5S33C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
extern Class_Descriptor cd_S33C5;
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
static Base_Class bases_S33C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S33C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S33C4[];
extern void _ZN5S33C4D1Ev();
extern void _ZN5S33C4D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
extern void _ZN5S33C44v114Ev();
extern void _ZN5S33C44v115Ev();
extern void _ZN5S33C44v116Ev();
extern void _ZN5S33C44v117Ev();
extern void _ZN5S33C44v118Ev();
extern void _ZN5S33C44v119Ev();
extern void _ZN5S33C44v120Ev();
extern void _ZN5S33C44v121Ev();
static  VTBL_ENTRY vtc_S33C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C4[0]),
  (VTBL_ENTRY)&_ZN5S33C4D1Ev,
  (VTBL_ENTRY)&_ZN5S33C4D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
  (VTBL_ENTRY)&_ZN5S33C44v114Ev,
  (VTBL_ENTRY)&_ZN5S33C44v115Ev,
  (VTBL_ENTRY)&_ZN5S33C44v116Ev,
  (VTBL_ENTRY)&_ZN5S33C44v117Ev,
  (VTBL_ENTRY)&_ZN5S33C44v118Ev,
  (VTBL_ENTRY)&_ZN5S33C44v119Ev,
  (VTBL_ENTRY)&_ZN5S33C44v120Ev,
  (VTBL_ENTRY)&_ZN5S33C44v121Ev,
};
extern VTBL_ENTRY _ZTI5S33C4[];
extern  VTBL_ENTRY _ZTV5S33C4[];
Class_Descriptor cd_S33C4 = {  "S33C4", // class name
  bases_S33C4, 4,
  &(vtc_S33C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S33C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C4),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C3  : S33C4 {
  int s33c3f0;
  virtual  ~S33C3(); // _ZN5S33C3D1Ev
  virtual void  v122(); // _ZN5S33C34v122Ev
  virtual void  v123(); // _ZN5S33C34v123Ev
  S33C3(); // tgen
};
//SIG(-1 S33C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S33C3 ::~S33C3(){ note_dtor("S33C3", this);}
void  S33C3 ::v122(){vfunc_called(this, "_ZN5S33C34v122Ev");}
void  S33C3 ::v123(){vfunc_called(this, "_ZN5S33C34v123Ev");}
S33C3 ::S33C3(){ note_ctor("S33C3", this);} // tgen

static void Test_S33C3()
{
  extern Class_Descriptor cd_S33C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S33C3, buf);
    S33C3 *dp, &lv = *(dp=new (buf) S33C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S33C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C3)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*)(S33C5*)(S33C4*), 0, "S33C3");
    check_base_class_offset(lv, (S33C7*)(S33C6*)(S33C5*)(S33C4*), 0, "S33C3");
    check_base_class_offset(lv, (S33C6*)(S33C5*)(S33C4*), 0, "S33C3");
    check_base_class_offset(lv, (S33C5*)(S33C4*), 0, "S33C3");
    check_base_class_offset(lv, (S33C4*), 0, "S33C3");
    check_field_offset(lv, s33c3f0, ABISELECT(304,228), "S33C3.s33c3f0");
    test_class_info(&lv, &cd_S33C3);
    dp->~S33C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C3(Test_S33C3, "S33C3", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S33C3C1Ev();
extern void _ZN5S33C3D1Ev();
Name_Map name_map_S33C3[] = {
  NSPAIR(_ZN5S33C3C1Ev),
  NSPAIR(_ZN5S33C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
extern Class_Descriptor cd_S33C5;
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
extern Class_Descriptor cd_S33C4;
extern VTBL_ENTRY _ZTI5S33C4[];
extern  VTBL_ENTRY _ZTV5S33C4[];
static Base_Class bases_S33C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S33C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S33C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S33C3[];
extern void _ZN5S33C3D1Ev();
extern void _ZN5S33C3D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
extern void _ZN5S33C44v114Ev();
extern void _ZN5S33C44v115Ev();
extern void _ZN5S33C44v116Ev();
extern void _ZN5S33C44v117Ev();
extern void _ZN5S33C44v118Ev();
extern void _ZN5S33C44v119Ev();
extern void _ZN5S33C44v120Ev();
extern void _ZN5S33C44v121Ev();
extern void _ZN5S33C34v122Ev();
extern void _ZN5S33C34v123Ev();
static  VTBL_ENTRY vtc_S33C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C3[0]),
  (VTBL_ENTRY)&_ZN5S33C3D1Ev,
  (VTBL_ENTRY)&_ZN5S33C3D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
  (VTBL_ENTRY)&_ZN5S33C44v114Ev,
  (VTBL_ENTRY)&_ZN5S33C44v115Ev,
  (VTBL_ENTRY)&_ZN5S33C44v116Ev,
  (VTBL_ENTRY)&_ZN5S33C44v117Ev,
  (VTBL_ENTRY)&_ZN5S33C44v118Ev,
  (VTBL_ENTRY)&_ZN5S33C44v119Ev,
  (VTBL_ENTRY)&_ZN5S33C44v120Ev,
  (VTBL_ENTRY)&_ZN5S33C44v121Ev,
  (VTBL_ENTRY)&_ZN5S33C34v122Ev,
  (VTBL_ENTRY)&_ZN5S33C34v123Ev,
};
extern VTBL_ENTRY _ZTI5S33C3[];
extern  VTBL_ENTRY _ZTV5S33C3[];
Class_Descriptor cd_S33C3 = {  "S33C3", // class name
  bases_S33C3, 5,
  &(vtc_S33C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S33C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C3),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C2  : S33C3 {
  void *s33c2f0;
  ::S287C8_nt s33c2f1;
  virtual  ~S33C2(); // _ZN5S33C2D1Ev
  virtual void  v124(); // _ZN5S33C24v124Ev
  virtual void  v125(); // _ZN5S33C24v125Ev
  S33C2(); // tgen
};
//SIG(-1 S33C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v121 v122 Fi} vd v1 v2 Fp FC9}


 S33C2 ::~S33C2(){ note_dtor("S33C2", this);}
void  S33C2 ::v124(){vfunc_called(this, "_ZN5S33C24v124Ev");}
void  S33C2 ::v125(){vfunc_called(this, "_ZN5S33C24v125Ev");}
S33C2 ::S33C2(){ note_ctor("S33C2", this);} // tgen

static void Test_S33C2()
{
  extern Class_Descriptor cd_S33C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S33C2, buf);
    S33C2 *dp, &lv = *(dp=new (buf) S33C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S33C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C2)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*)(S33C5*)(S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C7*)(S33C6*)(S33C5*)(S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C6*)(S33C5*)(S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C5*)(S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C4*)(S33C3*), 0, "S33C2");
    check_base_class_offset(lv, (S33C3*), 0, "S33C2");
    check_field_offset(lv, s33c2f0, ABISELECT(312,232), "S33C2.s33c2f0");
    check_field_offset(lv, s33c2f1, ABISELECT(320,236), "S33C2.s33c2f1");
    test_class_info(&lv, &cd_S33C2);
    dp->~S33C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C2(Test_S33C2, "S33C2", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN5S33C2C1Ev();
extern void _ZN5S33C2D1Ev();
Name_Map name_map_S33C2[] = {
  NSPAIR(_ZN5S33C2C1Ev),
  NSPAIR(_ZN5S33C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
extern Class_Descriptor cd_S33C5;
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
extern Class_Descriptor cd_S33C4;
extern VTBL_ENTRY _ZTI5S33C4[];
extern  VTBL_ENTRY _ZTV5S33C4[];
extern Class_Descriptor cd_S33C3;
extern VTBL_ENTRY _ZTI5S33C3[];
extern  VTBL_ENTRY _ZTV5S33C3[];
static Base_Class bases_S33C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S33C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S33C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S33C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S33C2[];
extern void _ZN5S33C2D1Ev();
extern void _ZN5S33C2D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
extern void _ZN5S33C44v114Ev();
extern void _ZN5S33C44v115Ev();
extern void _ZN5S33C44v116Ev();
extern void _ZN5S33C44v117Ev();
extern void _ZN5S33C44v118Ev();
extern void _ZN5S33C44v119Ev();
extern void _ZN5S33C44v120Ev();
extern void _ZN5S33C44v121Ev();
extern void _ZN5S33C34v122Ev();
extern void _ZN5S33C34v123Ev();
extern void _ZN5S33C24v124Ev();
extern void _ZN5S33C24v125Ev();
static  VTBL_ENTRY vtc_S33C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C2[0]),
  (VTBL_ENTRY)&_ZN5S33C2D1Ev,
  (VTBL_ENTRY)&_ZN5S33C2D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
  (VTBL_ENTRY)&_ZN5S33C44v114Ev,
  (VTBL_ENTRY)&_ZN5S33C44v115Ev,
  (VTBL_ENTRY)&_ZN5S33C44v116Ev,
  (VTBL_ENTRY)&_ZN5S33C44v117Ev,
  (VTBL_ENTRY)&_ZN5S33C44v118Ev,
  (VTBL_ENTRY)&_ZN5S33C44v119Ev,
  (VTBL_ENTRY)&_ZN5S33C44v120Ev,
  (VTBL_ENTRY)&_ZN5S33C44v121Ev,
  (VTBL_ENTRY)&_ZN5S33C34v122Ev,
  (VTBL_ENTRY)&_ZN5S33C34v123Ev,
  (VTBL_ENTRY)&_ZN5S33C24v124Ev,
  (VTBL_ENTRY)&_ZN5S33C24v125Ev,
};
extern VTBL_ENTRY _ZTI5S33C2[];
extern  VTBL_ENTRY _ZTV5S33C2[];
Class_Descriptor cd_S33C2 = {  "S33C2", // class name
  bases_S33C2, 6,
  &(vtc_S33C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI5S33C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S33C1  : S33C2 {
  ::S287C8_nt s33c1f0;
  void *s33c1f1;
  ::S287C19 s33c1f2;
  ::S32C27_nt s33c1f3;
  virtual  ~S33C1(); // _ZN5S33C1D1Ev
  virtual void  v1(); // _ZN5S33C12v1Ev
  virtual void  v2(); // _ZN5S33C12v2Ev
  virtual void  v3(); // _ZN5S33C12v3Ev
  S33C1(); // tgen
};
//SIG(1 S33C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC9{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC10{ BC11{ BC12{ BC13{ m Fp Fi[2]}}}} FC10 FC14{ m} FC10 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC15{ BC16{ BC13}} FC17{ BC18{ BC13}} FC19{ BC20{ BC13}} FC21{ BC22{ BC13}} Fi[3]} vd v110 v111 v112 v113 FC9 Fi:1 FC23{ BC24{ BC13}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v124 v125 Fp FC10} vd v1 v2 v3 FC10 Fp FC25{ BC26{ BC13}} FC27{ m Fi[4] Fi:1}}


 S33C1 ::~S33C1(){ note_dtor("S33C1", this);}
void  S33C1 ::v1(){vfunc_called(this, "_ZN5S33C12v1Ev");}
void  S33C1 ::v2(){vfunc_called(this, "_ZN5S33C12v2Ev");}
void  S33C1 ::v3(){vfunc_called(this, "_ZN5S33C12v3Ev");}
S33C1 ::S33C1(){ note_ctor("S33C1", this);} // tgen

static void Test_S33C1()
{
  extern Class_Descriptor cd_S33C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,75)];
    init_test(&cd_S33C1, buf);
    S33C1 *dp, &lv = *(dp=new (buf) S33C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,296), "sizeof(S33C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S33C1)");
    check_base_class_offset(lv, (S33C8*)(S33C7*)(S33C6*)(S33C5*)(S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C7*)(S33C6*)(S33C5*)(S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C6*)(S33C5*)(S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C5*)(S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C4*)(S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C3*)(S33C2*), 0, "S33C1");
    check_base_class_offset(lv, (S33C2*), 0, "S33C1");
    check_field_offset(lv, s33c1f0, ABISELECT(336,248), "S33C1.s33c1f0");
    check_field_offset(lv, s33c1f1, ABISELECT(352,260), "S33C1.s33c1f1");
    check_field_offset(lv, s33c1f2, ABISELECT(360,264), "S33C1.s33c1f2");
    check_field_offset(lv, s33c1f3, ABISELECT(376,276), "S33C1.s33c1f3");
    test_class_info(&lv, &cd_S33C1);
    dp->~S33C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS33C1(Test_S33C1, "S33C1", ABISELECT(400,296));

#else // __cplusplus

extern void _ZN5S33C1C1Ev();
extern void _ZN5S33C1D1Ev();
Name_Map name_map_S33C1[] = {
  NSPAIR(_ZN5S33C1C1Ev),
  NSPAIR(_ZN5S33C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S33C8;
extern VTBL_ENTRY _ZTI5S33C8[];
extern  VTBL_ENTRY _ZTV5S33C8[];
extern Class_Descriptor cd_S33C7;
extern VTBL_ENTRY _ZTI5S33C7[];
extern  VTBL_ENTRY _ZTV5S33C7[];
extern Class_Descriptor cd_S33C6;
extern VTBL_ENTRY _ZTI5S33C6[];
extern  VTBL_ENTRY _ZTV5S33C6[];
extern Class_Descriptor cd_S33C5;
extern VTBL_ENTRY _ZTI5S33C5[];
extern  VTBL_ENTRY _ZTV5S33C5[];
extern Class_Descriptor cd_S33C4;
extern VTBL_ENTRY _ZTI5S33C4[];
extern  VTBL_ENTRY _ZTV5S33C4[];
extern Class_Descriptor cd_S33C3;
extern VTBL_ENTRY _ZTI5S33C3[];
extern  VTBL_ENTRY _ZTV5S33C3[];
extern Class_Descriptor cd_S33C2;
extern VTBL_ENTRY _ZTI5S33C2[];
extern  VTBL_ENTRY _ZTV5S33C2[];
static Base_Class bases_S33C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S33C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S33C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S33C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S33C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S33C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S33C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S33C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S33C1[];
extern void _ZN5S33C1D1Ev();
extern void _ZN5S33C1D0Ev();
extern void _ZN5S33C82v4Ev();
extern void _ZN5S33C82v5Ev();
extern void _ZN5S33C82v6Ev();
extern void _ZN5S33C82v7Ev();
extern void _ZN5S33C82v8Ev();
extern void _ZN5S33C82v9Ev();
extern void _ZN5S33C83v10Ev();
extern void _ZN5S33C83v11Ev();
extern void _ZN5S33C83v12Ev();
extern void _ZN5S33C83v13Ev();
extern void _ZN5S33C83v14Ev();
extern void _ZN5S33C83v15Ev();
extern void _ZN5S33C83v16Ev();
extern void _ZN5S33C83v17Ev();
extern void _ZN5S33C83v18Ev();
extern void _ZN5S33C83v19Ev();
extern void _ZN5S33C83v20Ev();
extern void _ZN5S33C83v21Ev();
extern void _ZN5S33C83v22Ev();
extern void _ZN5S33C83v23Ev();
extern void _ZN5S33C83v24Ev();
extern void _ZN5S33C83v25Ev();
extern void _ZN5S33C83v26Ev();
extern void _ZN5S33C83v27Ev();
extern void _ZN5S33C83v28Ev();
extern void _ZN5S33C83v29Ev();
extern void _ZN5S33C83v30Ev();
extern void _ZN5S33C83v31Ev();
extern void _ZN5S33C83v32Ev();
extern void _ZN5S33C83v33Ev();
extern void _ZN5S33C83v34Ev();
extern void _ZN5S33C83v35Ev();
extern void _ZN5S33C83v36Ev();
extern void _ZN5S33C83v37Ev();
extern void _ZN5S33C83v38Ev();
extern void _ZN5S33C83v39Ev();
extern void _ZN5S33C83v40Ev();
extern void _ZN5S33C83v41Ev();
extern void _ZN5S33C83v42Ev();
extern void _ZN5S33C83v43Ev();
extern void _ZN5S33C83v44Ev();
extern void _ZN5S33C83v45Ev();
extern void _ZN5S33C83v46Ev();
extern void _ZN5S33C83v47Ev();
extern void _ZN5S33C83v48Ev();
extern void _ZN5S33C83v49Ev();
extern void _ZN5S33C83v50Ev();
extern void _ZN5S33C83v51Ev();
extern void _ZN5S33C83v52Ev();
extern void _ZN5S33C83v53Ev();
extern void _ZN5S33C83v54Ev();
extern void _ZN5S33C83v55Ev();
extern void _ZN5S33C83v56Ev();
extern void _ZN5S33C83v57Ev();
extern void _ZN5S33C83v58Ev();
extern void _ZN5S33C83v59Ev();
extern void _ZN5S33C83v60Ev();
extern void _ZN5S33C83v61Ev();
extern void _ZN5S33C83v62Ev();
extern void _ZN5S33C83v63Ev();
extern void _ZN5S33C83v64Ev();
extern void _ZN5S33C83v65Ev();
extern void _ZN5S33C83v66Ev();
extern void _ZN5S33C83v67Ev();
extern void _ZN5S33C73v68Ev();
extern void _ZN5S33C73v69Ev();
extern void _ZN5S33C73v70Ev();
extern void _ZN5S33C73v71Ev();
extern void _ZN5S33C73v72Ev();
extern void _ZN5S33C73v73Ev();
extern void _ZN5S33C73v74Ev();
extern void _ZN5S33C73v75Ev();
extern void _ZN5S33C73v76Ev();
extern void _ZN5S33C73v77Ev();
extern void _ZN5S33C73v78Ev();
extern void _ZN5S33C73v79Ev();
extern void _ZN5S33C73v80Ev();
extern void _ZN5S33C73v81Ev();
extern void _ZN5S33C73v82Ev();
extern void _ZN5S33C73v83Ev();
extern void _ZN5S33C73v84Ev();
extern void _ZN5S33C73v85Ev();
extern void _ZN5S33C73v86Ev();
extern void _ZN5S33C73v87Ev();
extern void _ZN5S33C73v88Ev();
extern void _ZN5S33C73v89Ev();
extern void _ZN5S33C63v90Ev();
extern void _ZN5S33C63v91Ev();
extern void _ZN5S33C63v92Ev();
extern void _ZN5S33C63v93Ev();
extern void _ZN5S33C63v94Ev();
extern void _ZN5S33C63v95Ev();
extern void _ZN5S33C63v96Ev();
extern void _ZN5S33C63v97Ev();
extern void _ZN5S33C63v98Ev();
extern void _ZN5S33C63v99Ev();
extern void _ZN5S33C64v100Ev();
extern void _ZN5S33C64v101Ev();
extern void _ZN5S33C64v102Ev();
extern void _ZN5S33C64v103Ev();
extern void _ZN5S33C64v104Ev();
extern void _ZN5S33C64v105Ev();
extern void _ZN5S33C64v106Ev();
extern void _ZN5S33C64v107Ev();
extern void _ZN5S33C64v108Ev();
extern void _ZN5S33C64v109Ev();
extern void _ZN5S33C54v110Ev();
extern void _ZN5S33C54v111Ev();
extern void _ZN5S33C54v112Ev();
extern void _ZN5S33C54v113Ev();
extern void _ZN5S33C44v114Ev();
extern void _ZN5S33C44v115Ev();
extern void _ZN5S33C44v116Ev();
extern void _ZN5S33C44v117Ev();
extern void _ZN5S33C44v118Ev();
extern void _ZN5S33C44v119Ev();
extern void _ZN5S33C44v120Ev();
extern void _ZN5S33C44v121Ev();
extern void _ZN5S33C34v122Ev();
extern void _ZN5S33C34v123Ev();
extern void _ZN5S33C24v124Ev();
extern void _ZN5S33C24v125Ev();
extern void _ZN5S33C12v1Ev();
extern void _ZN5S33C12v2Ev();
extern void _ZN5S33C12v3Ev();
static  VTBL_ENTRY vtc_S33C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S33C1[0]),
  (VTBL_ENTRY)&_ZN5S33C1D1Ev,
  (VTBL_ENTRY)&_ZN5S33C1D0Ev,
  (VTBL_ENTRY)&_ZN5S33C82v4Ev,
  (VTBL_ENTRY)&_ZN5S33C82v5Ev,
  (VTBL_ENTRY)&_ZN5S33C82v6Ev,
  (VTBL_ENTRY)&_ZN5S33C82v7Ev,
  (VTBL_ENTRY)&_ZN5S33C82v8Ev,
  (VTBL_ENTRY)&_ZN5S33C82v9Ev,
  (VTBL_ENTRY)&_ZN5S33C83v10Ev,
  (VTBL_ENTRY)&_ZN5S33C83v11Ev,
  (VTBL_ENTRY)&_ZN5S33C83v12Ev,
  (VTBL_ENTRY)&_ZN5S33C83v13Ev,
  (VTBL_ENTRY)&_ZN5S33C83v14Ev,
  (VTBL_ENTRY)&_ZN5S33C83v15Ev,
  (VTBL_ENTRY)&_ZN5S33C83v16Ev,
  (VTBL_ENTRY)&_ZN5S33C83v17Ev,
  (VTBL_ENTRY)&_ZN5S33C83v18Ev,
  (VTBL_ENTRY)&_ZN5S33C83v19Ev,
  (VTBL_ENTRY)&_ZN5S33C83v20Ev,
  (VTBL_ENTRY)&_ZN5S33C83v21Ev,
  (VTBL_ENTRY)&_ZN5S33C83v22Ev,
  (VTBL_ENTRY)&_ZN5S33C83v23Ev,
  (VTBL_ENTRY)&_ZN5S33C83v24Ev,
  (VTBL_ENTRY)&_ZN5S33C83v25Ev,
  (VTBL_ENTRY)&_ZN5S33C83v26Ev,
  (VTBL_ENTRY)&_ZN5S33C83v27Ev,
  (VTBL_ENTRY)&_ZN5S33C83v28Ev,
  (VTBL_ENTRY)&_ZN5S33C83v29Ev,
  (VTBL_ENTRY)&_ZN5S33C83v30Ev,
  (VTBL_ENTRY)&_ZN5S33C83v31Ev,
  (VTBL_ENTRY)&_ZN5S33C83v32Ev,
  (VTBL_ENTRY)&_ZN5S33C83v33Ev,
  (VTBL_ENTRY)&_ZN5S33C83v34Ev,
  (VTBL_ENTRY)&_ZN5S33C83v35Ev,
  (VTBL_ENTRY)&_ZN5S33C83v36Ev,
  (VTBL_ENTRY)&_ZN5S33C83v37Ev,
  (VTBL_ENTRY)&_ZN5S33C83v38Ev,
  (VTBL_ENTRY)&_ZN5S33C83v39Ev,
  (VTBL_ENTRY)&_ZN5S33C83v40Ev,
  (VTBL_ENTRY)&_ZN5S33C83v41Ev,
  (VTBL_ENTRY)&_ZN5S33C83v42Ev,
  (VTBL_ENTRY)&_ZN5S33C83v43Ev,
  (VTBL_ENTRY)&_ZN5S33C83v44Ev,
  (VTBL_ENTRY)&_ZN5S33C83v45Ev,
  (VTBL_ENTRY)&_ZN5S33C83v46Ev,
  (VTBL_ENTRY)&_ZN5S33C83v47Ev,
  (VTBL_ENTRY)&_ZN5S33C83v48Ev,
  (VTBL_ENTRY)&_ZN5S33C83v49Ev,
  (VTBL_ENTRY)&_ZN5S33C83v50Ev,
  (VTBL_ENTRY)&_ZN5S33C83v51Ev,
  (VTBL_ENTRY)&_ZN5S33C83v52Ev,
  (VTBL_ENTRY)&_ZN5S33C83v53Ev,
  (VTBL_ENTRY)&_ZN5S33C83v54Ev,
  (VTBL_ENTRY)&_ZN5S33C83v55Ev,
  (VTBL_ENTRY)&_ZN5S33C83v56Ev,
  (VTBL_ENTRY)&_ZN5S33C83v57Ev,
  (VTBL_ENTRY)&_ZN5S33C83v58Ev,
  (VTBL_ENTRY)&_ZN5S33C83v59Ev,
  (VTBL_ENTRY)&_ZN5S33C83v60Ev,
  (VTBL_ENTRY)&_ZN5S33C83v61Ev,
  (VTBL_ENTRY)&_ZN5S33C83v62Ev,
  (VTBL_ENTRY)&_ZN5S33C83v63Ev,
  (VTBL_ENTRY)&_ZN5S33C83v64Ev,
  (VTBL_ENTRY)&_ZN5S33C83v65Ev,
  (VTBL_ENTRY)&_ZN5S33C83v66Ev,
  (VTBL_ENTRY)&_ZN5S33C83v67Ev,
  (VTBL_ENTRY)&_ZN5S33C73v68Ev,
  (VTBL_ENTRY)&_ZN5S33C73v69Ev,
  (VTBL_ENTRY)&_ZN5S33C73v70Ev,
  (VTBL_ENTRY)&_ZN5S33C73v71Ev,
  (VTBL_ENTRY)&_ZN5S33C73v72Ev,
  (VTBL_ENTRY)&_ZN5S33C73v73Ev,
  (VTBL_ENTRY)&_ZN5S33C73v74Ev,
  (VTBL_ENTRY)&_ZN5S33C73v75Ev,
  (VTBL_ENTRY)&_ZN5S33C73v76Ev,
  (VTBL_ENTRY)&_ZN5S33C73v77Ev,
  (VTBL_ENTRY)&_ZN5S33C73v78Ev,
  (VTBL_ENTRY)&_ZN5S33C73v79Ev,
  (VTBL_ENTRY)&_ZN5S33C73v80Ev,
  (VTBL_ENTRY)&_ZN5S33C73v81Ev,
  (VTBL_ENTRY)&_ZN5S33C73v82Ev,
  (VTBL_ENTRY)&_ZN5S33C73v83Ev,
  (VTBL_ENTRY)&_ZN5S33C73v84Ev,
  (VTBL_ENTRY)&_ZN5S33C73v85Ev,
  (VTBL_ENTRY)&_ZN5S33C73v86Ev,
  (VTBL_ENTRY)&_ZN5S33C73v87Ev,
  (VTBL_ENTRY)&_ZN5S33C73v88Ev,
  (VTBL_ENTRY)&_ZN5S33C73v89Ev,
  (VTBL_ENTRY)&_ZN5S33C63v90Ev,
  (VTBL_ENTRY)&_ZN5S33C63v91Ev,
  (VTBL_ENTRY)&_ZN5S33C63v92Ev,
  (VTBL_ENTRY)&_ZN5S33C63v93Ev,
  (VTBL_ENTRY)&_ZN5S33C63v94Ev,
  (VTBL_ENTRY)&_ZN5S33C63v95Ev,
  (VTBL_ENTRY)&_ZN5S33C63v96Ev,
  (VTBL_ENTRY)&_ZN5S33C63v97Ev,
  (VTBL_ENTRY)&_ZN5S33C63v98Ev,
  (VTBL_ENTRY)&_ZN5S33C63v99Ev,
  (VTBL_ENTRY)&_ZN5S33C64v100Ev,
  (VTBL_ENTRY)&_ZN5S33C64v101Ev,
  (VTBL_ENTRY)&_ZN5S33C64v102Ev,
  (VTBL_ENTRY)&_ZN5S33C64v103Ev,
  (VTBL_ENTRY)&_ZN5S33C64v104Ev,
  (VTBL_ENTRY)&_ZN5S33C64v105Ev,
  (VTBL_ENTRY)&_ZN5S33C64v106Ev,
  (VTBL_ENTRY)&_ZN5S33C64v107Ev,
  (VTBL_ENTRY)&_ZN5S33C64v108Ev,
  (VTBL_ENTRY)&_ZN5S33C64v109Ev,
  (VTBL_ENTRY)&_ZN5S33C54v110Ev,
  (VTBL_ENTRY)&_ZN5S33C54v111Ev,
  (VTBL_ENTRY)&_ZN5S33C54v112Ev,
  (VTBL_ENTRY)&_ZN5S33C54v113Ev,
  (VTBL_ENTRY)&_ZN5S33C44v114Ev,
  (VTBL_ENTRY)&_ZN5S33C44v115Ev,
  (VTBL_ENTRY)&_ZN5S33C44v116Ev,
  (VTBL_ENTRY)&_ZN5S33C44v117Ev,
  (VTBL_ENTRY)&_ZN5S33C44v118Ev,
  (VTBL_ENTRY)&_ZN5S33C44v119Ev,
  (VTBL_ENTRY)&_ZN5S33C44v120Ev,
  (VTBL_ENTRY)&_ZN5S33C44v121Ev,
  (VTBL_ENTRY)&_ZN5S33C34v122Ev,
  (VTBL_ENTRY)&_ZN5S33C34v123Ev,
  (VTBL_ENTRY)&_ZN5S33C24v124Ev,
  (VTBL_ENTRY)&_ZN5S33C24v125Ev,
  (VTBL_ENTRY)&_ZN5S33C12v1Ev,
  (VTBL_ENTRY)&_ZN5S33C12v2Ev,
  (VTBL_ENTRY)&_ZN5S33C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S33C1[];
extern  VTBL_ENTRY _ZTV5S33C1[];
Class_Descriptor cd_S33C1 = {  "S33C1", // class name
  bases_S33C1, 7,
  &(vtc_S33C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,296), // object size
  NSPAIRA(_ZTI5S33C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S33C1),129, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C7  {
  int s98c7f0;
  __tsi64 s98c7f1;
  void *s98c7f2[4];
  int s98c7f3[2];
  void *s98c7f4;
  ::S3350C4_nt s98c7f5;
  void *s98c7f6[2];
  virtual  ~S98C7(); // _ZN5S98C7D1Ev
  virtual void  v5(); // _ZN5S98C72v5Ev
  virtual void  v6(); // _ZN5S98C72v6Ev
  virtual void  v7(); // _ZN5S98C72v7Ev
  virtual void  v8(); // _ZN5S98C72v8Ev
  virtual void  v9(); // _ZN5S98C72v9Ev
  virtual void  v10(); // _ZN5S98C73v10Ev
  virtual void  v11(); // _ZN5S98C73v11Ev
  virtual void  v12(); // _ZN5S98C73v12Ev
  virtual void  v13(); // _ZN5S98C73v13Ev
  virtual void  v14(); // _ZN5S98C73v14Ev
  virtual void  v15(); // _ZN5S98C73v15Ev
  virtual void  v16(); // _ZN5S98C73v16Ev
  virtual void  v17(); // _ZN5S98C73v17Ev
  virtual void  v18(); // _ZN5S98C73v18Ev
  virtual void  v19(); // _ZN5S98C73v19Ev
  virtual void  v20(); // _ZN5S98C73v20Ev
  virtual void  v21(); // _ZN5S98C73v21Ev
  virtual void  v22(); // _ZN5S98C73v22Ev
  virtual void  v23(); // _ZN5S98C73v23Ev
  virtual void  v24(); // _ZN5S98C73v24Ev
  virtual void  v25(); // _ZN5S98C73v25Ev
  virtual void  v26(); // _ZN5S98C73v26Ev
  virtual void  v27(); // _ZN5S98C73v27Ev
  virtual void  v28(); // _ZN5S98C73v28Ev
  virtual void  v29(); // _ZN5S98C73v29Ev
  virtual void  v30(); // _ZN5S98C73v30Ev
  virtual void  v31(); // _ZN5S98C73v31Ev
  virtual void  v32(); // _ZN5S98C73v32Ev
  virtual void  v33(); // _ZN5S98C73v33Ev
  virtual void  v34(); // _ZN5S98C73v34Ev
  virtual void  v35(); // _ZN5S98C73v35Ev
  virtual void  v36(); // _ZN5S98C73v36Ev
  virtual void  v37(); // _ZN5S98C73v37Ev
  virtual void  v38(); // _ZN5S98C73v38Ev
  virtual void  v39(); // _ZN5S98C73v39Ev
  virtual void  v40(); // _ZN5S98C73v40Ev
  virtual void  v41(); // _ZN5S98C73v41Ev
  virtual void  v42(); // _ZN5S98C73v42Ev
  virtual void  v43(); // _ZN5S98C73v43Ev
  virtual void  v44(); // _ZN5S98C73v44Ev
  virtual void  v45(); // _ZN5S98C73v45Ev
  virtual void  v46(); // _ZN5S98C73v46Ev
  virtual void  v47(); // _ZN5S98C73v47Ev
  virtual void  v48(); // _ZN5S98C73v48Ev
  virtual void  v49(); // _ZN5S98C73v49Ev
  virtual void  v50(); // _ZN5S98C73v50Ev
  virtual void  v51(); // _ZN5S98C73v51Ev
  virtual void  v52(); // _ZN5S98C73v52Ev
  virtual void  v53(); // _ZN5S98C73v53Ev
  virtual void  v54(); // _ZN5S98C73v54Ev
  virtual void  v55(); // _ZN5S98C73v55Ev
  virtual void  v56(); // _ZN5S98C73v56Ev
  virtual void  v57(); // _ZN5S98C73v57Ev
  virtual void  v58(); // _ZN5S98C73v58Ev
  virtual void  v59(); // _ZN5S98C73v59Ev
  virtual void  v60(); // _ZN5S98C73v60Ev
  virtual void  v61(); // _ZN5S98C73v61Ev
  virtual void  v62(); // _ZN5S98C73v62Ev
  virtual void  v63(); // _ZN5S98C73v63Ev
  virtual void  v64(); // _ZN5S98C73v64Ev
  virtual void  v65(); // _ZN5S98C73v65Ev
  virtual void  v66(); // _ZN5S98C73v66Ev
  virtual void  v67(); // _ZN5S98C73v67Ev
  virtual void  v68(); // _ZN5S98C73v68Ev
  S98C7(); // tgen
};
//SIG(-1 S98C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S98C7 ::~S98C7(){ note_dtor("S98C7", this);}
void  S98C7 ::v5(){vfunc_called(this, "_ZN5S98C72v5Ev");}
void  S98C7 ::v6(){vfunc_called(this, "_ZN5S98C72v6Ev");}
void  S98C7 ::v7(){vfunc_called(this, "_ZN5S98C72v7Ev");}
void  S98C7 ::v8(){vfunc_called(this, "_ZN5S98C72v8Ev");}
void  S98C7 ::v9(){vfunc_called(this, "_ZN5S98C72v9Ev");}
void  S98C7 ::v10(){vfunc_called(this, "_ZN5S98C73v10Ev");}
void  S98C7 ::v11(){vfunc_called(this, "_ZN5S98C73v11Ev");}
void  S98C7 ::v12(){vfunc_called(this, "_ZN5S98C73v12Ev");}
void  S98C7 ::v13(){vfunc_called(this, "_ZN5S98C73v13Ev");}
void  S98C7 ::v14(){vfunc_called(this, "_ZN5S98C73v14Ev");}
void  S98C7 ::v15(){vfunc_called(this, "_ZN5S98C73v15Ev");}
void  S98C7 ::v16(){vfunc_called(this, "_ZN5S98C73v16Ev");}
void  S98C7 ::v17(){vfunc_called(this, "_ZN5S98C73v17Ev");}
void  S98C7 ::v18(){vfunc_called(this, "_ZN5S98C73v18Ev");}
void  S98C7 ::v19(){vfunc_called(this, "_ZN5S98C73v19Ev");}
void  S98C7 ::v20(){vfunc_called(this, "_ZN5S98C73v20Ev");}
void  S98C7 ::v21(){vfunc_called(this, "_ZN5S98C73v21Ev");}
void  S98C7 ::v22(){vfunc_called(this, "_ZN5S98C73v22Ev");}
void  S98C7 ::v23(){vfunc_called(this, "_ZN5S98C73v23Ev");}
void  S98C7 ::v24(){vfunc_called(this, "_ZN5S98C73v24Ev");}
void  S98C7 ::v25(){vfunc_called(this, "_ZN5S98C73v25Ev");}
void  S98C7 ::v26(){vfunc_called(this, "_ZN5S98C73v26Ev");}
void  S98C7 ::v27(){vfunc_called(this, "_ZN5S98C73v27Ev");}
void  S98C7 ::v28(){vfunc_called(this, "_ZN5S98C73v28Ev");}
void  S98C7 ::v29(){vfunc_called(this, "_ZN5S98C73v29Ev");}
void  S98C7 ::v30(){vfunc_called(this, "_ZN5S98C73v30Ev");}
void  S98C7 ::v31(){vfunc_called(this, "_ZN5S98C73v31Ev");}
void  S98C7 ::v32(){vfunc_called(this, "_ZN5S98C73v32Ev");}
void  S98C7 ::v33(){vfunc_called(this, "_ZN5S98C73v33Ev");}
void  S98C7 ::v34(){vfunc_called(this, "_ZN5S98C73v34Ev");}
void  S98C7 ::v35(){vfunc_called(this, "_ZN5S98C73v35Ev");}
void  S98C7 ::v36(){vfunc_called(this, "_ZN5S98C73v36Ev");}
void  S98C7 ::v37(){vfunc_called(this, "_ZN5S98C73v37Ev");}
void  S98C7 ::v38(){vfunc_called(this, "_ZN5S98C73v38Ev");}
void  S98C7 ::v39(){vfunc_called(this, "_ZN5S98C73v39Ev");}
void  S98C7 ::v40(){vfunc_called(this, "_ZN5S98C73v40Ev");}
void  S98C7 ::v41(){vfunc_called(this, "_ZN5S98C73v41Ev");}
void  S98C7 ::v42(){vfunc_called(this, "_ZN5S98C73v42Ev");}
void  S98C7 ::v43(){vfunc_called(this, "_ZN5S98C73v43Ev");}
void  S98C7 ::v44(){vfunc_called(this, "_ZN5S98C73v44Ev");}
void  S98C7 ::v45(){vfunc_called(this, "_ZN5S98C73v45Ev");}
void  S98C7 ::v46(){vfunc_called(this, "_ZN5S98C73v46Ev");}
void  S98C7 ::v47(){vfunc_called(this, "_ZN5S98C73v47Ev");}
void  S98C7 ::v48(){vfunc_called(this, "_ZN5S98C73v48Ev");}
void  S98C7 ::v49(){vfunc_called(this, "_ZN5S98C73v49Ev");}
void  S98C7 ::v50(){vfunc_called(this, "_ZN5S98C73v50Ev");}
void  S98C7 ::v51(){vfunc_called(this, "_ZN5S98C73v51Ev");}
void  S98C7 ::v52(){vfunc_called(this, "_ZN5S98C73v52Ev");}
void  S98C7 ::v53(){vfunc_called(this, "_ZN5S98C73v53Ev");}
void  S98C7 ::v54(){vfunc_called(this, "_ZN5S98C73v54Ev");}
void  S98C7 ::v55(){vfunc_called(this, "_ZN5S98C73v55Ev");}
void  S98C7 ::v56(){vfunc_called(this, "_ZN5S98C73v56Ev");}
void  S98C7 ::v57(){vfunc_called(this, "_ZN5S98C73v57Ev");}
void  S98C7 ::v58(){vfunc_called(this, "_ZN5S98C73v58Ev");}
void  S98C7 ::v59(){vfunc_called(this, "_ZN5S98C73v59Ev");}
void  S98C7 ::v60(){vfunc_called(this, "_ZN5S98C73v60Ev");}
void  S98C7 ::v61(){vfunc_called(this, "_ZN5S98C73v61Ev");}
void  S98C7 ::v62(){vfunc_called(this, "_ZN5S98C73v62Ev");}
void  S98C7 ::v63(){vfunc_called(this, "_ZN5S98C73v63Ev");}
void  S98C7 ::v64(){vfunc_called(this, "_ZN5S98C73v64Ev");}
void  S98C7 ::v65(){vfunc_called(this, "_ZN5S98C73v65Ev");}
void  S98C7 ::v66(){vfunc_called(this, "_ZN5S98C73v66Ev");}
void  S98C7 ::v67(){vfunc_called(this, "_ZN5S98C73v67Ev");}
void  S98C7 ::v68(){vfunc_called(this, "_ZN5S98C73v68Ev");}
S98C7 ::S98C7(){ note_ctor("S98C7", this);} // tgen

static void Test_S98C7()
{
  extern Class_Descriptor cd_S98C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S98C7, buf);
    S98C7 *dp, &lv = *(dp=new (buf) S98C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S98C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C7)");
    check_field_offset(lv, s98c7f0, ABISELECT(8,4), "S98C7.s98c7f0");
    check_field_offset(lv, s98c7f1, ABISELECT(16,8), "S98C7.s98c7f1");
    check_field_offset(lv, s98c7f2, ABISELECT(24,16), "S98C7.s98c7f2");
    check_field_offset(lv, s98c7f3, ABISELECT(56,32), "S98C7.s98c7f3");
    check_field_offset(lv, s98c7f4, ABISELECT(64,40), "S98C7.s98c7f4");
    check_field_offset(lv, s98c7f5, ABISELECT(72,44), "S98C7.s98c7f5");
    check_field_offset(lv, s98c7f6, ABISELECT(80,52), "S98C7.s98c7f6");
    test_class_info(&lv, &cd_S98C7);
    dp->~S98C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C7(Test_S98C7, "S98C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S98C7C1Ev();
extern void _ZN5S98C7D1Ev();
Name_Map name_map_S98C7[] = {
  NSPAIR(_ZN5S98C7C1Ev),
  NSPAIR(_ZN5S98C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S98C7[];
extern void _ZN5S98C7D1Ev();
extern void _ZN5S98C7D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
static  VTBL_ENTRY vtc_S98C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C7[0]),
  (VTBL_ENTRY)&_ZN5S98C7D1Ev,
  (VTBL_ENTRY)&_ZN5S98C7D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
};
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
Class_Descriptor cd_S98C7 = {  "S98C7", // class name
  0,0,//no base classes
  &(vtc_S98C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S98C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S98C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C6  : S98C7 {
  int s98c6f0[2];
  void *s98c6f1;
  int s98c6f2[2];
  ::S287C8_nt s98c6f3;
  ::S287C8_nt s98c6f4;
  ::S2121C38 s98c6f5;
  ::S287C8_nt s98c6f6;
  unsigned int s98c6f7:1;
  unsigned int s98c6f8:1;
  unsigned int s98c6f9:1;
  unsigned int s98c6f10:1;
  unsigned int s98c6f11:1;
  int s98c6f12[2];
  virtual  ~S98C6(); // _ZN5S98C6D1Ev
  virtual void  v69(); // _ZN5S98C63v69Ev
  virtual void  v70(); // _ZN5S98C63v70Ev
  virtual void  v71(); // _ZN5S98C63v71Ev
  virtual void  v72(); // _ZN5S98C63v72Ev
  virtual void  v73(); // _ZN5S98C63v73Ev
  virtual void  v74(); // _ZN5S98C63v74Ev
  virtual void  v75(); // _ZN5S98C63v75Ev
  virtual void  v76(); // _ZN5S98C63v76Ev
  virtual void  v77(); // _ZN5S98C63v77Ev
  virtual void  v78(); // _ZN5S98C63v78Ev
  virtual void  v79(); // _ZN5S98C63v79Ev
  virtual void  v80(); // _ZN5S98C63v80Ev
  virtual void  v81(); // _ZN5S98C63v81Ev
  virtual void  v82(); // _ZN5S98C63v82Ev
  virtual void  v83(); // _ZN5S98C63v83Ev
  virtual void  v84(); // _ZN5S98C63v84Ev
  virtual void  v85(); // _ZN5S98C63v85Ev
  virtual void  v86(); // _ZN5S98C63v86Ev
  virtual void  v87(); // _ZN5S98C63v87Ev
  virtual void  v88(); // _ZN5S98C63v88Ev
  virtual void  v89(); // _ZN5S98C63v89Ev
  virtual void  v90(); // _ZN5S98C63v90Ev
  S98C6(); // tgen
};
//SIG(-1 S98C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S98C6 ::~S98C6(){ note_dtor("S98C6", this);}
void  S98C6 ::v69(){vfunc_called(this, "_ZN5S98C63v69Ev");}
void  S98C6 ::v70(){vfunc_called(this, "_ZN5S98C63v70Ev");}
void  S98C6 ::v71(){vfunc_called(this, "_ZN5S98C63v71Ev");}
void  S98C6 ::v72(){vfunc_called(this, "_ZN5S98C63v72Ev");}
void  S98C6 ::v73(){vfunc_called(this, "_ZN5S98C63v73Ev");}
void  S98C6 ::v74(){vfunc_called(this, "_ZN5S98C63v74Ev");}
void  S98C6 ::v75(){vfunc_called(this, "_ZN5S98C63v75Ev");}
void  S98C6 ::v76(){vfunc_called(this, "_ZN5S98C63v76Ev");}
void  S98C6 ::v77(){vfunc_called(this, "_ZN5S98C63v77Ev");}
void  S98C6 ::v78(){vfunc_called(this, "_ZN5S98C63v78Ev");}
void  S98C6 ::v79(){vfunc_called(this, "_ZN5S98C63v79Ev");}
void  S98C6 ::v80(){vfunc_called(this, "_ZN5S98C63v80Ev");}
void  S98C6 ::v81(){vfunc_called(this, "_ZN5S98C63v81Ev");}
void  S98C6 ::v82(){vfunc_called(this, "_ZN5S98C63v82Ev");}
void  S98C6 ::v83(){vfunc_called(this, "_ZN5S98C63v83Ev");}
void  S98C6 ::v84(){vfunc_called(this, "_ZN5S98C63v84Ev");}
void  S98C6 ::v85(){vfunc_called(this, "_ZN5S98C63v85Ev");}
void  S98C6 ::v86(){vfunc_called(this, "_ZN5S98C63v86Ev");}
void  S98C6 ::v87(){vfunc_called(this, "_ZN5S98C63v87Ev");}
void  S98C6 ::v88(){vfunc_called(this, "_ZN5S98C63v88Ev");}
void  S98C6 ::v89(){vfunc_called(this, "_ZN5S98C63v89Ev");}
void  S98C6 ::v90(){vfunc_called(this, "_ZN5S98C63v90Ev");}
S98C6 ::S98C6(){ note_ctor("S98C6", this);} // tgen

static void Test_S98C6()
{
  extern Class_Descriptor cd_S98C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S98C6, buf);
    S98C6 *dp, &lv = *(dp=new (buf) S98C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S98C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C6)");
    check_base_class_offset(lv, (S98C7*), 0, "S98C6");
    check_field_offset(lv, s98c6f0, ABISELECT(96,60), "S98C6.s98c6f0");
    check_field_offset(lv, s98c6f1, ABISELECT(104,68), "S98C6.s98c6f1");
    check_field_offset(lv, s98c6f2, ABISELECT(112,72), "S98C6.s98c6f2");
    check_field_offset(lv, s98c6f3, ABISELECT(120,80), "S98C6.s98c6f3");
    check_field_offset(lv, s98c6f4, ABISELECT(136,92), "S98C6.s98c6f4");
    check_field_offset(lv, s98c6f5, ABISELECT(152,104), "S98C6.s98c6f5");
    check_field_offset(lv, s98c6f6, ABISELECT(160,108), "S98C6.s98c6f6");
    set_bf_and_test(lv, s98c6f7, ABISELECT(176,120), 0, 1, 1, "S98C6");
    set_bf_and_test(lv, s98c6f8, ABISELECT(176,120), 1, 1, 1, "S98C6");
    set_bf_and_test(lv, s98c6f9, ABISELECT(176,120), 2, 1, 1, "S98C6");
    set_bf_and_test(lv, s98c6f10, ABISELECT(176,120), 3, 1, 1, "S98C6");
    set_bf_and_test(lv, s98c6f11, ABISELECT(176,120), 4, 1, 1, "S98C6");
    check_field_offset(lv, s98c6f12, ABISELECT(180,124), "S98C6.s98c6f12");
    test_class_info(&lv, &cd_S98C6);
    dp->~S98C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C6(Test_S98C6, "S98C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S98C6C1Ev();
extern void _ZN5S98C6D1Ev();
Name_Map name_map_S98C6[] = {
  NSPAIR(_ZN5S98C6C1Ev),
  NSPAIR(_ZN5S98C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
static Base_Class bases_S98C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S98C6[];
extern void _ZN5S98C6D1Ev();
extern void _ZN5S98C6D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
static  VTBL_ENTRY vtc_S98C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C6[0]),
  (VTBL_ENTRY)&_ZN5S98C6D1Ev,
  (VTBL_ENTRY)&_ZN5S98C6D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
};
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
Class_Descriptor cd_S98C6 = {  "S98C6", // class name
  bases_S98C6, 1,
  &(vtc_S98C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S98C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C5  : S98C6 {
  unsigned int s98c5f0:1;
  unsigned int s98c5f1:1;
  unsigned int s98c5f2:1;
  ::S3350C17 s98c5f3;
  ::S3350C11 s98c5f4;
  ::S3350C5_nt s98c5f5;
  ::S287C27 s98c5f6;
  int s98c5f7[3];
  virtual  ~S98C5(); // _ZN5S98C5D1Ev
  virtual void  v91(); // _ZN5S98C53v91Ev
  virtual void  v92(); // _ZN5S98C53v92Ev
  virtual void  v93(); // _ZN5S98C53v93Ev
  virtual void  v94(); // _ZN5S98C53v94Ev
  virtual void  v95(); // _ZN5S98C53v95Ev
  virtual void  v96(); // _ZN5S98C53v96Ev
  virtual void  v97(); // _ZN5S98C53v97Ev
  virtual void  v98(); // _ZN5S98C53v98Ev
  virtual void  v99(); // _ZN5S98C53v99Ev
  virtual void  v100(); // _ZN5S98C54v100Ev
  virtual void  v101(); // _ZN5S98C54v101Ev
  virtual void  v102(); // _ZN5S98C54v102Ev
  virtual void  v103(); // _ZN5S98C54v103Ev
  virtual void  v104(); // _ZN5S98C54v104Ev
  virtual void  v105(); // _ZN5S98C54v105Ev
  virtual void  v106(); // _ZN5S98C54v106Ev
  virtual void  v107(); // _ZN5S98C54v107Ev
  virtual void  v108(); // _ZN5S98C54v108Ev
  virtual void  v109(); // _ZN5S98C54v109Ev
  virtual void  v110(); // _ZN5S98C54v110Ev
  S98C5(); // tgen
};
//SIG(-1 S98C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S98C5 ::~S98C5(){ note_dtor("S98C5", this);}
void  S98C5 ::v91(){vfunc_called(this, "_ZN5S98C53v91Ev");}
void  S98C5 ::v92(){vfunc_called(this, "_ZN5S98C53v92Ev");}
void  S98C5 ::v93(){vfunc_called(this, "_ZN5S98C53v93Ev");}
void  S98C5 ::v94(){vfunc_called(this, "_ZN5S98C53v94Ev");}
void  S98C5 ::v95(){vfunc_called(this, "_ZN5S98C53v95Ev");}
void  S98C5 ::v96(){vfunc_called(this, "_ZN5S98C53v96Ev");}
void  S98C5 ::v97(){vfunc_called(this, "_ZN5S98C53v97Ev");}
void  S98C5 ::v98(){vfunc_called(this, "_ZN5S98C53v98Ev");}
void  S98C5 ::v99(){vfunc_called(this, "_ZN5S98C53v99Ev");}
void  S98C5 ::v100(){vfunc_called(this, "_ZN5S98C54v100Ev");}
void  S98C5 ::v101(){vfunc_called(this, "_ZN5S98C54v101Ev");}
void  S98C5 ::v102(){vfunc_called(this, "_ZN5S98C54v102Ev");}
void  S98C5 ::v103(){vfunc_called(this, "_ZN5S98C54v103Ev");}
void  S98C5 ::v104(){vfunc_called(this, "_ZN5S98C54v104Ev");}
void  S98C5 ::v105(){vfunc_called(this, "_ZN5S98C54v105Ev");}
void  S98C5 ::v106(){vfunc_called(this, "_ZN5S98C54v106Ev");}
void  S98C5 ::v107(){vfunc_called(this, "_ZN5S98C54v107Ev");}
void  S98C5 ::v108(){vfunc_called(this, "_ZN5S98C54v108Ev");}
void  S98C5 ::v109(){vfunc_called(this, "_ZN5S98C54v109Ev");}
void  S98C5 ::v110(){vfunc_called(this, "_ZN5S98C54v110Ev");}
S98C5 ::S98C5(){ note_ctor("S98C5", this);} // tgen

static void Test_S98C5()
{
  extern Class_Descriptor cd_S98C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S98C5, buf);
    S98C5 *dp, &lv = *(dp=new (buf) S98C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S98C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C5)");
    check_base_class_offset(lv, (S98C7*)(S98C6*), 0, "S98C5");
    check_base_class_offset(lv, (S98C6*), 0, "S98C5");
    set_bf_and_test(lv, s98c5f0, ABISELECT(188,132), 0, 1, 1, "S98C5");
    set_bf_and_test(lv, s98c5f1, ABISELECT(188,132), 1, 1, 1, "S98C5");
    set_bf_and_test(lv, s98c5f2, ABISELECT(188,132), 2, 1, 1, "S98C5");
    check_field_offset(lv, s98c5f3, ABISELECT(192,136), "S98C5.s98c5f3");
    check_field_offset(lv, s98c5f4, ABISELECT(208,148), "S98C5.s98c5f4");
    check_field_offset(lv, s98c5f5, ABISELECT(224,160), "S98C5.s98c5f5");
    check_field_offset(lv, s98c5f6, ABISELECT(240,172), "S98C5.s98c5f6");
    check_field_offset(lv, s98c5f7, ABISELECT(256,184), "S98C5.s98c5f7");
    test_class_info(&lv, &cd_S98C5);
    dp->~S98C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C5(Test_S98C5, "S98C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S98C5C1Ev();
extern void _ZN5S98C5D1Ev();
Name_Map name_map_S98C5[] = {
  NSPAIR(_ZN5S98C5C1Ev),
  NSPAIR(_ZN5S98C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
static Base_Class bases_S98C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S98C5[];
extern void _ZN5S98C5D1Ev();
extern void _ZN5S98C5D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
static  VTBL_ENTRY vtc_S98C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C5[0]),
  (VTBL_ENTRY)&_ZN5S98C5D1Ev,
  (VTBL_ENTRY)&_ZN5S98C5D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
};
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
Class_Descriptor cd_S98C5 = {  "S98C5", // class name
  bases_S98C5, 2,
  &(vtc_S98C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S98C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C4  : S98C5 {
  ::S3350C4_nt s98c4f0;
  unsigned int s98c4f1:1;
  ::S287C23 s98c4f2;
  virtual  ~S98C4(); // _ZN5S98C4D1Ev
  virtual void  v111(); // _ZN5S98C44v111Ev
  virtual void  v112(); // _ZN5S98C44v112Ev
  virtual void  v113(); // _ZN5S98C44v113Ev
  virtual void  v114(); // _ZN5S98C44v114Ev
  S98C4(); // tgen
};
//SIG(-1 S98C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S98C4 ::~S98C4(){ note_dtor("S98C4", this);}
void  S98C4 ::v111(){vfunc_called(this, "_ZN5S98C44v111Ev");}
void  S98C4 ::v112(){vfunc_called(this, "_ZN5S98C44v112Ev");}
void  S98C4 ::v113(){vfunc_called(this, "_ZN5S98C44v113Ev");}
void  S98C4 ::v114(){vfunc_called(this, "_ZN5S98C44v114Ev");}
S98C4 ::S98C4(){ note_ctor("S98C4", this);} // tgen

static void Test_S98C4()
{
  extern Class_Descriptor cd_S98C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S98C4, buf);
    S98C4 *dp, &lv = *(dp=new (buf) S98C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S98C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C4)");
    check_base_class_offset(lv, (S98C7*)(S98C6*)(S98C5*), 0, "S98C4");
    check_base_class_offset(lv, (S98C6*)(S98C5*), 0, "S98C4");
    check_base_class_offset(lv, (S98C5*), 0, "S98C4");
    check_field_offset(lv, s98c4f0, ABISELECT(268,196), "S98C4.s98c4f0");
    set_bf_and_test(lv, s98c4f1, ABISELECT(276,204), 0, 1, 1, "S98C4");
    check_field_offset(lv, s98c4f2, ABISELECT(280,208), "S98C4.s98c4f2");
    test_class_info(&lv, &cd_S98C4);
    dp->~S98C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C4(Test_S98C4, "S98C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S98C4C1Ev();
extern void _ZN5S98C4D1Ev();
Name_Map name_map_S98C4[] = {
  NSPAIR(_ZN5S98C4C1Ev),
  NSPAIR(_ZN5S98C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
extern Class_Descriptor cd_S98C5;
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
static Base_Class bases_S98C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S98C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S98C4[];
extern void _ZN5S98C4D1Ev();
extern void _ZN5S98C4D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
extern void _ZN5S98C44v111Ev();
extern void _ZN5S98C44v112Ev();
extern void _ZN5S98C44v113Ev();
extern void _ZN5S98C44v114Ev();
static  VTBL_ENTRY vtc_S98C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C4[0]),
  (VTBL_ENTRY)&_ZN5S98C4D1Ev,
  (VTBL_ENTRY)&_ZN5S98C4D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
  (VTBL_ENTRY)&_ZN5S98C44v111Ev,
  (VTBL_ENTRY)&_ZN5S98C44v112Ev,
  (VTBL_ENTRY)&_ZN5S98C44v113Ev,
  (VTBL_ENTRY)&_ZN5S98C44v114Ev,
};
extern VTBL_ENTRY _ZTI5S98C4[];
extern  VTBL_ENTRY _ZTV5S98C4[];
Class_Descriptor cd_S98C4 = {  "S98C4", // class name
  bases_S98C4, 3,
  &(vtc_S98C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S98C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C4),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C3  : S98C4 {
  ::S287C19 s98c3f0;
  unsigned int s98c3f1:1;
  virtual  ~S98C3(); // _ZN5S98C3D1Ev
  virtual void  v115(); // _ZN5S98C34v115Ev
  virtual void  v116(); // _ZN5S98C34v116Ev
  virtual void  v117(); // _ZN5S98C34v117Ev
  virtual void  v118(); // _ZN5S98C34v118Ev
  virtual void  v119(); // _ZN5S98C34v119Ev
  virtual void  v120(); // _ZN5S98C34v120Ev
  virtual void  v121(); // _ZN5S98C34v121Ev
  S98C3(); // tgen
};
//SIG(-1 S98C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S98C3 ::~S98C3(){ note_dtor("S98C3", this);}
void  S98C3 ::v115(){vfunc_called(this, "_ZN5S98C34v115Ev");}
void  S98C3 ::v116(){vfunc_called(this, "_ZN5S98C34v116Ev");}
void  S98C3 ::v117(){vfunc_called(this, "_ZN5S98C34v117Ev");}
void  S98C3 ::v118(){vfunc_called(this, "_ZN5S98C34v118Ev");}
void  S98C3 ::v119(){vfunc_called(this, "_ZN5S98C34v119Ev");}
void  S98C3 ::v120(){vfunc_called(this, "_ZN5S98C34v120Ev");}
void  S98C3 ::v121(){vfunc_called(this, "_ZN5S98C34v121Ev");}
S98C3 ::S98C3(){ note_ctor("S98C3", this);} // tgen

static void Test_S98C3()
{
  extern Class_Descriptor cd_S98C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S98C3, buf);
    S98C3 *dp, &lv = *(dp=new (buf) S98C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S98C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C3)");
    check_base_class_offset(lv, (S98C7*)(S98C6*)(S98C5*)(S98C4*), 0, "S98C3");
    check_base_class_offset(lv, (S98C6*)(S98C5*)(S98C4*), 0, "S98C3");
    check_base_class_offset(lv, (S98C5*)(S98C4*), 0, "S98C3");
    check_base_class_offset(lv, (S98C4*), 0, "S98C3");
    check_field_offset(lv, s98c3f0, ABISELECT(296,220), "S98C3.s98c3f0");
    set_bf_and_test(lv, s98c3f1, ABISELECT(312,232), 0, 1, 1, "S98C3");
    test_class_info(&lv, &cd_S98C3);
    dp->~S98C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C3(Test_S98C3, "S98C3", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN5S98C3C1Ev();
extern void _ZN5S98C3D1Ev();
Name_Map name_map_S98C3[] = {
  NSPAIR(_ZN5S98C3C1Ev),
  NSPAIR(_ZN5S98C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
extern Class_Descriptor cd_S98C5;
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
extern Class_Descriptor cd_S98C4;
extern VTBL_ENTRY _ZTI5S98C4[];
extern  VTBL_ENTRY _ZTV5S98C4[];
static Base_Class bases_S98C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S98C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S98C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S98C3[];
extern void _ZN5S98C3D1Ev();
extern void _ZN5S98C3D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
extern void _ZN5S98C44v111Ev();
extern void _ZN5S98C44v112Ev();
extern void _ZN5S98C44v113Ev();
extern void _ZN5S98C44v114Ev();
extern void _ZN5S98C34v115Ev();
extern void _ZN5S98C34v116Ev();
extern void _ZN5S98C34v117Ev();
extern void _ZN5S98C34v118Ev();
extern void _ZN5S98C34v119Ev();
extern void _ZN5S98C34v120Ev();
extern void _ZN5S98C34v121Ev();
static  VTBL_ENTRY vtc_S98C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C3[0]),
  (VTBL_ENTRY)&_ZN5S98C3D1Ev,
  (VTBL_ENTRY)&_ZN5S98C3D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
  (VTBL_ENTRY)&_ZN5S98C44v111Ev,
  (VTBL_ENTRY)&_ZN5S98C44v112Ev,
  (VTBL_ENTRY)&_ZN5S98C44v113Ev,
  (VTBL_ENTRY)&_ZN5S98C44v114Ev,
  (VTBL_ENTRY)&_ZN5S98C34v115Ev,
  (VTBL_ENTRY)&_ZN5S98C34v116Ev,
  (VTBL_ENTRY)&_ZN5S98C34v117Ev,
  (VTBL_ENTRY)&_ZN5S98C34v118Ev,
  (VTBL_ENTRY)&_ZN5S98C34v119Ev,
  (VTBL_ENTRY)&_ZN5S98C34v120Ev,
  (VTBL_ENTRY)&_ZN5S98C34v121Ev,
};
extern VTBL_ENTRY _ZTI5S98C3[];
extern  VTBL_ENTRY _ZTV5S98C3[];
Class_Descriptor cd_S98C3 = {  "S98C3", // class name
  bases_S98C3, 4,
  &(vtc_S98C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI5S98C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C3),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C2  : S98C3 {
  unsigned int s98c2f0:1;
  unsigned int s98c2f1:1;
  unsigned int s98c2f2:1;
  void *s98c2f3;
  char s98c2f4;
  ::S287C19 s98c2f5;
  int s98c2f6[5];
  virtual  ~S98C2(); // _ZN5S98C2D1Ev
  virtual void  v122(); // _ZN5S98C24v122Ev
  virtual void  v123(); // _ZN5S98C24v123Ev
  virtual void  v124(); // _ZN5S98C24v124Ev
  virtual void  v125(); // _ZN5S98C24v125Ev
  virtual void  v126(); // _ZN5S98C24v126Ev
  virtual void  v127(); // _ZN5S98C24v127Ev
  virtual void  v128(); // _ZN5S98C24v128Ev
  S98C2(); // tgen
};
//SIG(-1 S98C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v114 v115 v116 v117 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v118 v119 v120 v121 v122 v123 v124 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fp Fc FC23 Fi[5]}


 S98C2 ::~S98C2(){ note_dtor("S98C2", this);}
void  S98C2 ::v122(){vfunc_called(this, "_ZN5S98C24v122Ev");}
void  S98C2 ::v123(){vfunc_called(this, "_ZN5S98C24v123Ev");}
void  S98C2 ::v124(){vfunc_called(this, "_ZN5S98C24v124Ev");}
void  S98C2 ::v125(){vfunc_called(this, "_ZN5S98C24v125Ev");}
void  S98C2 ::v126(){vfunc_called(this, "_ZN5S98C24v126Ev");}
void  S98C2 ::v127(){vfunc_called(this, "_ZN5S98C24v127Ev");}
void  S98C2 ::v128(){vfunc_called(this, "_ZN5S98C24v128Ev");}
S98C2 ::S98C2(){ note_ctor("S98C2", this);} // tgen

static void Test_S98C2()
{
  extern Class_Descriptor cd_S98C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,70)];
    init_test(&cd_S98C2, buf);
    S98C2 *dp, &lv = *(dp=new (buf) S98C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,276), "sizeof(S98C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C2)");
    check_base_class_offset(lv, (S98C7*)(S98C6*)(S98C5*)(S98C4*)(S98C3*), 0, "S98C2");
    check_base_class_offset(lv, (S98C6*)(S98C5*)(S98C4*)(S98C3*), 0, "S98C2");
    check_base_class_offset(lv, (S98C5*)(S98C4*)(S98C3*), 0, "S98C2");
    check_base_class_offset(lv, (S98C4*)(S98C3*), 0, "S98C2");
    check_base_class_offset(lv, (S98C3*), 0, "S98C2");
    set_bf_and_test(lv, s98c2f0, ABISELECT(313,233), 0, 1, 1, "S98C2");
    set_bf_and_test(lv, s98c2f1, ABISELECT(313,233), 1, 1, 1, "S98C2");
    set_bf_and_test(lv, s98c2f2, ABISELECT(313,233), 2, 1, 1, "S98C2");
    check_field_offset(lv, s98c2f3, ABISELECT(320,236), "S98C2.s98c2f3");
    check_field_offset(lv, s98c2f4, ABISELECT(328,240), "S98C2.s98c2f4");
    check_field_offset(lv, s98c2f5, ABISELECT(336,244), "S98C2.s98c2f5");
    check_field_offset(lv, s98c2f6, ABISELECT(352,256), "S98C2.s98c2f6");
    test_class_info(&lv, &cd_S98C2);
    dp->~S98C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C2(Test_S98C2, "S98C2", ABISELECT(376,276));

#else // __cplusplus

extern void _ZN5S98C2C1Ev();
extern void _ZN5S98C2D1Ev();
Name_Map name_map_S98C2[] = {
  NSPAIR(_ZN5S98C2C1Ev),
  NSPAIR(_ZN5S98C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
extern Class_Descriptor cd_S98C5;
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
extern Class_Descriptor cd_S98C4;
extern VTBL_ENTRY _ZTI5S98C4[];
extern  VTBL_ENTRY _ZTV5S98C4[];
extern Class_Descriptor cd_S98C3;
extern VTBL_ENTRY _ZTI5S98C3[];
extern  VTBL_ENTRY _ZTV5S98C3[];
static Base_Class bases_S98C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S98C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S98C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S98C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S98C2[];
extern void _ZN5S98C2D1Ev();
extern void _ZN5S98C2D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
extern void _ZN5S98C44v111Ev();
extern void _ZN5S98C44v112Ev();
extern void _ZN5S98C44v113Ev();
extern void _ZN5S98C44v114Ev();
extern void _ZN5S98C34v115Ev();
extern void _ZN5S98C34v116Ev();
extern void _ZN5S98C34v117Ev();
extern void _ZN5S98C34v118Ev();
extern void _ZN5S98C34v119Ev();
extern void _ZN5S98C34v120Ev();
extern void _ZN5S98C34v121Ev();
extern void _ZN5S98C24v122Ev();
extern void _ZN5S98C24v123Ev();
extern void _ZN5S98C24v124Ev();
extern void _ZN5S98C24v125Ev();
extern void _ZN5S98C24v126Ev();
extern void _ZN5S98C24v127Ev();
extern void _ZN5S98C24v128Ev();
static  VTBL_ENTRY vtc_S98C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C2[0]),
  (VTBL_ENTRY)&_ZN5S98C2D1Ev,
  (VTBL_ENTRY)&_ZN5S98C2D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
  (VTBL_ENTRY)&_ZN5S98C44v111Ev,
  (VTBL_ENTRY)&_ZN5S98C44v112Ev,
  (VTBL_ENTRY)&_ZN5S98C44v113Ev,
  (VTBL_ENTRY)&_ZN5S98C44v114Ev,
  (VTBL_ENTRY)&_ZN5S98C34v115Ev,
  (VTBL_ENTRY)&_ZN5S98C34v116Ev,
  (VTBL_ENTRY)&_ZN5S98C34v117Ev,
  (VTBL_ENTRY)&_ZN5S98C34v118Ev,
  (VTBL_ENTRY)&_ZN5S98C34v119Ev,
  (VTBL_ENTRY)&_ZN5S98C34v120Ev,
  (VTBL_ENTRY)&_ZN5S98C34v121Ev,
  (VTBL_ENTRY)&_ZN5S98C24v122Ev,
  (VTBL_ENTRY)&_ZN5S98C24v123Ev,
  (VTBL_ENTRY)&_ZN5S98C24v124Ev,
  (VTBL_ENTRY)&_ZN5S98C24v125Ev,
  (VTBL_ENTRY)&_ZN5S98C24v126Ev,
  (VTBL_ENTRY)&_ZN5S98C24v127Ev,
  (VTBL_ENTRY)&_ZN5S98C24v128Ev,
};
extern VTBL_ENTRY _ZTI5S98C2[];
extern  VTBL_ENTRY _ZTV5S98C2[];
Class_Descriptor cd_S98C2 = {  "S98C2", // class name
  bases_S98C2, 5,
  &(vtc_S98C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,276), // object size
  NSPAIRA(_ZTI5S98C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C2),128, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S98C1  : S98C2 {
  virtual  ~S98C1(); // _ZN5S98C1D1Ev
  virtual void  v1(); // _ZN5S98C12v1Ev
  virtual void  v2(); // _ZN5S98C12v2Ev
  virtual void  v3(); // _ZN5S98C12v3Ev
  virtual void  v4(); // _ZN5S98C12v4Ev
  S98C1(); // tgen
};
//SIG(1 S98C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v111 v112 v113 v114 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v115 v116 v117 v118 v119 v120 v121 FC24{ BC25{ BC12}} Fi:1} vd v122 v123 v124 v125 v126 v127 v128 Fi:1 Fi:1 Fi:1 Fp Fc FC24 Fi[5]} vd v1 v2 v3 v4}


 S98C1 ::~S98C1(){ note_dtor("S98C1", this);}
void  S98C1 ::v1(){vfunc_called(this, "_ZN5S98C12v1Ev");}
void  S98C1 ::v2(){vfunc_called(this, "_ZN5S98C12v2Ev");}
void  S98C1 ::v3(){vfunc_called(this, "_ZN5S98C12v3Ev");}
void  S98C1 ::v4(){vfunc_called(this, "_ZN5S98C12v4Ev");}
S98C1 ::S98C1(){ note_ctor("S98C1", this);} // tgen

static void Test_S98C1()
{
  extern Class_Descriptor cd_S98C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,70)];
    init_test(&cd_S98C1, buf);
    S98C1 *dp, &lv = *(dp=new (buf) S98C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,276), "sizeof(S98C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S98C1)");
    check_base_class_offset(lv, (S98C7*)(S98C6*)(S98C5*)(S98C4*)(S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C6*)(S98C5*)(S98C4*)(S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C5*)(S98C4*)(S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C4*)(S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C3*)(S98C2*), 0, "S98C1");
    check_base_class_offset(lv, (S98C2*), 0, "S98C1");
    test_class_info(&lv, &cd_S98C1);
    dp->~S98C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS98C1(Test_S98C1, "S98C1", ABISELECT(376,276));

#else // __cplusplus

extern void _ZN5S98C1C1Ev();
extern void _ZN5S98C1D1Ev();
Name_Map name_map_S98C1[] = {
  NSPAIR(_ZN5S98C1C1Ev),
  NSPAIR(_ZN5S98C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S98C7;
extern VTBL_ENTRY _ZTI5S98C7[];
extern  VTBL_ENTRY _ZTV5S98C7[];
extern Class_Descriptor cd_S98C6;
extern VTBL_ENTRY _ZTI5S98C6[];
extern  VTBL_ENTRY _ZTV5S98C6[];
extern Class_Descriptor cd_S98C5;
extern VTBL_ENTRY _ZTI5S98C5[];
extern  VTBL_ENTRY _ZTV5S98C5[];
extern Class_Descriptor cd_S98C4;
extern VTBL_ENTRY _ZTI5S98C4[];
extern  VTBL_ENTRY _ZTV5S98C4[];
extern Class_Descriptor cd_S98C3;
extern VTBL_ENTRY _ZTI5S98C3[];
extern  VTBL_ENTRY _ZTV5S98C3[];
extern Class_Descriptor cd_S98C2;
extern VTBL_ENTRY _ZTI5S98C2[];
extern  VTBL_ENTRY _ZTV5S98C2[];
static Base_Class bases_S98C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S98C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S98C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S98C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S98C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S98C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S98C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S98C1[];
extern void _ZN5S98C1D1Ev();
extern void _ZN5S98C1D0Ev();
extern void _ZN5S98C72v5Ev();
extern void _ZN5S98C72v6Ev();
extern void _ZN5S98C72v7Ev();
extern void _ZN5S98C72v8Ev();
extern void _ZN5S98C72v9Ev();
extern void _ZN5S98C73v10Ev();
extern void _ZN5S98C73v11Ev();
extern void _ZN5S98C73v12Ev();
extern void _ZN5S98C73v13Ev();
extern void _ZN5S98C73v14Ev();
extern void _ZN5S98C73v15Ev();
extern void _ZN5S98C73v16Ev();
extern void _ZN5S98C73v17Ev();
extern void _ZN5S98C73v18Ev();
extern void _ZN5S98C73v19Ev();
extern void _ZN5S98C73v20Ev();
extern void _ZN5S98C73v21Ev();
extern void _ZN5S98C73v22Ev();
extern void _ZN5S98C73v23Ev();
extern void _ZN5S98C73v24Ev();
extern void _ZN5S98C73v25Ev();
extern void _ZN5S98C73v26Ev();
extern void _ZN5S98C73v27Ev();
extern void _ZN5S98C73v28Ev();
extern void _ZN5S98C73v29Ev();
extern void _ZN5S98C73v30Ev();
extern void _ZN5S98C73v31Ev();
extern void _ZN5S98C73v32Ev();
extern void _ZN5S98C73v33Ev();
extern void _ZN5S98C73v34Ev();
extern void _ZN5S98C73v35Ev();
extern void _ZN5S98C73v36Ev();
extern void _ZN5S98C73v37Ev();
extern void _ZN5S98C73v38Ev();
extern void _ZN5S98C73v39Ev();
extern void _ZN5S98C73v40Ev();
extern void _ZN5S98C73v41Ev();
extern void _ZN5S98C73v42Ev();
extern void _ZN5S98C73v43Ev();
extern void _ZN5S98C73v44Ev();
extern void _ZN5S98C73v45Ev();
extern void _ZN5S98C73v46Ev();
extern void _ZN5S98C73v47Ev();
extern void _ZN5S98C73v48Ev();
extern void _ZN5S98C73v49Ev();
extern void _ZN5S98C73v50Ev();
extern void _ZN5S98C73v51Ev();
extern void _ZN5S98C73v52Ev();
extern void _ZN5S98C73v53Ev();
extern void _ZN5S98C73v54Ev();
extern void _ZN5S98C73v55Ev();
extern void _ZN5S98C73v56Ev();
extern void _ZN5S98C73v57Ev();
extern void _ZN5S98C73v58Ev();
extern void _ZN5S98C73v59Ev();
extern void _ZN5S98C73v60Ev();
extern void _ZN5S98C73v61Ev();
extern void _ZN5S98C73v62Ev();
extern void _ZN5S98C73v63Ev();
extern void _ZN5S98C73v64Ev();
extern void _ZN5S98C73v65Ev();
extern void _ZN5S98C73v66Ev();
extern void _ZN5S98C73v67Ev();
extern void _ZN5S98C73v68Ev();
extern void _ZN5S98C63v69Ev();
extern void _ZN5S98C63v70Ev();
extern void _ZN5S98C63v71Ev();
extern void _ZN5S98C63v72Ev();
extern void _ZN5S98C63v73Ev();
extern void _ZN5S98C63v74Ev();
extern void _ZN5S98C63v75Ev();
extern void _ZN5S98C63v76Ev();
extern void _ZN5S98C63v77Ev();
extern void _ZN5S98C63v78Ev();
extern void _ZN5S98C63v79Ev();
extern void _ZN5S98C63v80Ev();
extern void _ZN5S98C63v81Ev();
extern void _ZN5S98C63v82Ev();
extern void _ZN5S98C63v83Ev();
extern void _ZN5S98C63v84Ev();
extern void _ZN5S98C63v85Ev();
extern void _ZN5S98C63v86Ev();
extern void _ZN5S98C63v87Ev();
extern void _ZN5S98C63v88Ev();
extern void _ZN5S98C63v89Ev();
extern void _ZN5S98C63v90Ev();
extern void _ZN5S98C53v91Ev();
extern void _ZN5S98C53v92Ev();
extern void _ZN5S98C53v93Ev();
extern void _ZN5S98C53v94Ev();
extern void _ZN5S98C53v95Ev();
extern void _ZN5S98C53v96Ev();
extern void _ZN5S98C53v97Ev();
extern void _ZN5S98C53v98Ev();
extern void _ZN5S98C53v99Ev();
extern void _ZN5S98C54v100Ev();
extern void _ZN5S98C54v101Ev();
extern void _ZN5S98C54v102Ev();
extern void _ZN5S98C54v103Ev();
extern void _ZN5S98C54v104Ev();
extern void _ZN5S98C54v105Ev();
extern void _ZN5S98C54v106Ev();
extern void _ZN5S98C54v107Ev();
extern void _ZN5S98C54v108Ev();
extern void _ZN5S98C54v109Ev();
extern void _ZN5S98C54v110Ev();
extern void _ZN5S98C44v111Ev();
extern void _ZN5S98C44v112Ev();
extern void _ZN5S98C44v113Ev();
extern void _ZN5S98C44v114Ev();
extern void _ZN5S98C34v115Ev();
extern void _ZN5S98C34v116Ev();
extern void _ZN5S98C34v117Ev();
extern void _ZN5S98C34v118Ev();
extern void _ZN5S98C34v119Ev();
extern void _ZN5S98C34v120Ev();
extern void _ZN5S98C34v121Ev();
extern void _ZN5S98C24v122Ev();
extern void _ZN5S98C24v123Ev();
extern void _ZN5S98C24v124Ev();
extern void _ZN5S98C24v125Ev();
extern void _ZN5S98C24v126Ev();
extern void _ZN5S98C24v127Ev();
extern void _ZN5S98C24v128Ev();
extern void _ZN5S98C12v1Ev();
extern void _ZN5S98C12v2Ev();
extern void _ZN5S98C12v3Ev();
extern void _ZN5S98C12v4Ev();
static  VTBL_ENTRY vtc_S98C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S98C1[0]),
  (VTBL_ENTRY)&_ZN5S98C1D1Ev,
  (VTBL_ENTRY)&_ZN5S98C1D0Ev,
  (VTBL_ENTRY)&_ZN5S98C72v5Ev,
  (VTBL_ENTRY)&_ZN5S98C72v6Ev,
  (VTBL_ENTRY)&_ZN5S98C72v7Ev,
  (VTBL_ENTRY)&_ZN5S98C72v8Ev,
  (VTBL_ENTRY)&_ZN5S98C72v9Ev,
  (VTBL_ENTRY)&_ZN5S98C73v10Ev,
  (VTBL_ENTRY)&_ZN5S98C73v11Ev,
  (VTBL_ENTRY)&_ZN5S98C73v12Ev,
  (VTBL_ENTRY)&_ZN5S98C73v13Ev,
  (VTBL_ENTRY)&_ZN5S98C73v14Ev,
  (VTBL_ENTRY)&_ZN5S98C73v15Ev,
  (VTBL_ENTRY)&_ZN5S98C73v16Ev,
  (VTBL_ENTRY)&_ZN5S98C73v17Ev,
  (VTBL_ENTRY)&_ZN5S98C73v18Ev,
  (VTBL_ENTRY)&_ZN5S98C73v19Ev,
  (VTBL_ENTRY)&_ZN5S98C73v20Ev,
  (VTBL_ENTRY)&_ZN5S98C73v21Ev,
  (VTBL_ENTRY)&_ZN5S98C73v22Ev,
  (VTBL_ENTRY)&_ZN5S98C73v23Ev,
  (VTBL_ENTRY)&_ZN5S98C73v24Ev,
  (VTBL_ENTRY)&_ZN5S98C73v25Ev,
  (VTBL_ENTRY)&_ZN5S98C73v26Ev,
  (VTBL_ENTRY)&_ZN5S98C73v27Ev,
  (VTBL_ENTRY)&_ZN5S98C73v28Ev,
  (VTBL_ENTRY)&_ZN5S98C73v29Ev,
  (VTBL_ENTRY)&_ZN5S98C73v30Ev,
  (VTBL_ENTRY)&_ZN5S98C73v31Ev,
  (VTBL_ENTRY)&_ZN5S98C73v32Ev,
  (VTBL_ENTRY)&_ZN5S98C73v33Ev,
  (VTBL_ENTRY)&_ZN5S98C73v34Ev,
  (VTBL_ENTRY)&_ZN5S98C73v35Ev,
  (VTBL_ENTRY)&_ZN5S98C73v36Ev,
  (VTBL_ENTRY)&_ZN5S98C73v37Ev,
  (VTBL_ENTRY)&_ZN5S98C73v38Ev,
  (VTBL_ENTRY)&_ZN5S98C73v39Ev,
  (VTBL_ENTRY)&_ZN5S98C73v40Ev,
  (VTBL_ENTRY)&_ZN5S98C73v41Ev,
  (VTBL_ENTRY)&_ZN5S98C73v42Ev,
  (VTBL_ENTRY)&_ZN5S98C73v43Ev,
  (VTBL_ENTRY)&_ZN5S98C73v44Ev,
  (VTBL_ENTRY)&_ZN5S98C73v45Ev,
  (VTBL_ENTRY)&_ZN5S98C73v46Ev,
  (VTBL_ENTRY)&_ZN5S98C73v47Ev,
  (VTBL_ENTRY)&_ZN5S98C73v48Ev,
  (VTBL_ENTRY)&_ZN5S98C73v49Ev,
  (VTBL_ENTRY)&_ZN5S98C73v50Ev,
  (VTBL_ENTRY)&_ZN5S98C73v51Ev,
  (VTBL_ENTRY)&_ZN5S98C73v52Ev,
  (VTBL_ENTRY)&_ZN5S98C73v53Ev,
  (VTBL_ENTRY)&_ZN5S98C73v54Ev,
  (VTBL_ENTRY)&_ZN5S98C73v55Ev,
  (VTBL_ENTRY)&_ZN5S98C73v56Ev,
  (VTBL_ENTRY)&_ZN5S98C73v57Ev,
  (VTBL_ENTRY)&_ZN5S98C73v58Ev,
  (VTBL_ENTRY)&_ZN5S98C73v59Ev,
  (VTBL_ENTRY)&_ZN5S98C73v60Ev,
  (VTBL_ENTRY)&_ZN5S98C73v61Ev,
  (VTBL_ENTRY)&_ZN5S98C73v62Ev,
  (VTBL_ENTRY)&_ZN5S98C73v63Ev,
  (VTBL_ENTRY)&_ZN5S98C73v64Ev,
  (VTBL_ENTRY)&_ZN5S98C73v65Ev,
  (VTBL_ENTRY)&_ZN5S98C73v66Ev,
  (VTBL_ENTRY)&_ZN5S98C73v67Ev,
  (VTBL_ENTRY)&_ZN5S98C73v68Ev,
  (VTBL_ENTRY)&_ZN5S98C63v69Ev,
  (VTBL_ENTRY)&_ZN5S98C63v70Ev,
  (VTBL_ENTRY)&_ZN5S98C63v71Ev,
  (VTBL_ENTRY)&_ZN5S98C63v72Ev,
  (VTBL_ENTRY)&_ZN5S98C63v73Ev,
  (VTBL_ENTRY)&_ZN5S98C63v74Ev,
  (VTBL_ENTRY)&_ZN5S98C63v75Ev,
  (VTBL_ENTRY)&_ZN5S98C63v76Ev,
  (VTBL_ENTRY)&_ZN5S98C63v77Ev,
  (VTBL_ENTRY)&_ZN5S98C63v78Ev,
  (VTBL_ENTRY)&_ZN5S98C63v79Ev,
  (VTBL_ENTRY)&_ZN5S98C63v80Ev,
  (VTBL_ENTRY)&_ZN5S98C63v81Ev,
  (VTBL_ENTRY)&_ZN5S98C63v82Ev,
  (VTBL_ENTRY)&_ZN5S98C63v83Ev,
  (VTBL_ENTRY)&_ZN5S98C63v84Ev,
  (VTBL_ENTRY)&_ZN5S98C63v85Ev,
  (VTBL_ENTRY)&_ZN5S98C63v86Ev,
  (VTBL_ENTRY)&_ZN5S98C63v87Ev,
  (VTBL_ENTRY)&_ZN5S98C63v88Ev,
  (VTBL_ENTRY)&_ZN5S98C63v89Ev,
  (VTBL_ENTRY)&_ZN5S98C63v90Ev,
  (VTBL_ENTRY)&_ZN5S98C53v91Ev,
  (VTBL_ENTRY)&_ZN5S98C53v92Ev,
  (VTBL_ENTRY)&_ZN5S98C53v93Ev,
  (VTBL_ENTRY)&_ZN5S98C53v94Ev,
  (VTBL_ENTRY)&_ZN5S98C53v95Ev,
  (VTBL_ENTRY)&_ZN5S98C53v96Ev,
  (VTBL_ENTRY)&_ZN5S98C53v97Ev,
  (VTBL_ENTRY)&_ZN5S98C53v98Ev,
  (VTBL_ENTRY)&_ZN5S98C53v99Ev,
  (VTBL_ENTRY)&_ZN5S98C54v100Ev,
  (VTBL_ENTRY)&_ZN5S98C54v101Ev,
  (VTBL_ENTRY)&_ZN5S98C54v102Ev,
  (VTBL_ENTRY)&_ZN5S98C54v103Ev,
  (VTBL_ENTRY)&_ZN5S98C54v104Ev,
  (VTBL_ENTRY)&_ZN5S98C54v105Ev,
  (VTBL_ENTRY)&_ZN5S98C54v106Ev,
  (VTBL_ENTRY)&_ZN5S98C54v107Ev,
  (VTBL_ENTRY)&_ZN5S98C54v108Ev,
  (VTBL_ENTRY)&_ZN5S98C54v109Ev,
  (VTBL_ENTRY)&_ZN5S98C54v110Ev,
  (VTBL_ENTRY)&_ZN5S98C44v111Ev,
  (VTBL_ENTRY)&_ZN5S98C44v112Ev,
  (VTBL_ENTRY)&_ZN5S98C44v113Ev,
  (VTBL_ENTRY)&_ZN5S98C44v114Ev,
  (VTBL_ENTRY)&_ZN5S98C34v115Ev,
  (VTBL_ENTRY)&_ZN5S98C34v116Ev,
  (VTBL_ENTRY)&_ZN5S98C34v117Ev,
  (VTBL_ENTRY)&_ZN5S98C34v118Ev,
  (VTBL_ENTRY)&_ZN5S98C34v119Ev,
  (VTBL_ENTRY)&_ZN5S98C34v120Ev,
  (VTBL_ENTRY)&_ZN5S98C34v121Ev,
  (VTBL_ENTRY)&_ZN5S98C24v122Ev,
  (VTBL_ENTRY)&_ZN5S98C24v123Ev,
  (VTBL_ENTRY)&_ZN5S98C24v124Ev,
  (VTBL_ENTRY)&_ZN5S98C24v125Ev,
  (VTBL_ENTRY)&_ZN5S98C24v126Ev,
  (VTBL_ENTRY)&_ZN5S98C24v127Ev,
  (VTBL_ENTRY)&_ZN5S98C24v128Ev,
  (VTBL_ENTRY)&_ZN5S98C12v1Ev,
  (VTBL_ENTRY)&_ZN5S98C12v2Ev,
  (VTBL_ENTRY)&_ZN5S98C12v3Ev,
  (VTBL_ENTRY)&_ZN5S98C12v4Ev,
};
extern VTBL_ENTRY _ZTI5S98C1[];
extern  VTBL_ENTRY _ZTV5S98C1[];
Class_Descriptor cd_S98C1 = {  "S98C1", // class name
  bases_S98C1, 6,
  &(vtc_S98C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,276), // object size
  NSPAIRA(_ZTI5S98C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S98C1),132, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S261C6  {
  int s261c6f0;
  __tsi64 s261c6f1;
  void *s261c6f2[4];
  int s261c6f3[2];
  void *s261c6f4;
  ::S3350C4_nt s261c6f5;
  void *s261c6f6[2];
  virtual  ~S261C6(); // _ZN6S261C6D1Ev
  virtual void  v6(); // _ZN6S261C62v6Ev
  virtual void  v7(); // _ZN6S261C62v7Ev
  virtual void  v8(); // _ZN6S261C62v8Ev
  virtual void  v9(); // _ZN6S261C62v9Ev
  virtual void  v10(); // _ZN6S261C63v10Ev
  virtual void  v11(); // _ZN6S261C63v11Ev
  virtual void  v12(); // _ZN6S261C63v12Ev
  virtual void  v13(); // _ZN6S261C63v13Ev
  virtual void  v14(); // _ZN6S261C63v14Ev
  virtual void  v15(); // _ZN6S261C63v15Ev
  virtual void  v16(); // _ZN6S261C63v16Ev
  virtual void  v17(); // _ZN6S261C63v17Ev
  virtual void  v18(); // _ZN6S261C63v18Ev
  virtual void  v19(); // _ZN6S261C63v19Ev
  virtual void  v20(); // _ZN6S261C63v20Ev
  virtual void  v21(); // _ZN6S261C63v21Ev
  virtual void  v22(); // _ZN6S261C63v22Ev
  virtual void  v23(); // _ZN6S261C63v23Ev
  virtual void  v24(); // _ZN6S261C63v24Ev
  virtual void  v25(); // _ZN6S261C63v25Ev
  virtual void  v26(); // _ZN6S261C63v26Ev
  virtual void  v27(); // _ZN6S261C63v27Ev
  virtual void  v28(); // _ZN6S261C63v28Ev
  virtual void  v29(); // _ZN6S261C63v29Ev
  virtual void  v30(); // _ZN6S261C63v30Ev
  virtual void  v31(); // _ZN6S261C63v31Ev
  virtual void  v32(); // _ZN6S261C63v32Ev
  virtual void  v33(); // _ZN6S261C63v33Ev
  virtual void  v34(); // _ZN6S261C63v34Ev
  virtual void  v35(); // _ZN6S261C63v35Ev
  virtual void  v36(); // _ZN6S261C63v36Ev
  virtual void  v37(); // _ZN6S261C63v37Ev
  virtual void  v38(); // _ZN6S261C63v38Ev
  virtual void  v39(); // _ZN6S261C63v39Ev
  virtual void  v40(); // _ZN6S261C63v40Ev
  virtual void  v41(); // _ZN6S261C63v41Ev
  virtual void  v42(); // _ZN6S261C63v42Ev
  virtual void  v43(); // _ZN6S261C63v43Ev
  virtual void  v44(); // _ZN6S261C63v44Ev
  virtual void  v45(); // _ZN6S261C63v45Ev
  virtual void  v46(); // _ZN6S261C63v46Ev
  virtual void  v47(); // _ZN6S261C63v47Ev
  virtual void  v48(); // _ZN6S261C63v48Ev
  virtual void  v49(); // _ZN6S261C63v49Ev
  virtual void  v50(); // _ZN6S261C63v50Ev
  virtual void  v51(); // _ZN6S261C63v51Ev
  virtual void  v52(); // _ZN6S261C63v52Ev
  virtual void  v53(); // _ZN6S261C63v53Ev
  virtual void  v54(); // _ZN6S261C63v54Ev
  virtual void  v55(); // _ZN6S261C63v55Ev
  virtual void  v56(); // _ZN6S261C63v56Ev
  virtual void  v57(); // _ZN6S261C63v57Ev
  virtual void  v58(); // _ZN6S261C63v58Ev
  virtual void  v59(); // _ZN6S261C63v59Ev
  virtual void  v60(); // _ZN6S261C63v60Ev
  virtual void  v61(); // _ZN6S261C63v61Ev
  virtual void  v62(); // _ZN6S261C63v62Ev
  virtual void  v63(); // _ZN6S261C63v63Ev
  virtual void  v64(); // _ZN6S261C63v64Ev
  virtual void  v65(); // _ZN6S261C63v65Ev
  virtual void  v66(); // _ZN6S261C63v66Ev
  virtual void  v67(); // _ZN6S261C63v67Ev
  virtual void  v68(); // _ZN6S261C63v68Ev
  virtual void  v69(); // _ZN6S261C63v69Ev
  S261C6(); // tgen
};
//SIG(-1 S261C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S261C6 ::~S261C6(){ note_dtor("S261C6", this);}
void  S261C6 ::v6(){vfunc_called(this, "_ZN6S261C62v6Ev");}
void  S261C6 ::v7(){vfunc_called(this, "_ZN6S261C62v7Ev");}
void  S261C6 ::v8(){vfunc_called(this, "_ZN6S261C62v8Ev");}
void  S261C6 ::v9(){vfunc_called(this, "_ZN6S261C62v9Ev");}
void  S261C6 ::v10(){vfunc_called(this, "_ZN6S261C63v10Ev");}
void  S261C6 ::v11(){vfunc_called(this, "_ZN6S261C63v11Ev");}
void  S261C6 ::v12(){vfunc_called(this, "_ZN6S261C63v12Ev");}
void  S261C6 ::v13(){vfunc_called(this, "_ZN6S261C63v13Ev");}
void  S261C6 ::v14(){vfunc_called(this, "_ZN6S261C63v14Ev");}
void  S261C6 ::v15(){vfunc_called(this, "_ZN6S261C63v15Ev");}
void  S261C6 ::v16(){vfunc_called(this, "_ZN6S261C63v16Ev");}
void  S261C6 ::v17(){vfunc_called(this, "_ZN6S261C63v17Ev");}
void  S261C6 ::v18(){vfunc_called(this, "_ZN6S261C63v18Ev");}
void  S261C6 ::v19(){vfunc_called(this, "_ZN6S261C63v19Ev");}
void  S261C6 ::v20(){vfunc_called(this, "_ZN6S261C63v20Ev");}
void  S261C6 ::v21(){vfunc_called(this, "_ZN6S261C63v21Ev");}
void  S261C6 ::v22(){vfunc_called(this, "_ZN6S261C63v22Ev");}
void  S261C6 ::v23(){vfunc_called(this, "_ZN6S261C63v23Ev");}
void  S261C6 ::v24(){vfunc_called(this, "_ZN6S261C63v24Ev");}
void  S261C6 ::v25(){vfunc_called(this, "_ZN6S261C63v25Ev");}
void  S261C6 ::v26(){vfunc_called(this, "_ZN6S261C63v26Ev");}
void  S261C6 ::v27(){vfunc_called(this, "_ZN6S261C63v27Ev");}
void  S261C6 ::v28(){vfunc_called(this, "_ZN6S261C63v28Ev");}
void  S261C6 ::v29(){vfunc_called(this, "_ZN6S261C63v29Ev");}
void  S261C6 ::v30(){vfunc_called(this, "_ZN6S261C63v30Ev");}
void  S261C6 ::v31(){vfunc_called(this, "_ZN6S261C63v31Ev");}
void  S261C6 ::v32(){vfunc_called(this, "_ZN6S261C63v32Ev");}
void  S261C6 ::v33(){vfunc_called(this, "_ZN6S261C63v33Ev");}
void  S261C6 ::v34(){vfunc_called(this, "_ZN6S261C63v34Ev");}
void  S261C6 ::v35(){vfunc_called(this, "_ZN6S261C63v35Ev");}
void  S261C6 ::v36(){vfunc_called(this, "_ZN6S261C63v36Ev");}
void  S261C6 ::v37(){vfunc_called(this, "_ZN6S261C63v37Ev");}
void  S261C6 ::v38(){vfunc_called(this, "_ZN6S261C63v38Ev");}
void  S261C6 ::v39(){vfunc_called(this, "_ZN6S261C63v39Ev");}
void  S261C6 ::v40(){vfunc_called(this, "_ZN6S261C63v40Ev");}
void  S261C6 ::v41(){vfunc_called(this, "_ZN6S261C63v41Ev");}
void  S261C6 ::v42(){vfunc_called(this, "_ZN6S261C63v42Ev");}
void  S261C6 ::v43(){vfunc_called(this, "_ZN6S261C63v43Ev");}
void  S261C6 ::v44(){vfunc_called(this, "_ZN6S261C63v44Ev");}
void  S261C6 ::v45(){vfunc_called(this, "_ZN6S261C63v45Ev");}
void  S261C6 ::v46(){vfunc_called(this, "_ZN6S261C63v46Ev");}
void  S261C6 ::v47(){vfunc_called(this, "_ZN6S261C63v47Ev");}
void  S261C6 ::v48(){vfunc_called(this, "_ZN6S261C63v48Ev");}
void  S261C6 ::v49(){vfunc_called(this, "_ZN6S261C63v49Ev");}
void  S261C6 ::v50(){vfunc_called(this, "_ZN6S261C63v50Ev");}
void  S261C6 ::v51(){vfunc_called(this, "_ZN6S261C63v51Ev");}
void  S261C6 ::v52(){vfunc_called(this, "_ZN6S261C63v52Ev");}
void  S261C6 ::v53(){vfunc_called(this, "_ZN6S261C63v53Ev");}
void  S261C6 ::v54(){vfunc_called(this, "_ZN6S261C63v54Ev");}
void  S261C6 ::v55(){vfunc_called(this, "_ZN6S261C63v55Ev");}
void  S261C6 ::v56(){vfunc_called(this, "_ZN6S261C63v56Ev");}
void  S261C6 ::v57(){vfunc_called(this, "_ZN6S261C63v57Ev");}
void  S261C6 ::v58(){vfunc_called(this, "_ZN6S261C63v58Ev");}
void  S261C6 ::v59(){vfunc_called(this, "_ZN6S261C63v59Ev");}
void  S261C6 ::v60(){vfunc_called(this, "_ZN6S261C63v60Ev");}
void  S261C6 ::v61(){vfunc_called(this, "_ZN6S261C63v61Ev");}
void  S261C6 ::v62(){vfunc_called(this, "_ZN6S261C63v62Ev");}
void  S261C6 ::v63(){vfunc_called(this, "_ZN6S261C63v63Ev");}
void  S261C6 ::v64(){vfunc_called(this, "_ZN6S261C63v64Ev");}
void  S261C6 ::v65(){vfunc_called(this, "_ZN6S261C63v65Ev");}
void  S261C6 ::v66(){vfunc_called(this, "_ZN6S261C63v66Ev");}
void  S261C6 ::v67(){vfunc_called(this, "_ZN6S261C63v67Ev");}
void  S261C6 ::v68(){vfunc_called(this, "_ZN6S261C63v68Ev");}
void  S261C6 ::v69(){vfunc_called(this, "_ZN6S261C63v69Ev");}
S261C6 ::S261C6(){ note_ctor("S261C6", this);} // tgen

static void Test_S261C6()
{
  extern Class_Descriptor cd_S261C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S261C6, buf);
    S261C6 *dp, &lv = *(dp=new (buf) S261C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S261C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C6)");
    check_field_offset(lv, s261c6f0, ABISELECT(8,4), "S261C6.s261c6f0");
    check_field_offset(lv, s261c6f1, ABISELECT(16,8), "S261C6.s261c6f1");
    check_field_offset(lv, s261c6f2, ABISELECT(24,16), "S261C6.s261c6f2");
    check_field_offset(lv, s261c6f3, ABISELECT(56,32), "S261C6.s261c6f3");
    check_field_offset(lv, s261c6f4, ABISELECT(64,40), "S261C6.s261c6f4");
    check_field_offset(lv, s261c6f5, ABISELECT(72,44), "S261C6.s261c6f5");
    check_field_offset(lv, s261c6f6, ABISELECT(80,52), "S261C6.s261c6f6");
    test_class_info(&lv, &cd_S261C6);
    dp->~S261C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C6(Test_S261C6, "S261C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S261C6C1Ev();
extern void _ZN6S261C6D1Ev();
Name_Map name_map_S261C6[] = {
  NSPAIR(_ZN6S261C6C1Ev),
  NSPAIR(_ZN6S261C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S261C6[];
extern void _ZN6S261C6D1Ev();
extern void _ZN6S261C6D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
static  VTBL_ENTRY vtc_S261C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C6[0]),
  (VTBL_ENTRY)&_ZN6S261C6D1Ev,
  (VTBL_ENTRY)&_ZN6S261C6D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
Class_Descriptor cd_S261C6 = {  "S261C6", // class name
  0,0,//no base classes
  &(vtc_S261C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S261C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S261C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S261C5  : S261C6 {
  int s261c5f0[2];
  void *s261c5f1;
  int s261c5f2[2];
  ::S287C8_nt s261c5f3;
  ::S287C8_nt s261c5f4;
  ::S2121C38 s261c5f5;
  ::S287C8_nt s261c5f6;
  unsigned int s261c5f7:1;
  unsigned int s261c5f8:1;
  unsigned int s261c5f9:1;
  unsigned int s261c5f10:1;
  unsigned int s261c5f11:1;
  int s261c5f12[2];
  virtual  ~S261C5(); // _ZN6S261C5D1Ev
  virtual void  v70(); // _ZN6S261C53v70Ev
  virtual void  v71(); // _ZN6S261C53v71Ev
  virtual void  v72(); // _ZN6S261C53v72Ev
  virtual void  v73(); // _ZN6S261C53v73Ev
  virtual void  v74(); // _ZN6S261C53v74Ev
  virtual void  v75(); // _ZN6S261C53v75Ev
  virtual void  v76(); // _ZN6S261C53v76Ev
  virtual void  v77(); // _ZN6S261C53v77Ev
  virtual void  v78(); // _ZN6S261C53v78Ev
  virtual void  v79(); // _ZN6S261C53v79Ev
  virtual void  v80(); // _ZN6S261C53v80Ev
  virtual void  v81(); // _ZN6S261C53v81Ev
  virtual void  v82(); // _ZN6S261C53v82Ev
  virtual void  v83(); // _ZN6S261C53v83Ev
  virtual void  v84(); // _ZN6S261C53v84Ev
  virtual void  v85(); // _ZN6S261C53v85Ev
  virtual void  v86(); // _ZN6S261C53v86Ev
  virtual void  v87(); // _ZN6S261C53v87Ev
  virtual void  v88(); // _ZN6S261C53v88Ev
  virtual void  v89(); // _ZN6S261C53v89Ev
  virtual void  v90(); // _ZN6S261C53v90Ev
  virtual void  v91(); // _ZN6S261C53v91Ev
  S261C5(); // tgen
};
//SIG(-1 S261C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S261C5 ::~S261C5(){ note_dtor("S261C5", this);}
void  S261C5 ::v70(){vfunc_called(this, "_ZN6S261C53v70Ev");}
void  S261C5 ::v71(){vfunc_called(this, "_ZN6S261C53v71Ev");}
void  S261C5 ::v72(){vfunc_called(this, "_ZN6S261C53v72Ev");}
void  S261C5 ::v73(){vfunc_called(this, "_ZN6S261C53v73Ev");}
void  S261C5 ::v74(){vfunc_called(this, "_ZN6S261C53v74Ev");}
void  S261C5 ::v75(){vfunc_called(this, "_ZN6S261C53v75Ev");}
void  S261C5 ::v76(){vfunc_called(this, "_ZN6S261C53v76Ev");}
void  S261C5 ::v77(){vfunc_called(this, "_ZN6S261C53v77Ev");}
void  S261C5 ::v78(){vfunc_called(this, "_ZN6S261C53v78Ev");}
void  S261C5 ::v79(){vfunc_called(this, "_ZN6S261C53v79Ev");}
void  S261C5 ::v80(){vfunc_called(this, "_ZN6S261C53v80Ev");}
void  S261C5 ::v81(){vfunc_called(this, "_ZN6S261C53v81Ev");}
void  S261C5 ::v82(){vfunc_called(this, "_ZN6S261C53v82Ev");}
void  S261C5 ::v83(){vfunc_called(this, "_ZN6S261C53v83Ev");}
void  S261C5 ::v84(){vfunc_called(this, "_ZN6S261C53v84Ev");}
void  S261C5 ::v85(){vfunc_called(this, "_ZN6S261C53v85Ev");}
void  S261C5 ::v86(){vfunc_called(this, "_ZN6S261C53v86Ev");}
void  S261C5 ::v87(){vfunc_called(this, "_ZN6S261C53v87Ev");}
void  S261C5 ::v88(){vfunc_called(this, "_ZN6S261C53v88Ev");}
void  S261C5 ::v89(){vfunc_called(this, "_ZN6S261C53v89Ev");}
void  S261C5 ::v90(){vfunc_called(this, "_ZN6S261C53v90Ev");}
void  S261C5 ::v91(){vfunc_called(this, "_ZN6S261C53v91Ev");}
S261C5 ::S261C5(){ note_ctor("S261C5", this);} // tgen

static void Test_S261C5()
{
  extern Class_Descriptor cd_S261C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S261C5, buf);
    S261C5 *dp, &lv = *(dp=new (buf) S261C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S261C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C5)");
    check_base_class_offset(lv, (S261C6*), 0, "S261C5");
    check_field_offset(lv, s261c5f0, ABISELECT(96,60), "S261C5.s261c5f0");
    check_field_offset(lv, s261c5f1, ABISELECT(104,68), "S261C5.s261c5f1");
    check_field_offset(lv, s261c5f2, ABISELECT(112,72), "S261C5.s261c5f2");
    check_field_offset(lv, s261c5f3, ABISELECT(120,80), "S261C5.s261c5f3");
    check_field_offset(lv, s261c5f4, ABISELECT(136,92), "S261C5.s261c5f4");
    check_field_offset(lv, s261c5f5, ABISELECT(152,104), "S261C5.s261c5f5");
    check_field_offset(lv, s261c5f6, ABISELECT(160,108), "S261C5.s261c5f6");
    set_bf_and_test(lv, s261c5f7, ABISELECT(176,120), 0, 1, 1, "S261C5");
    set_bf_and_test(lv, s261c5f8, ABISELECT(176,120), 1, 1, 1, "S261C5");
    set_bf_and_test(lv, s261c5f9, ABISELECT(176,120), 2, 1, 1, "S261C5");
    set_bf_and_test(lv, s261c5f10, ABISELECT(176,120), 3, 1, 1, "S261C5");
    set_bf_and_test(lv, s261c5f11, ABISELECT(176,120), 4, 1, 1, "S261C5");
    check_field_offset(lv, s261c5f12, ABISELECT(180,124), "S261C5.s261c5f12");
    test_class_info(&lv, &cd_S261C5);
    dp->~S261C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C5(Test_S261C5, "S261C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S261C5C1Ev();
extern void _ZN6S261C5D1Ev();
Name_Map name_map_S261C5[] = {
  NSPAIR(_ZN6S261C5C1Ev),
  NSPAIR(_ZN6S261C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
static Base_Class bases_S261C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S261C5[];
extern void _ZN6S261C5D1Ev();
extern void _ZN6S261C5D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
static  VTBL_ENTRY vtc_S261C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C5[0]),
  (VTBL_ENTRY)&_ZN6S261C5D1Ev,
  (VTBL_ENTRY)&_ZN6S261C5D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
};
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
Class_Descriptor cd_S261C5 = {  "S261C5", // class name
  bases_S261C5, 1,
  &(vtc_S261C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S261C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S261C4  : S261C5 {
  unsigned int s261c4f0:1;
  unsigned int s261c4f1:1;
  unsigned int s261c4f2:1;
  ::S3350C17 s261c4f3;
  ::S3350C11 s261c4f4;
  ::S3350C5_nt s261c4f5;
  ::S287C27 s261c4f6;
  int s261c4f7[3];
  virtual  ~S261C4(); // _ZN6S261C4D1Ev
  virtual void  v92(); // _ZN6S261C43v92Ev
  virtual void  v93(); // _ZN6S261C43v93Ev
  virtual void  v94(); // _ZN6S261C43v94Ev
  virtual void  v95(); // _ZN6S261C43v95Ev
  virtual void  v96(); // _ZN6S261C43v96Ev
  virtual void  v97(); // _ZN6S261C43v97Ev
  virtual void  v98(); // _ZN6S261C43v98Ev
  virtual void  v99(); // _ZN6S261C43v99Ev
  virtual void  v100(); // _ZN6S261C44v100Ev
  virtual void  v101(); // _ZN6S261C44v101Ev
  virtual void  v102(); // _ZN6S261C44v102Ev
  virtual void  v103(); // _ZN6S261C44v103Ev
  virtual void  v104(); // _ZN6S261C44v104Ev
  virtual void  v105(); // _ZN6S261C44v105Ev
  virtual void  v106(); // _ZN6S261C44v106Ev
  virtual void  v107(); // _ZN6S261C44v107Ev
  virtual void  v108(); // _ZN6S261C44v108Ev
  virtual void  v109(); // _ZN6S261C44v109Ev
  virtual void  v110(); // _ZN6S261C44v110Ev
  virtual void  v111(); // _ZN6S261C44v111Ev
  S261C4(); // tgen
};
//SIG(-1 S261C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S261C4 ::~S261C4(){ note_dtor("S261C4", this);}
void  S261C4 ::v92(){vfunc_called(this, "_ZN6S261C43v92Ev");}
void  S261C4 ::v93(){vfunc_called(this, "_ZN6S261C43v93Ev");}
void  S261C4 ::v94(){vfunc_called(this, "_ZN6S261C43v94Ev");}
void  S261C4 ::v95(){vfunc_called(this, "_ZN6S261C43v95Ev");}
void  S261C4 ::v96(){vfunc_called(this, "_ZN6S261C43v96Ev");}
void  S261C4 ::v97(){vfunc_called(this, "_ZN6S261C43v97Ev");}
void  S261C4 ::v98(){vfunc_called(this, "_ZN6S261C43v98Ev");}
void  S261C4 ::v99(){vfunc_called(this, "_ZN6S261C43v99Ev");}
void  S261C4 ::v100(){vfunc_called(this, "_ZN6S261C44v100Ev");}
void  S261C4 ::v101(){vfunc_called(this, "_ZN6S261C44v101Ev");}
void  S261C4 ::v102(){vfunc_called(this, "_ZN6S261C44v102Ev");}
void  S261C4 ::v103(){vfunc_called(this, "_ZN6S261C44v103Ev");}
void  S261C4 ::v104(){vfunc_called(this, "_ZN6S261C44v104Ev");}
void  S261C4 ::v105(){vfunc_called(this, "_ZN6S261C44v105Ev");}
void  S261C4 ::v106(){vfunc_called(this, "_ZN6S261C44v106Ev");}
void  S261C4 ::v107(){vfunc_called(this, "_ZN6S261C44v107Ev");}
void  S261C4 ::v108(){vfunc_called(this, "_ZN6S261C44v108Ev");}
void  S261C4 ::v109(){vfunc_called(this, "_ZN6S261C44v109Ev");}
void  S261C4 ::v110(){vfunc_called(this, "_ZN6S261C44v110Ev");}
void  S261C4 ::v111(){vfunc_called(this, "_ZN6S261C44v111Ev");}
S261C4 ::S261C4(){ note_ctor("S261C4", this);} // tgen

static void Test_S261C4()
{
  extern Class_Descriptor cd_S261C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S261C4, buf);
    S261C4 *dp, &lv = *(dp=new (buf) S261C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S261C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C4)");
    check_base_class_offset(lv, (S261C6*)(S261C5*), 0, "S261C4");
    check_base_class_offset(lv, (S261C5*), 0, "S261C4");
    set_bf_and_test(lv, s261c4f0, ABISELECT(188,132), 0, 1, 1, "S261C4");
    set_bf_and_test(lv, s261c4f1, ABISELECT(188,132), 1, 1, 1, "S261C4");
    set_bf_and_test(lv, s261c4f2, ABISELECT(188,132), 2, 1, 1, "S261C4");
    check_field_offset(lv, s261c4f3, ABISELECT(192,136), "S261C4.s261c4f3");
    check_field_offset(lv, s261c4f4, ABISELECT(208,148), "S261C4.s261c4f4");
    check_field_offset(lv, s261c4f5, ABISELECT(224,160), "S261C4.s261c4f5");
    check_field_offset(lv, s261c4f6, ABISELECT(240,172), "S261C4.s261c4f6");
    check_field_offset(lv, s261c4f7, ABISELECT(256,184), "S261C4.s261c4f7");
    test_class_info(&lv, &cd_S261C4);
    dp->~S261C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C4(Test_S261C4, "S261C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S261C4C1Ev();
extern void _ZN6S261C4D1Ev();
Name_Map name_map_S261C4[] = {
  NSPAIR(_ZN6S261C4C1Ev),
  NSPAIR(_ZN6S261C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
extern Class_Descriptor cd_S261C5;
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
static Base_Class bases_S261C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S261C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S261C4[];
extern void _ZN6S261C4D1Ev();
extern void _ZN6S261C4D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
extern void _ZN6S261C43v92Ev();
extern void _ZN6S261C43v93Ev();
extern void _ZN6S261C43v94Ev();
extern void _ZN6S261C43v95Ev();
extern void _ZN6S261C43v96Ev();
extern void _ZN6S261C43v97Ev();
extern void _ZN6S261C43v98Ev();
extern void _ZN6S261C43v99Ev();
extern void _ZN6S261C44v100Ev();
extern void _ZN6S261C44v101Ev();
extern void _ZN6S261C44v102Ev();
extern void _ZN6S261C44v103Ev();
extern void _ZN6S261C44v104Ev();
extern void _ZN6S261C44v105Ev();
extern void _ZN6S261C44v106Ev();
extern void _ZN6S261C44v107Ev();
extern void _ZN6S261C44v108Ev();
extern void _ZN6S261C44v109Ev();
extern void _ZN6S261C44v110Ev();
extern void _ZN6S261C44v111Ev();
static  VTBL_ENTRY vtc_S261C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C4[0]),
  (VTBL_ENTRY)&_ZN6S261C4D1Ev,
  (VTBL_ENTRY)&_ZN6S261C4D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
  (VTBL_ENTRY)&_ZN6S261C43v92Ev,
  (VTBL_ENTRY)&_ZN6S261C43v93Ev,
  (VTBL_ENTRY)&_ZN6S261C43v94Ev,
  (VTBL_ENTRY)&_ZN6S261C43v95Ev,
  (VTBL_ENTRY)&_ZN6S261C43v96Ev,
  (VTBL_ENTRY)&_ZN6S261C43v97Ev,
  (VTBL_ENTRY)&_ZN6S261C43v98Ev,
  (VTBL_ENTRY)&_ZN6S261C43v99Ev,
  (VTBL_ENTRY)&_ZN6S261C44v100Ev,
  (VTBL_ENTRY)&_ZN6S261C44v101Ev,
  (VTBL_ENTRY)&_ZN6S261C44v102Ev,
  (VTBL_ENTRY)&_ZN6S261C44v103Ev,
  (VTBL_ENTRY)&_ZN6S261C44v104Ev,
  (VTBL_ENTRY)&_ZN6S261C44v105Ev,
  (VTBL_ENTRY)&_ZN6S261C44v106Ev,
  (VTBL_ENTRY)&_ZN6S261C44v107Ev,
  (VTBL_ENTRY)&_ZN6S261C44v108Ev,
  (VTBL_ENTRY)&_ZN6S261C44v109Ev,
  (VTBL_ENTRY)&_ZN6S261C44v110Ev,
  (VTBL_ENTRY)&_ZN6S261C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S261C4[];
extern  VTBL_ENTRY _ZTV6S261C4[];
Class_Descriptor cd_S261C4 = {  "S261C4", // class name
  bases_S261C4, 2,
  &(vtc_S261C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S261C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S261C3  : S261C4 {
  ::S3350C4_nt s261c3f0;
  unsigned int s261c3f1:1;
  ::S287C23 s261c3f2;
  virtual  ~S261C3(); // _ZN6S261C3D1Ev
  virtual void  v112(); // _ZN6S261C34v112Ev
  virtual void  v113(); // _ZN6S261C34v113Ev
  virtual void  v114(); // _ZN6S261C34v114Ev
  virtual void  v115(); // _ZN6S261C34v115Ev
  S261C3(); // tgen
};
//SIG(-1 S261C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S261C3 ::~S261C3(){ note_dtor("S261C3", this);}
void  S261C3 ::v112(){vfunc_called(this, "_ZN6S261C34v112Ev");}
void  S261C3 ::v113(){vfunc_called(this, "_ZN6S261C34v113Ev");}
void  S261C3 ::v114(){vfunc_called(this, "_ZN6S261C34v114Ev");}
void  S261C3 ::v115(){vfunc_called(this, "_ZN6S261C34v115Ev");}
S261C3 ::S261C3(){ note_ctor("S261C3", this);} // tgen

static void Test_S261C3()
{
  extern Class_Descriptor cd_S261C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S261C3, buf);
    S261C3 *dp, &lv = *(dp=new (buf) S261C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S261C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C3)");
    check_base_class_offset(lv, (S261C6*)(S261C5*)(S261C4*), 0, "S261C3");
    check_base_class_offset(lv, (S261C5*)(S261C4*), 0, "S261C3");
    check_base_class_offset(lv, (S261C4*), 0, "S261C3");
    check_field_offset(lv, s261c3f0, ABISELECT(268,196), "S261C3.s261c3f0");
    set_bf_and_test(lv, s261c3f1, ABISELECT(276,204), 0, 1, 1, "S261C3");
    check_field_offset(lv, s261c3f2, ABISELECT(280,208), "S261C3.s261c3f2");
    test_class_info(&lv, &cd_S261C3);
    dp->~S261C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C3(Test_S261C3, "S261C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S261C3C1Ev();
extern void _ZN6S261C3D1Ev();
Name_Map name_map_S261C3[] = {
  NSPAIR(_ZN6S261C3C1Ev),
  NSPAIR(_ZN6S261C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
extern Class_Descriptor cd_S261C5;
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
extern Class_Descriptor cd_S261C4;
extern VTBL_ENTRY _ZTI6S261C4[];
extern  VTBL_ENTRY _ZTV6S261C4[];
static Base_Class bases_S261C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S261C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S261C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S261C3[];
extern void _ZN6S261C3D1Ev();
extern void _ZN6S261C3D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
extern void _ZN6S261C43v92Ev();
extern void _ZN6S261C43v93Ev();
extern void _ZN6S261C43v94Ev();
extern void _ZN6S261C43v95Ev();
extern void _ZN6S261C43v96Ev();
extern void _ZN6S261C43v97Ev();
extern void _ZN6S261C43v98Ev();
extern void _ZN6S261C43v99Ev();
extern void _ZN6S261C44v100Ev();
extern void _ZN6S261C44v101Ev();
extern void _ZN6S261C44v102Ev();
extern void _ZN6S261C44v103Ev();
extern void _ZN6S261C44v104Ev();
extern void _ZN6S261C44v105Ev();
extern void _ZN6S261C44v106Ev();
extern void _ZN6S261C44v107Ev();
extern void _ZN6S261C44v108Ev();
extern void _ZN6S261C44v109Ev();
extern void _ZN6S261C44v110Ev();
extern void _ZN6S261C44v111Ev();
extern void _ZN6S261C34v112Ev();
extern void _ZN6S261C34v113Ev();
extern void _ZN6S261C34v114Ev();
extern void _ZN6S261C34v115Ev();
static  VTBL_ENTRY vtc_S261C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C3[0]),
  (VTBL_ENTRY)&_ZN6S261C3D1Ev,
  (VTBL_ENTRY)&_ZN6S261C3D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
  (VTBL_ENTRY)&_ZN6S261C43v92Ev,
  (VTBL_ENTRY)&_ZN6S261C43v93Ev,
  (VTBL_ENTRY)&_ZN6S261C43v94Ev,
  (VTBL_ENTRY)&_ZN6S261C43v95Ev,
  (VTBL_ENTRY)&_ZN6S261C43v96Ev,
  (VTBL_ENTRY)&_ZN6S261C43v97Ev,
  (VTBL_ENTRY)&_ZN6S261C43v98Ev,
  (VTBL_ENTRY)&_ZN6S261C43v99Ev,
  (VTBL_ENTRY)&_ZN6S261C44v100Ev,
  (VTBL_ENTRY)&_ZN6S261C44v101Ev,
  (VTBL_ENTRY)&_ZN6S261C44v102Ev,
  (VTBL_ENTRY)&_ZN6S261C44v103Ev,
  (VTBL_ENTRY)&_ZN6S261C44v104Ev,
  (VTBL_ENTRY)&_ZN6S261C44v105Ev,
  (VTBL_ENTRY)&_ZN6S261C44v106Ev,
  (VTBL_ENTRY)&_ZN6S261C44v107Ev,
  (VTBL_ENTRY)&_ZN6S261C44v108Ev,
  (VTBL_ENTRY)&_ZN6S261C44v109Ev,
  (VTBL_ENTRY)&_ZN6S261C44v110Ev,
  (VTBL_ENTRY)&_ZN6S261C44v111Ev,
  (VTBL_ENTRY)&_ZN6S261C34v112Ev,
  (VTBL_ENTRY)&_ZN6S261C34v113Ev,
  (VTBL_ENTRY)&_ZN6S261C34v114Ev,
  (VTBL_ENTRY)&_ZN6S261C34v115Ev,
};
extern VTBL_ENTRY _ZTI6S261C3[];
extern  VTBL_ENTRY _ZTV6S261C3[];
Class_Descriptor cd_S261C3 = {  "S261C3", // class name
  bases_S261C3, 3,
  &(vtc_S261C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S261C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S261C2  : S261C3 {
  ::S287C19 s261c2f0;
  unsigned int s261c2f1:1;
  virtual  ~S261C2(); // _ZN6S261C2D1Ev
  virtual void  v116(); // _ZN6S261C24v116Ev
  virtual void  v117(); // _ZN6S261C24v117Ev
  virtual void  v118(); // _ZN6S261C24v118Ev
  virtual void  v119(); // _ZN6S261C24v119Ev
  virtual void  v120(); // _ZN6S261C24v120Ev
  virtual void  v121(); // _ZN6S261C24v121Ev
  virtual void  v122(); // _ZN6S261C24v122Ev
  S261C2(); // tgen
};
//SIG(-1 S261C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S261C2 ::~S261C2(){ note_dtor("S261C2", this);}
void  S261C2 ::v116(){vfunc_called(this, "_ZN6S261C24v116Ev");}
void  S261C2 ::v117(){vfunc_called(this, "_ZN6S261C24v117Ev");}
void  S261C2 ::v118(){vfunc_called(this, "_ZN6S261C24v118Ev");}
void  S261C2 ::v119(){vfunc_called(this, "_ZN6S261C24v119Ev");}
void  S261C2 ::v120(){vfunc_called(this, "_ZN6S261C24v120Ev");}
void  S261C2 ::v121(){vfunc_called(this, "_ZN6S261C24v121Ev");}
void  S261C2 ::v122(){vfunc_called(this, "_ZN6S261C24v122Ev");}
S261C2 ::S261C2(){ note_ctor("S261C2", this);} // tgen

static void Test_S261C2()
{
  extern Class_Descriptor cd_S261C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S261C2, buf);
    S261C2 *dp, &lv = *(dp=new (buf) S261C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S261C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C2)");
    check_base_class_offset(lv, (S261C6*)(S261C5*)(S261C4*)(S261C3*), 0, "S261C2");
    check_base_class_offset(lv, (S261C5*)(S261C4*)(S261C3*), 0, "S261C2");
    check_base_class_offset(lv, (S261C4*)(S261C3*), 0, "S261C2");
    check_base_class_offset(lv, (S261C3*), 0, "S261C2");
    check_field_offset(lv, s261c2f0, ABISELECT(296,220), "S261C2.s261c2f0");
    set_bf_and_test(lv, s261c2f1, ABISELECT(312,232), 0, 1, 1, "S261C2");
    test_class_info(&lv, &cd_S261C2);
    dp->~S261C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C2(Test_S261C2, "S261C2", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S261C2C1Ev();
extern void _ZN6S261C2D1Ev();
Name_Map name_map_S261C2[] = {
  NSPAIR(_ZN6S261C2C1Ev),
  NSPAIR(_ZN6S261C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
extern Class_Descriptor cd_S261C5;
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
extern Class_Descriptor cd_S261C4;
extern VTBL_ENTRY _ZTI6S261C4[];
extern  VTBL_ENTRY _ZTV6S261C4[];
extern Class_Descriptor cd_S261C3;
extern VTBL_ENTRY _ZTI6S261C3[];
extern  VTBL_ENTRY _ZTV6S261C3[];
static Base_Class bases_S261C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S261C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S261C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S261C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S261C2[];
extern void _ZN6S261C2D1Ev();
extern void _ZN6S261C2D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
extern void _ZN6S261C43v92Ev();
extern void _ZN6S261C43v93Ev();
extern void _ZN6S261C43v94Ev();
extern void _ZN6S261C43v95Ev();
extern void _ZN6S261C43v96Ev();
extern void _ZN6S261C43v97Ev();
extern void _ZN6S261C43v98Ev();
extern void _ZN6S261C43v99Ev();
extern void _ZN6S261C44v100Ev();
extern void _ZN6S261C44v101Ev();
extern void _ZN6S261C44v102Ev();
extern void _ZN6S261C44v103Ev();
extern void _ZN6S261C44v104Ev();
extern void _ZN6S261C44v105Ev();
extern void _ZN6S261C44v106Ev();
extern void _ZN6S261C44v107Ev();
extern void _ZN6S261C44v108Ev();
extern void _ZN6S261C44v109Ev();
extern void _ZN6S261C44v110Ev();
extern void _ZN6S261C44v111Ev();
extern void _ZN6S261C34v112Ev();
extern void _ZN6S261C34v113Ev();
extern void _ZN6S261C34v114Ev();
extern void _ZN6S261C34v115Ev();
extern void _ZN6S261C24v116Ev();
extern void _ZN6S261C24v117Ev();
extern void _ZN6S261C24v118Ev();
extern void _ZN6S261C24v119Ev();
extern void _ZN6S261C24v120Ev();
extern void _ZN6S261C24v121Ev();
extern void _ZN6S261C24v122Ev();
static  VTBL_ENTRY vtc_S261C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C2[0]),
  (VTBL_ENTRY)&_ZN6S261C2D1Ev,
  (VTBL_ENTRY)&_ZN6S261C2D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
  (VTBL_ENTRY)&_ZN6S261C43v92Ev,
  (VTBL_ENTRY)&_ZN6S261C43v93Ev,
  (VTBL_ENTRY)&_ZN6S261C43v94Ev,
  (VTBL_ENTRY)&_ZN6S261C43v95Ev,
  (VTBL_ENTRY)&_ZN6S261C43v96Ev,
  (VTBL_ENTRY)&_ZN6S261C43v97Ev,
  (VTBL_ENTRY)&_ZN6S261C43v98Ev,
  (VTBL_ENTRY)&_ZN6S261C43v99Ev,
  (VTBL_ENTRY)&_ZN6S261C44v100Ev,
  (VTBL_ENTRY)&_ZN6S261C44v101Ev,
  (VTBL_ENTRY)&_ZN6S261C44v102Ev,
  (VTBL_ENTRY)&_ZN6S261C44v103Ev,
  (VTBL_ENTRY)&_ZN6S261C44v104Ev,
  (VTBL_ENTRY)&_ZN6S261C44v105Ev,
  (VTBL_ENTRY)&_ZN6S261C44v106Ev,
  (VTBL_ENTRY)&_ZN6S261C44v107Ev,
  (VTBL_ENTRY)&_ZN6S261C44v108Ev,
  (VTBL_ENTRY)&_ZN6S261C44v109Ev,
  (VTBL_ENTRY)&_ZN6S261C44v110Ev,
  (VTBL_ENTRY)&_ZN6S261C44v111Ev,
  (VTBL_ENTRY)&_ZN6S261C34v112Ev,
  (VTBL_ENTRY)&_ZN6S261C34v113Ev,
  (VTBL_ENTRY)&_ZN6S261C34v114Ev,
  (VTBL_ENTRY)&_ZN6S261C34v115Ev,
  (VTBL_ENTRY)&_ZN6S261C24v116Ev,
  (VTBL_ENTRY)&_ZN6S261C24v117Ev,
  (VTBL_ENTRY)&_ZN6S261C24v118Ev,
  (VTBL_ENTRY)&_ZN6S261C24v119Ev,
  (VTBL_ENTRY)&_ZN6S261C24v120Ev,
  (VTBL_ENTRY)&_ZN6S261C24v121Ev,
  (VTBL_ENTRY)&_ZN6S261C24v122Ev,
};
extern VTBL_ENTRY _ZTI6S261C2[];
extern  VTBL_ENTRY _ZTV6S261C2[];
Class_Descriptor cd_S261C2 = {  "S261C2", // class name
  bases_S261C2, 4,
  &(vtc_S261C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S261C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C2),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S261C1  : S261C2 {
  int s261c1f0[4];
  ::S2121C38 s261c1f1;
  int s261c1f2[2];
  ::S3350C13_nt s261c1f3;
  int s261c1f4[6];
  ::S2121C38 s261c1f5;
  int s261c1f6[2];
  ::S3350C13_nt s261c1f7;
  virtual  ~S261C1(); // _ZN6S261C1D1Ev
  virtual void  v1(); // _ZN6S261C12v1Ev
  virtual void  v2(); // _ZN6S261C12v2Ev
  virtual void  v3(); // _ZN6S261C12v3Ev
  virtual void  v4(); // _ZN6S261C12v4Ev
  virtual void  v5(); // _ZN6S261C12v5Ev
  S261C1(); // tgen
};
//SIG(1 S261C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v112 v113 v114 v115 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v116 v117 v118 v119 v120 v121 v122 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 Fi[4] FC12 Fi[2] FC25{ m Fi[3]} Fi[6] FC12 Fi[2] FC25}


 S261C1 ::~S261C1(){ note_dtor("S261C1", this);}
void  S261C1 ::v1(){vfunc_called(this, "_ZN6S261C12v1Ev");}
void  S261C1 ::v2(){vfunc_called(this, "_ZN6S261C12v2Ev");}
void  S261C1 ::v3(){vfunc_called(this, "_ZN6S261C12v3Ev");}
void  S261C1 ::v4(){vfunc_called(this, "_ZN6S261C12v4Ev");}
void  S261C1 ::v5(){vfunc_called(this, "_ZN6S261C12v5Ev");}
S261C1 ::S261C1(){ note_ctor("S261C1", this);} // tgen

static void Test_S261C1()
{
  extern Class_Descriptor cd_S261C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,82)];
    init_test(&cd_S261C1, buf);
    S261C1 *dp, &lv = *(dp=new (buf) S261C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,324), "sizeof(S261C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S261C1)");
    check_base_class_offset(lv, (S261C6*)(S261C5*)(S261C4*)(S261C3*)(S261C2*), 0, "S261C1");
    check_base_class_offset(lv, (S261C5*)(S261C4*)(S261C3*)(S261C2*), 0, "S261C1");
    check_base_class_offset(lv, (S261C4*)(S261C3*)(S261C2*), 0, "S261C1");
    check_base_class_offset(lv, (S261C3*)(S261C2*), 0, "S261C1");
    check_base_class_offset(lv, (S261C2*), 0, "S261C1");
    check_field_offset(lv, s261c1f0, ABISELECT(316,236), "S261C1.s261c1f0");
    check_field_offset(lv, s261c1f1, ABISELECT(332,252), "S261C1.s261c1f1");
    check_field_offset(lv, s261c1f2, ABISELECT(336,256), "S261C1.s261c1f2");
    check_field_offset(lv, s261c1f3, ABISELECT(344,264), "S261C1.s261c1f3");
    check_field_offset(lv, s261c1f4, ABISELECT(356,276), "S261C1.s261c1f4");
    check_field_offset(lv, s261c1f5, ABISELECT(380,300), "S261C1.s261c1f5");
    check_field_offset(lv, s261c1f6, ABISELECT(384,304), "S261C1.s261c1f6");
    check_field_offset(lv, s261c1f7, ABISELECT(392,312), "S261C1.s261c1f7");
    test_class_info(&lv, &cd_S261C1);
    dp->~S261C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS261C1(Test_S261C1, "S261C1", ABISELECT(408,324));

#else // __cplusplus

extern void _ZN6S261C1C1Ev();
extern void _ZN6S261C1D1Ev();
Name_Map name_map_S261C1[] = {
  NSPAIR(_ZN6S261C1C1Ev),
  NSPAIR(_ZN6S261C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S261C6;
extern VTBL_ENTRY _ZTI6S261C6[];
extern  VTBL_ENTRY _ZTV6S261C6[];
extern Class_Descriptor cd_S261C5;
extern VTBL_ENTRY _ZTI6S261C5[];
extern  VTBL_ENTRY _ZTV6S261C5[];
extern Class_Descriptor cd_S261C4;
extern VTBL_ENTRY _ZTI6S261C4[];
extern  VTBL_ENTRY _ZTV6S261C4[];
extern Class_Descriptor cd_S261C3;
extern VTBL_ENTRY _ZTI6S261C3[];
extern  VTBL_ENTRY _ZTV6S261C3[];
extern Class_Descriptor cd_S261C2;
extern VTBL_ENTRY _ZTI6S261C2[];
extern  VTBL_ENTRY _ZTV6S261C2[];
static Base_Class bases_S261C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S261C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S261C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S261C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S261C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S261C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S261C1[];
extern void _ZN6S261C1D1Ev();
extern void _ZN6S261C1D0Ev();
extern void _ZN6S261C62v6Ev();
extern void _ZN6S261C62v7Ev();
extern void _ZN6S261C62v8Ev();
extern void _ZN6S261C62v9Ev();
extern void _ZN6S261C63v10Ev();
extern void _ZN6S261C63v11Ev();
extern void _ZN6S261C63v12Ev();
extern void _ZN6S261C63v13Ev();
extern void _ZN6S261C63v14Ev();
extern void _ZN6S261C63v15Ev();
extern void _ZN6S261C63v16Ev();
extern void _ZN6S261C63v17Ev();
extern void _ZN6S261C63v18Ev();
extern void _ZN6S261C63v19Ev();
extern void _ZN6S261C63v20Ev();
extern void _ZN6S261C63v21Ev();
extern void _ZN6S261C63v22Ev();
extern void _ZN6S261C63v23Ev();
extern void _ZN6S261C63v24Ev();
extern void _ZN6S261C63v25Ev();
extern void _ZN6S261C63v26Ev();
extern void _ZN6S261C63v27Ev();
extern void _ZN6S261C63v28Ev();
extern void _ZN6S261C63v29Ev();
extern void _ZN6S261C63v30Ev();
extern void _ZN6S261C63v31Ev();
extern void _ZN6S261C63v32Ev();
extern void _ZN6S261C63v33Ev();
extern void _ZN6S261C63v34Ev();
extern void _ZN6S261C63v35Ev();
extern void _ZN6S261C63v36Ev();
extern void _ZN6S261C63v37Ev();
extern void _ZN6S261C63v38Ev();
extern void _ZN6S261C63v39Ev();
extern void _ZN6S261C63v40Ev();
extern void _ZN6S261C63v41Ev();
extern void _ZN6S261C63v42Ev();
extern void _ZN6S261C63v43Ev();
extern void _ZN6S261C63v44Ev();
extern void _ZN6S261C63v45Ev();
extern void _ZN6S261C63v46Ev();
extern void _ZN6S261C63v47Ev();
extern void _ZN6S261C63v48Ev();
extern void _ZN6S261C63v49Ev();
extern void _ZN6S261C63v50Ev();
extern void _ZN6S261C63v51Ev();
extern void _ZN6S261C63v52Ev();
extern void _ZN6S261C63v53Ev();
extern void _ZN6S261C63v54Ev();
extern void _ZN6S261C63v55Ev();
extern void _ZN6S261C63v56Ev();
extern void _ZN6S261C63v57Ev();
extern void _ZN6S261C63v58Ev();
extern void _ZN6S261C63v59Ev();
extern void _ZN6S261C63v60Ev();
extern void _ZN6S261C63v61Ev();
extern void _ZN6S261C63v62Ev();
extern void _ZN6S261C63v63Ev();
extern void _ZN6S261C63v64Ev();
extern void _ZN6S261C63v65Ev();
extern void _ZN6S261C63v66Ev();
extern void _ZN6S261C63v67Ev();
extern void _ZN6S261C63v68Ev();
extern void _ZN6S261C63v69Ev();
extern void _ZN6S261C53v70Ev();
extern void _ZN6S261C53v71Ev();
extern void _ZN6S261C53v72Ev();
extern void _ZN6S261C53v73Ev();
extern void _ZN6S261C53v74Ev();
extern void _ZN6S261C53v75Ev();
extern void _ZN6S261C53v76Ev();
extern void _ZN6S261C53v77Ev();
extern void _ZN6S261C53v78Ev();
extern void _ZN6S261C53v79Ev();
extern void _ZN6S261C53v80Ev();
extern void _ZN6S261C53v81Ev();
extern void _ZN6S261C53v82Ev();
extern void _ZN6S261C53v83Ev();
extern void _ZN6S261C53v84Ev();
extern void _ZN6S261C53v85Ev();
extern void _ZN6S261C53v86Ev();
extern void _ZN6S261C53v87Ev();
extern void _ZN6S261C53v88Ev();
extern void _ZN6S261C53v89Ev();
extern void _ZN6S261C53v90Ev();
extern void _ZN6S261C53v91Ev();
extern void _ZN6S261C43v92Ev();
extern void _ZN6S261C43v93Ev();
extern void _ZN6S261C43v94Ev();
extern void _ZN6S261C43v95Ev();
extern void _ZN6S261C43v96Ev();
extern void _ZN6S261C43v97Ev();
extern void _ZN6S261C43v98Ev();
extern void _ZN6S261C43v99Ev();
extern void _ZN6S261C44v100Ev();
extern void _ZN6S261C44v101Ev();
extern void _ZN6S261C44v102Ev();
extern void _ZN6S261C44v103Ev();
extern void _ZN6S261C44v104Ev();
extern void _ZN6S261C44v105Ev();
extern void _ZN6S261C44v106Ev();
extern void _ZN6S261C44v107Ev();
extern void _ZN6S261C44v108Ev();
extern void _ZN6S261C44v109Ev();
extern void _ZN6S261C44v110Ev();
extern void _ZN6S261C44v111Ev();
extern void _ZN6S261C34v112Ev();
extern void _ZN6S261C34v113Ev();
extern void _ZN6S261C34v114Ev();
extern void _ZN6S261C34v115Ev();
extern void _ZN6S261C24v116Ev();
extern void _ZN6S261C24v117Ev();
extern void _ZN6S261C24v118Ev();
extern void _ZN6S261C24v119Ev();
extern void _ZN6S261C24v120Ev();
extern void _ZN6S261C24v121Ev();
extern void _ZN6S261C24v122Ev();
extern void _ZN6S261C12v1Ev();
extern void _ZN6S261C12v2Ev();
extern void _ZN6S261C12v3Ev();
extern void _ZN6S261C12v4Ev();
extern void _ZN6S261C12v5Ev();
static  VTBL_ENTRY vtc_S261C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S261C1[0]),
  (VTBL_ENTRY)&_ZN6S261C1D1Ev,
  (VTBL_ENTRY)&_ZN6S261C1D0Ev,
  (VTBL_ENTRY)&_ZN6S261C62v6Ev,
  (VTBL_ENTRY)&_ZN6S261C62v7Ev,
  (VTBL_ENTRY)&_ZN6S261C62v8Ev,
  (VTBL_ENTRY)&_ZN6S261C62v9Ev,
  (VTBL_ENTRY)&_ZN6S261C63v10Ev,
  (VTBL_ENTRY)&_ZN6S261C63v11Ev,
  (VTBL_ENTRY)&_ZN6S261C63v12Ev,
  (VTBL_ENTRY)&_ZN6S261C63v13Ev,
  (VTBL_ENTRY)&_ZN6S261C63v14Ev,
  (VTBL_ENTRY)&_ZN6S261C63v15Ev,
  (VTBL_ENTRY)&_ZN6S261C63v16Ev,
  (VTBL_ENTRY)&_ZN6S261C63v17Ev,
  (VTBL_ENTRY)&_ZN6S261C63v18Ev,
  (VTBL_ENTRY)&_ZN6S261C63v19Ev,
  (VTBL_ENTRY)&_ZN6S261C63v20Ev,
  (VTBL_ENTRY)&_ZN6S261C63v21Ev,
  (VTBL_ENTRY)&_ZN6S261C63v22Ev,
  (VTBL_ENTRY)&_ZN6S261C63v23Ev,
  (VTBL_ENTRY)&_ZN6S261C63v24Ev,
  (VTBL_ENTRY)&_ZN6S261C63v25Ev,
  (VTBL_ENTRY)&_ZN6S261C63v26Ev,
  (VTBL_ENTRY)&_ZN6S261C63v27Ev,
  (VTBL_ENTRY)&_ZN6S261C63v28Ev,
  (VTBL_ENTRY)&_ZN6S261C63v29Ev,
  (VTBL_ENTRY)&_ZN6S261C63v30Ev,
  (VTBL_ENTRY)&_ZN6S261C63v31Ev,
  (VTBL_ENTRY)&_ZN6S261C63v32Ev,
  (VTBL_ENTRY)&_ZN6S261C63v33Ev,
  (VTBL_ENTRY)&_ZN6S261C63v34Ev,
  (VTBL_ENTRY)&_ZN6S261C63v35Ev,
  (VTBL_ENTRY)&_ZN6S261C63v36Ev,
  (VTBL_ENTRY)&_ZN6S261C63v37Ev,
  (VTBL_ENTRY)&_ZN6S261C63v38Ev,
  (VTBL_ENTRY)&_ZN6S261C63v39Ev,
  (VTBL_ENTRY)&_ZN6S261C63v40Ev,
  (VTBL_ENTRY)&_ZN6S261C63v41Ev,
  (VTBL_ENTRY)&_ZN6S261C63v42Ev,
  (VTBL_ENTRY)&_ZN6S261C63v43Ev,
  (VTBL_ENTRY)&_ZN6S261C63v44Ev,
  (VTBL_ENTRY)&_ZN6S261C63v45Ev,
  (VTBL_ENTRY)&_ZN6S261C63v46Ev,
  (VTBL_ENTRY)&_ZN6S261C63v47Ev,
  (VTBL_ENTRY)&_ZN6S261C63v48Ev,
  (VTBL_ENTRY)&_ZN6S261C63v49Ev,
  (VTBL_ENTRY)&_ZN6S261C63v50Ev,
  (VTBL_ENTRY)&_ZN6S261C63v51Ev,
  (VTBL_ENTRY)&_ZN6S261C63v52Ev,
  (VTBL_ENTRY)&_ZN6S261C63v53Ev,
  (VTBL_ENTRY)&_ZN6S261C63v54Ev,
  (VTBL_ENTRY)&_ZN6S261C63v55Ev,
  (VTBL_ENTRY)&_ZN6S261C63v56Ev,
  (VTBL_ENTRY)&_ZN6S261C63v57Ev,
  (VTBL_ENTRY)&_ZN6S261C63v58Ev,
  (VTBL_ENTRY)&_ZN6S261C63v59Ev,
  (VTBL_ENTRY)&_ZN6S261C63v60Ev,
  (VTBL_ENTRY)&_ZN6S261C63v61Ev,
  (VTBL_ENTRY)&_ZN6S261C63v62Ev,
  (VTBL_ENTRY)&_ZN6S261C63v63Ev,
  (VTBL_ENTRY)&_ZN6S261C63v64Ev,
  (VTBL_ENTRY)&_ZN6S261C63v65Ev,
  (VTBL_ENTRY)&_ZN6S261C63v66Ev,
  (VTBL_ENTRY)&_ZN6S261C63v67Ev,
  (VTBL_ENTRY)&_ZN6S261C63v68Ev,
  (VTBL_ENTRY)&_ZN6S261C63v69Ev,
  (VTBL_ENTRY)&_ZN6S261C53v70Ev,
  (VTBL_ENTRY)&_ZN6S261C53v71Ev,
  (VTBL_ENTRY)&_ZN6S261C53v72Ev,
  (VTBL_ENTRY)&_ZN6S261C53v73Ev,
  (VTBL_ENTRY)&_ZN6S261C53v74Ev,
  (VTBL_ENTRY)&_ZN6S261C53v75Ev,
  (VTBL_ENTRY)&_ZN6S261C53v76Ev,
  (VTBL_ENTRY)&_ZN6S261C53v77Ev,
  (VTBL_ENTRY)&_ZN6S261C53v78Ev,
  (VTBL_ENTRY)&_ZN6S261C53v79Ev,
  (VTBL_ENTRY)&_ZN6S261C53v80Ev,
  (VTBL_ENTRY)&_ZN6S261C53v81Ev,
  (VTBL_ENTRY)&_ZN6S261C53v82Ev,
  (VTBL_ENTRY)&_ZN6S261C53v83Ev,
  (VTBL_ENTRY)&_ZN6S261C53v84Ev,
  (VTBL_ENTRY)&_ZN6S261C53v85Ev,
  (VTBL_ENTRY)&_ZN6S261C53v86Ev,
  (VTBL_ENTRY)&_ZN6S261C53v87Ev,
  (VTBL_ENTRY)&_ZN6S261C53v88Ev,
  (VTBL_ENTRY)&_ZN6S261C53v89Ev,
  (VTBL_ENTRY)&_ZN6S261C53v90Ev,
  (VTBL_ENTRY)&_ZN6S261C53v91Ev,
  (VTBL_ENTRY)&_ZN6S261C43v92Ev,
  (VTBL_ENTRY)&_ZN6S261C43v93Ev,
  (VTBL_ENTRY)&_ZN6S261C43v94Ev,
  (VTBL_ENTRY)&_ZN6S261C43v95Ev,
  (VTBL_ENTRY)&_ZN6S261C43v96Ev,
  (VTBL_ENTRY)&_ZN6S261C43v97Ev,
  (VTBL_ENTRY)&_ZN6S261C43v98Ev,
  (VTBL_ENTRY)&_ZN6S261C43v99Ev,
  (VTBL_ENTRY)&_ZN6S261C44v100Ev,
  (VTBL_ENTRY)&_ZN6S261C44v101Ev,
  (VTBL_ENTRY)&_ZN6S261C44v102Ev,
  (VTBL_ENTRY)&_ZN6S261C44v103Ev,
  (VTBL_ENTRY)&_ZN6S261C44v104Ev,
  (VTBL_ENTRY)&_ZN6S261C44v105Ev,
  (VTBL_ENTRY)&_ZN6S261C44v106Ev,
  (VTBL_ENTRY)&_ZN6S261C44v107Ev,
  (VTBL_ENTRY)&_ZN6S261C44v108Ev,
  (VTBL_ENTRY)&_ZN6S261C44v109Ev,
  (VTBL_ENTRY)&_ZN6S261C44v110Ev,
  (VTBL_ENTRY)&_ZN6S261C44v111Ev,
  (VTBL_ENTRY)&_ZN6S261C34v112Ev,
  (VTBL_ENTRY)&_ZN6S261C34v113Ev,
  (VTBL_ENTRY)&_ZN6S261C34v114Ev,
  (VTBL_ENTRY)&_ZN6S261C34v115Ev,
  (VTBL_ENTRY)&_ZN6S261C24v116Ev,
  (VTBL_ENTRY)&_ZN6S261C24v117Ev,
  (VTBL_ENTRY)&_ZN6S261C24v118Ev,
  (VTBL_ENTRY)&_ZN6S261C24v119Ev,
  (VTBL_ENTRY)&_ZN6S261C24v120Ev,
  (VTBL_ENTRY)&_ZN6S261C24v121Ev,
  (VTBL_ENTRY)&_ZN6S261C24v122Ev,
  (VTBL_ENTRY)&_ZN6S261C12v1Ev,
  (VTBL_ENTRY)&_ZN6S261C12v2Ev,
  (VTBL_ENTRY)&_ZN6S261C12v3Ev,
  (VTBL_ENTRY)&_ZN6S261C12v4Ev,
  (VTBL_ENTRY)&_ZN6S261C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S261C1[];
extern  VTBL_ENTRY _ZTV6S261C1[];
Class_Descriptor cd_S261C1 = {  "S261C1", // class name
  bases_S261C1, 5,
  &(vtc_S261C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,324), // object size
  NSPAIRA(_ZTI6S261C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S261C1),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C6  {
  int s260c6f0;
  __tsi64 s260c6f1;
  void *s260c6f2[4];
  int s260c6f3[2];
  void *s260c6f4;
  ::S3350C4_nt s260c6f5;
  void *s260c6f6[2];
  virtual  ~S260C6(); // _ZN6S260C6D1Ev
  virtual void  v6(); // _ZN6S260C62v6Ev
  virtual void  v7(); // _ZN6S260C62v7Ev
  virtual void  v8(); // _ZN6S260C62v8Ev
  virtual void  v9(); // _ZN6S260C62v9Ev
  virtual void  v10(); // _ZN6S260C63v10Ev
  virtual void  v11(); // _ZN6S260C63v11Ev
  virtual void  v12(); // _ZN6S260C63v12Ev
  virtual void  v13(); // _ZN6S260C63v13Ev
  virtual void  v14(); // _ZN6S260C63v14Ev
  virtual void  v15(); // _ZN6S260C63v15Ev
  virtual void  v16(); // _ZN6S260C63v16Ev
  virtual void  v17(); // _ZN6S260C63v17Ev
  virtual void  v18(); // _ZN6S260C63v18Ev
  virtual void  v19(); // _ZN6S260C63v19Ev
  virtual void  v20(); // _ZN6S260C63v20Ev
  virtual void  v21(); // _ZN6S260C63v21Ev
  virtual void  v22(); // _ZN6S260C63v22Ev
  virtual void  v23(); // _ZN6S260C63v23Ev
  virtual void  v24(); // _ZN6S260C63v24Ev
  virtual void  v25(); // _ZN6S260C63v25Ev
  virtual void  v26(); // _ZN6S260C63v26Ev
  virtual void  v27(); // _ZN6S260C63v27Ev
  virtual void  v28(); // _ZN6S260C63v28Ev
  virtual void  v29(); // _ZN6S260C63v29Ev
  virtual void  v30(); // _ZN6S260C63v30Ev
  virtual void  v31(); // _ZN6S260C63v31Ev
  virtual void  v32(); // _ZN6S260C63v32Ev
  virtual void  v33(); // _ZN6S260C63v33Ev
  virtual void  v34(); // _ZN6S260C63v34Ev
  virtual void  v35(); // _ZN6S260C63v35Ev
  virtual void  v36(); // _ZN6S260C63v36Ev
  virtual void  v37(); // _ZN6S260C63v37Ev
  virtual void  v38(); // _ZN6S260C63v38Ev
  virtual void  v39(); // _ZN6S260C63v39Ev
  virtual void  v40(); // _ZN6S260C63v40Ev
  virtual void  v41(); // _ZN6S260C63v41Ev
  virtual void  v42(); // _ZN6S260C63v42Ev
  virtual void  v43(); // _ZN6S260C63v43Ev
  virtual void  v44(); // _ZN6S260C63v44Ev
  virtual void  v45(); // _ZN6S260C63v45Ev
  virtual void  v46(); // _ZN6S260C63v46Ev
  virtual void  v47(); // _ZN6S260C63v47Ev
  virtual void  v48(); // _ZN6S260C63v48Ev
  virtual void  v49(); // _ZN6S260C63v49Ev
  virtual void  v50(); // _ZN6S260C63v50Ev
  virtual void  v51(); // _ZN6S260C63v51Ev
  virtual void  v52(); // _ZN6S260C63v52Ev
  virtual void  v53(); // _ZN6S260C63v53Ev
  virtual void  v54(); // _ZN6S260C63v54Ev
  virtual void  v55(); // _ZN6S260C63v55Ev
  virtual void  v56(); // _ZN6S260C63v56Ev
  virtual void  v57(); // _ZN6S260C63v57Ev
  virtual void  v58(); // _ZN6S260C63v58Ev
  virtual void  v59(); // _ZN6S260C63v59Ev
  virtual void  v60(); // _ZN6S260C63v60Ev
  virtual void  v61(); // _ZN6S260C63v61Ev
  virtual void  v62(); // _ZN6S260C63v62Ev
  virtual void  v63(); // _ZN6S260C63v63Ev
  virtual void  v64(); // _ZN6S260C63v64Ev
  virtual void  v65(); // _ZN6S260C63v65Ev
  virtual void  v66(); // _ZN6S260C63v66Ev
  virtual void  v67(); // _ZN6S260C63v67Ev
  virtual void  v68(); // _ZN6S260C63v68Ev
  virtual void  v69(); // _ZN6S260C63v69Ev
  S260C6(); // tgen
};
//SIG(-1 S260C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S260C6 ::~S260C6(){ note_dtor("S260C6", this);}
void  S260C6 ::v6(){vfunc_called(this, "_ZN6S260C62v6Ev");}
void  S260C6 ::v7(){vfunc_called(this, "_ZN6S260C62v7Ev");}
void  S260C6 ::v8(){vfunc_called(this, "_ZN6S260C62v8Ev");}
void  S260C6 ::v9(){vfunc_called(this, "_ZN6S260C62v9Ev");}
void  S260C6 ::v10(){vfunc_called(this, "_ZN6S260C63v10Ev");}
void  S260C6 ::v11(){vfunc_called(this, "_ZN6S260C63v11Ev");}
void  S260C6 ::v12(){vfunc_called(this, "_ZN6S260C63v12Ev");}
void  S260C6 ::v13(){vfunc_called(this, "_ZN6S260C63v13Ev");}
void  S260C6 ::v14(){vfunc_called(this, "_ZN6S260C63v14Ev");}
void  S260C6 ::v15(){vfunc_called(this, "_ZN6S260C63v15Ev");}
void  S260C6 ::v16(){vfunc_called(this, "_ZN6S260C63v16Ev");}
void  S260C6 ::v17(){vfunc_called(this, "_ZN6S260C63v17Ev");}
void  S260C6 ::v18(){vfunc_called(this, "_ZN6S260C63v18Ev");}
void  S260C6 ::v19(){vfunc_called(this, "_ZN6S260C63v19Ev");}
void  S260C6 ::v20(){vfunc_called(this, "_ZN6S260C63v20Ev");}
void  S260C6 ::v21(){vfunc_called(this, "_ZN6S260C63v21Ev");}
void  S260C6 ::v22(){vfunc_called(this, "_ZN6S260C63v22Ev");}
void  S260C6 ::v23(){vfunc_called(this, "_ZN6S260C63v23Ev");}
void  S260C6 ::v24(){vfunc_called(this, "_ZN6S260C63v24Ev");}
void  S260C6 ::v25(){vfunc_called(this, "_ZN6S260C63v25Ev");}
void  S260C6 ::v26(){vfunc_called(this, "_ZN6S260C63v26Ev");}
void  S260C6 ::v27(){vfunc_called(this, "_ZN6S260C63v27Ev");}
void  S260C6 ::v28(){vfunc_called(this, "_ZN6S260C63v28Ev");}
void  S260C6 ::v29(){vfunc_called(this, "_ZN6S260C63v29Ev");}
void  S260C6 ::v30(){vfunc_called(this, "_ZN6S260C63v30Ev");}
void  S260C6 ::v31(){vfunc_called(this, "_ZN6S260C63v31Ev");}
void  S260C6 ::v32(){vfunc_called(this, "_ZN6S260C63v32Ev");}
void  S260C6 ::v33(){vfunc_called(this, "_ZN6S260C63v33Ev");}
void  S260C6 ::v34(){vfunc_called(this, "_ZN6S260C63v34Ev");}
void  S260C6 ::v35(){vfunc_called(this, "_ZN6S260C63v35Ev");}
void  S260C6 ::v36(){vfunc_called(this, "_ZN6S260C63v36Ev");}
void  S260C6 ::v37(){vfunc_called(this, "_ZN6S260C63v37Ev");}
void  S260C6 ::v38(){vfunc_called(this, "_ZN6S260C63v38Ev");}
void  S260C6 ::v39(){vfunc_called(this, "_ZN6S260C63v39Ev");}
void  S260C6 ::v40(){vfunc_called(this, "_ZN6S260C63v40Ev");}
void  S260C6 ::v41(){vfunc_called(this, "_ZN6S260C63v41Ev");}
void  S260C6 ::v42(){vfunc_called(this, "_ZN6S260C63v42Ev");}
void  S260C6 ::v43(){vfunc_called(this, "_ZN6S260C63v43Ev");}
void  S260C6 ::v44(){vfunc_called(this, "_ZN6S260C63v44Ev");}
void  S260C6 ::v45(){vfunc_called(this, "_ZN6S260C63v45Ev");}
void  S260C6 ::v46(){vfunc_called(this, "_ZN6S260C63v46Ev");}
void  S260C6 ::v47(){vfunc_called(this, "_ZN6S260C63v47Ev");}
void  S260C6 ::v48(){vfunc_called(this, "_ZN6S260C63v48Ev");}
void  S260C6 ::v49(){vfunc_called(this, "_ZN6S260C63v49Ev");}
void  S260C6 ::v50(){vfunc_called(this, "_ZN6S260C63v50Ev");}
void  S260C6 ::v51(){vfunc_called(this, "_ZN6S260C63v51Ev");}
void  S260C6 ::v52(){vfunc_called(this, "_ZN6S260C63v52Ev");}
void  S260C6 ::v53(){vfunc_called(this, "_ZN6S260C63v53Ev");}
void  S260C6 ::v54(){vfunc_called(this, "_ZN6S260C63v54Ev");}
void  S260C6 ::v55(){vfunc_called(this, "_ZN6S260C63v55Ev");}
void  S260C6 ::v56(){vfunc_called(this, "_ZN6S260C63v56Ev");}
void  S260C6 ::v57(){vfunc_called(this, "_ZN6S260C63v57Ev");}
void  S260C6 ::v58(){vfunc_called(this, "_ZN6S260C63v58Ev");}
void  S260C6 ::v59(){vfunc_called(this, "_ZN6S260C63v59Ev");}
void  S260C6 ::v60(){vfunc_called(this, "_ZN6S260C63v60Ev");}
void  S260C6 ::v61(){vfunc_called(this, "_ZN6S260C63v61Ev");}
void  S260C6 ::v62(){vfunc_called(this, "_ZN6S260C63v62Ev");}
void  S260C6 ::v63(){vfunc_called(this, "_ZN6S260C63v63Ev");}
void  S260C6 ::v64(){vfunc_called(this, "_ZN6S260C63v64Ev");}
void  S260C6 ::v65(){vfunc_called(this, "_ZN6S260C63v65Ev");}
void  S260C6 ::v66(){vfunc_called(this, "_ZN6S260C63v66Ev");}
void  S260C6 ::v67(){vfunc_called(this, "_ZN6S260C63v67Ev");}
void  S260C6 ::v68(){vfunc_called(this, "_ZN6S260C63v68Ev");}
void  S260C6 ::v69(){vfunc_called(this, "_ZN6S260C63v69Ev");}
S260C6 ::S260C6(){ note_ctor("S260C6", this);} // tgen

static void Test_S260C6()
{
  extern Class_Descriptor cd_S260C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S260C6, buf);
    S260C6 *dp, &lv = *(dp=new (buf) S260C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S260C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C6)");
    check_field_offset(lv, s260c6f0, ABISELECT(8,4), "S260C6.s260c6f0");
    check_field_offset(lv, s260c6f1, ABISELECT(16,8), "S260C6.s260c6f1");
    check_field_offset(lv, s260c6f2, ABISELECT(24,16), "S260C6.s260c6f2");
    check_field_offset(lv, s260c6f3, ABISELECT(56,32), "S260C6.s260c6f3");
    check_field_offset(lv, s260c6f4, ABISELECT(64,40), "S260C6.s260c6f4");
    check_field_offset(lv, s260c6f5, ABISELECT(72,44), "S260C6.s260c6f5");
    check_field_offset(lv, s260c6f6, ABISELECT(80,52), "S260C6.s260c6f6");
    test_class_info(&lv, &cd_S260C6);
    dp->~S260C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C6(Test_S260C6, "S260C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S260C6C1Ev();
extern void _ZN6S260C6D1Ev();
Name_Map name_map_S260C6[] = {
  NSPAIR(_ZN6S260C6C1Ev),
  NSPAIR(_ZN6S260C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S260C6[];
extern void _ZN6S260C6D1Ev();
extern void _ZN6S260C6D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
static  VTBL_ENTRY vtc_S260C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C6[0]),
  (VTBL_ENTRY)&_ZN6S260C6D1Ev,
  (VTBL_ENTRY)&_ZN6S260C6D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
};
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
Class_Descriptor cd_S260C6 = {  "S260C6", // class name
  0,0,//no base classes
  &(vtc_S260C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S260C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S260C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C5  : S260C6 {
  int s260c5f0[2];
  void *s260c5f1;
  int s260c5f2[2];
  ::S287C8_nt s260c5f3;
  ::S287C8_nt s260c5f4;
  ::S2121C38 s260c5f5;
  ::S287C8_nt s260c5f6;
  unsigned int s260c5f7:1;
  unsigned int s260c5f8:1;
  unsigned int s260c5f9:1;
  unsigned int s260c5f10:1;
  unsigned int s260c5f11:1;
  int s260c5f12[2];
  virtual  ~S260C5(); // _ZN6S260C5D1Ev
  virtual void  v70(); // _ZN6S260C53v70Ev
  virtual void  v71(); // _ZN6S260C53v71Ev
  virtual void  v72(); // _ZN6S260C53v72Ev
  virtual void  v73(); // _ZN6S260C53v73Ev
  virtual void  v74(); // _ZN6S260C53v74Ev
  virtual void  v75(); // _ZN6S260C53v75Ev
  virtual void  v76(); // _ZN6S260C53v76Ev
  virtual void  v77(); // _ZN6S260C53v77Ev
  virtual void  v78(); // _ZN6S260C53v78Ev
  virtual void  v79(); // _ZN6S260C53v79Ev
  virtual void  v80(); // _ZN6S260C53v80Ev
  virtual void  v81(); // _ZN6S260C53v81Ev
  virtual void  v82(); // _ZN6S260C53v82Ev
  virtual void  v83(); // _ZN6S260C53v83Ev
  virtual void  v84(); // _ZN6S260C53v84Ev
  virtual void  v85(); // _ZN6S260C53v85Ev
  virtual void  v86(); // _ZN6S260C53v86Ev
  virtual void  v87(); // _ZN6S260C53v87Ev
  virtual void  v88(); // _ZN6S260C53v88Ev
  virtual void  v89(); // _ZN6S260C53v89Ev
  virtual void  v90(); // _ZN6S260C53v90Ev
  virtual void  v91(); // _ZN6S260C53v91Ev
  S260C5(); // tgen
};
//SIG(-1 S260C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S260C5 ::~S260C5(){ note_dtor("S260C5", this);}
void  S260C5 ::v70(){vfunc_called(this, "_ZN6S260C53v70Ev");}
void  S260C5 ::v71(){vfunc_called(this, "_ZN6S260C53v71Ev");}
void  S260C5 ::v72(){vfunc_called(this, "_ZN6S260C53v72Ev");}
void  S260C5 ::v73(){vfunc_called(this, "_ZN6S260C53v73Ev");}
void  S260C5 ::v74(){vfunc_called(this, "_ZN6S260C53v74Ev");}
void  S260C5 ::v75(){vfunc_called(this, "_ZN6S260C53v75Ev");}
void  S260C5 ::v76(){vfunc_called(this, "_ZN6S260C53v76Ev");}
void  S260C5 ::v77(){vfunc_called(this, "_ZN6S260C53v77Ev");}
void  S260C5 ::v78(){vfunc_called(this, "_ZN6S260C53v78Ev");}
void  S260C5 ::v79(){vfunc_called(this, "_ZN6S260C53v79Ev");}
void  S260C5 ::v80(){vfunc_called(this, "_ZN6S260C53v80Ev");}
void  S260C5 ::v81(){vfunc_called(this, "_ZN6S260C53v81Ev");}
void  S260C5 ::v82(){vfunc_called(this, "_ZN6S260C53v82Ev");}
void  S260C5 ::v83(){vfunc_called(this, "_ZN6S260C53v83Ev");}
void  S260C5 ::v84(){vfunc_called(this, "_ZN6S260C53v84Ev");}
void  S260C5 ::v85(){vfunc_called(this, "_ZN6S260C53v85Ev");}
void  S260C5 ::v86(){vfunc_called(this, "_ZN6S260C53v86Ev");}
void  S260C5 ::v87(){vfunc_called(this, "_ZN6S260C53v87Ev");}
void  S260C5 ::v88(){vfunc_called(this, "_ZN6S260C53v88Ev");}
void  S260C5 ::v89(){vfunc_called(this, "_ZN6S260C53v89Ev");}
void  S260C5 ::v90(){vfunc_called(this, "_ZN6S260C53v90Ev");}
void  S260C5 ::v91(){vfunc_called(this, "_ZN6S260C53v91Ev");}
S260C5 ::S260C5(){ note_ctor("S260C5", this);} // tgen

static void Test_S260C5()
{
  extern Class_Descriptor cd_S260C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S260C5, buf);
    S260C5 *dp, &lv = *(dp=new (buf) S260C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S260C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C5)");
    check_base_class_offset(lv, (S260C6*), 0, "S260C5");
    check_field_offset(lv, s260c5f0, ABISELECT(96,60), "S260C5.s260c5f0");
    check_field_offset(lv, s260c5f1, ABISELECT(104,68), "S260C5.s260c5f1");
    check_field_offset(lv, s260c5f2, ABISELECT(112,72), "S260C5.s260c5f2");
    check_field_offset(lv, s260c5f3, ABISELECT(120,80), "S260C5.s260c5f3");
    check_field_offset(lv, s260c5f4, ABISELECT(136,92), "S260C5.s260c5f4");
    check_field_offset(lv, s260c5f5, ABISELECT(152,104), "S260C5.s260c5f5");
    check_field_offset(lv, s260c5f6, ABISELECT(160,108), "S260C5.s260c5f6");
    set_bf_and_test(lv, s260c5f7, ABISELECT(176,120), 0, 1, 1, "S260C5");
    set_bf_and_test(lv, s260c5f8, ABISELECT(176,120), 1, 1, 1, "S260C5");
    set_bf_and_test(lv, s260c5f9, ABISELECT(176,120), 2, 1, 1, "S260C5");
    set_bf_and_test(lv, s260c5f10, ABISELECT(176,120), 3, 1, 1, "S260C5");
    set_bf_and_test(lv, s260c5f11, ABISELECT(176,120), 4, 1, 1, "S260C5");
    check_field_offset(lv, s260c5f12, ABISELECT(180,124), "S260C5.s260c5f12");
    test_class_info(&lv, &cd_S260C5);
    dp->~S260C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C5(Test_S260C5, "S260C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S260C5C1Ev();
extern void _ZN6S260C5D1Ev();
Name_Map name_map_S260C5[] = {
  NSPAIR(_ZN6S260C5C1Ev),
  NSPAIR(_ZN6S260C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
static Base_Class bases_S260C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S260C5[];
extern void _ZN6S260C5D1Ev();
extern void _ZN6S260C5D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
static  VTBL_ENTRY vtc_S260C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C5[0]),
  (VTBL_ENTRY)&_ZN6S260C5D1Ev,
  (VTBL_ENTRY)&_ZN6S260C5D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
};
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
Class_Descriptor cd_S260C5 = {  "S260C5", // class name
  bases_S260C5, 1,
  &(vtc_S260C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S260C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C4  : S260C5 {
  unsigned int s260c4f0:1;
  unsigned int s260c4f1:1;
  unsigned int s260c4f2:1;
  ::S3350C17 s260c4f3;
  ::S3350C11 s260c4f4;
  ::S3350C5_nt s260c4f5;
  ::S287C27 s260c4f6;
  int s260c4f7[3];
  virtual  ~S260C4(); // _ZN6S260C4D1Ev
  virtual void  v92(); // _ZN6S260C43v92Ev
  virtual void  v93(); // _ZN6S260C43v93Ev
  virtual void  v94(); // _ZN6S260C43v94Ev
  virtual void  v95(); // _ZN6S260C43v95Ev
  virtual void  v96(); // _ZN6S260C43v96Ev
  virtual void  v97(); // _ZN6S260C43v97Ev
  virtual void  v98(); // _ZN6S260C43v98Ev
  virtual void  v99(); // _ZN6S260C43v99Ev
  virtual void  v100(); // _ZN6S260C44v100Ev
  virtual void  v101(); // _ZN6S260C44v101Ev
  virtual void  v102(); // _ZN6S260C44v102Ev
  virtual void  v103(); // _ZN6S260C44v103Ev
  virtual void  v104(); // _ZN6S260C44v104Ev
  virtual void  v105(); // _ZN6S260C44v105Ev
  virtual void  v106(); // _ZN6S260C44v106Ev
  virtual void  v107(); // _ZN6S260C44v107Ev
  virtual void  v108(); // _ZN6S260C44v108Ev
  virtual void  v109(); // _ZN6S260C44v109Ev
  virtual void  v110(); // _ZN6S260C44v110Ev
  virtual void  v111(); // _ZN6S260C44v111Ev
  S260C4(); // tgen
};
//SIG(-1 S260C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S260C4 ::~S260C4(){ note_dtor("S260C4", this);}
void  S260C4 ::v92(){vfunc_called(this, "_ZN6S260C43v92Ev");}
void  S260C4 ::v93(){vfunc_called(this, "_ZN6S260C43v93Ev");}
void  S260C4 ::v94(){vfunc_called(this, "_ZN6S260C43v94Ev");}
void  S260C4 ::v95(){vfunc_called(this, "_ZN6S260C43v95Ev");}
void  S260C4 ::v96(){vfunc_called(this, "_ZN6S260C43v96Ev");}
void  S260C4 ::v97(){vfunc_called(this, "_ZN6S260C43v97Ev");}
void  S260C4 ::v98(){vfunc_called(this, "_ZN6S260C43v98Ev");}
void  S260C4 ::v99(){vfunc_called(this, "_ZN6S260C43v99Ev");}
void  S260C4 ::v100(){vfunc_called(this, "_ZN6S260C44v100Ev");}
void  S260C4 ::v101(){vfunc_called(this, "_ZN6S260C44v101Ev");}
void  S260C4 ::v102(){vfunc_called(this, "_ZN6S260C44v102Ev");}
void  S260C4 ::v103(){vfunc_called(this, "_ZN6S260C44v103Ev");}
void  S260C4 ::v104(){vfunc_called(this, "_ZN6S260C44v104Ev");}
void  S260C4 ::v105(){vfunc_called(this, "_ZN6S260C44v105Ev");}
void  S260C4 ::v106(){vfunc_called(this, "_ZN6S260C44v106Ev");}
void  S260C4 ::v107(){vfunc_called(this, "_ZN6S260C44v107Ev");}
void  S260C4 ::v108(){vfunc_called(this, "_ZN6S260C44v108Ev");}
void  S260C4 ::v109(){vfunc_called(this, "_ZN6S260C44v109Ev");}
void  S260C4 ::v110(){vfunc_called(this, "_ZN6S260C44v110Ev");}
void  S260C4 ::v111(){vfunc_called(this, "_ZN6S260C44v111Ev");}
S260C4 ::S260C4(){ note_ctor("S260C4", this);} // tgen

static void Test_S260C4()
{
  extern Class_Descriptor cd_S260C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S260C4, buf);
    S260C4 *dp, &lv = *(dp=new (buf) S260C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S260C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C4)");
    check_base_class_offset(lv, (S260C6*)(S260C5*), 0, "S260C4");
    check_base_class_offset(lv, (S260C5*), 0, "S260C4");
    set_bf_and_test(lv, s260c4f0, ABISELECT(188,132), 0, 1, 1, "S260C4");
    set_bf_and_test(lv, s260c4f1, ABISELECT(188,132), 1, 1, 1, "S260C4");
    set_bf_and_test(lv, s260c4f2, ABISELECT(188,132), 2, 1, 1, "S260C4");
    check_field_offset(lv, s260c4f3, ABISELECT(192,136), "S260C4.s260c4f3");
    check_field_offset(lv, s260c4f4, ABISELECT(208,148), "S260C4.s260c4f4");
    check_field_offset(lv, s260c4f5, ABISELECT(224,160), "S260C4.s260c4f5");
    check_field_offset(lv, s260c4f6, ABISELECT(240,172), "S260C4.s260c4f6");
    check_field_offset(lv, s260c4f7, ABISELECT(256,184), "S260C4.s260c4f7");
    test_class_info(&lv, &cd_S260C4);
    dp->~S260C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C4(Test_S260C4, "S260C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S260C4C1Ev();
extern void _ZN6S260C4D1Ev();
Name_Map name_map_S260C4[] = {
  NSPAIR(_ZN6S260C4C1Ev),
  NSPAIR(_ZN6S260C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
extern Class_Descriptor cd_S260C5;
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
static Base_Class bases_S260C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S260C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S260C4[];
extern void _ZN6S260C4D1Ev();
extern void _ZN6S260C4D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
extern void _ZN6S260C43v92Ev();
extern void _ZN6S260C43v93Ev();
extern void _ZN6S260C43v94Ev();
extern void _ZN6S260C43v95Ev();
extern void _ZN6S260C43v96Ev();
extern void _ZN6S260C43v97Ev();
extern void _ZN6S260C43v98Ev();
extern void _ZN6S260C43v99Ev();
extern void _ZN6S260C44v100Ev();
extern void _ZN6S260C44v101Ev();
extern void _ZN6S260C44v102Ev();
extern void _ZN6S260C44v103Ev();
extern void _ZN6S260C44v104Ev();
extern void _ZN6S260C44v105Ev();
extern void _ZN6S260C44v106Ev();
extern void _ZN6S260C44v107Ev();
extern void _ZN6S260C44v108Ev();
extern void _ZN6S260C44v109Ev();
extern void _ZN6S260C44v110Ev();
extern void _ZN6S260C44v111Ev();
static  VTBL_ENTRY vtc_S260C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C4[0]),
  (VTBL_ENTRY)&_ZN6S260C4D1Ev,
  (VTBL_ENTRY)&_ZN6S260C4D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
  (VTBL_ENTRY)&_ZN6S260C43v92Ev,
  (VTBL_ENTRY)&_ZN6S260C43v93Ev,
  (VTBL_ENTRY)&_ZN6S260C43v94Ev,
  (VTBL_ENTRY)&_ZN6S260C43v95Ev,
  (VTBL_ENTRY)&_ZN6S260C43v96Ev,
  (VTBL_ENTRY)&_ZN6S260C43v97Ev,
  (VTBL_ENTRY)&_ZN6S260C43v98Ev,
  (VTBL_ENTRY)&_ZN6S260C43v99Ev,
  (VTBL_ENTRY)&_ZN6S260C44v100Ev,
  (VTBL_ENTRY)&_ZN6S260C44v101Ev,
  (VTBL_ENTRY)&_ZN6S260C44v102Ev,
  (VTBL_ENTRY)&_ZN6S260C44v103Ev,
  (VTBL_ENTRY)&_ZN6S260C44v104Ev,
  (VTBL_ENTRY)&_ZN6S260C44v105Ev,
  (VTBL_ENTRY)&_ZN6S260C44v106Ev,
  (VTBL_ENTRY)&_ZN6S260C44v107Ev,
  (VTBL_ENTRY)&_ZN6S260C44v108Ev,
  (VTBL_ENTRY)&_ZN6S260C44v109Ev,
  (VTBL_ENTRY)&_ZN6S260C44v110Ev,
  (VTBL_ENTRY)&_ZN6S260C44v111Ev,
};
extern VTBL_ENTRY _ZTI6S260C4[];
extern  VTBL_ENTRY _ZTV6S260C4[];
Class_Descriptor cd_S260C4 = {  "S260C4", // class name
  bases_S260C4, 2,
  &(vtc_S260C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S260C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C3  : S260C4 {
  ::S3350C4_nt s260c3f0;
  unsigned int s260c3f1:1;
  ::S287C23 s260c3f2;
  virtual  ~S260C3(); // _ZN6S260C3D1Ev
  virtual void  v112(); // _ZN6S260C34v112Ev
  virtual void  v113(); // _ZN6S260C34v113Ev
  virtual void  v114(); // _ZN6S260C34v114Ev
  virtual void  v115(); // _ZN6S260C34v115Ev
  S260C3(); // tgen
};
//SIG(-1 S260C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S260C3 ::~S260C3(){ note_dtor("S260C3", this);}
void  S260C3 ::v112(){vfunc_called(this, "_ZN6S260C34v112Ev");}
void  S260C3 ::v113(){vfunc_called(this, "_ZN6S260C34v113Ev");}
void  S260C3 ::v114(){vfunc_called(this, "_ZN6S260C34v114Ev");}
void  S260C3 ::v115(){vfunc_called(this, "_ZN6S260C34v115Ev");}
S260C3 ::S260C3(){ note_ctor("S260C3", this);} // tgen

static void Test_S260C3()
{
  extern Class_Descriptor cd_S260C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S260C3, buf);
    S260C3 *dp, &lv = *(dp=new (buf) S260C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S260C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C3)");
    check_base_class_offset(lv, (S260C6*)(S260C5*)(S260C4*), 0, "S260C3");
    check_base_class_offset(lv, (S260C5*)(S260C4*), 0, "S260C3");
    check_base_class_offset(lv, (S260C4*), 0, "S260C3");
    check_field_offset(lv, s260c3f0, ABISELECT(268,196), "S260C3.s260c3f0");
    set_bf_and_test(lv, s260c3f1, ABISELECT(276,204), 0, 1, 1, "S260C3");
    check_field_offset(lv, s260c3f2, ABISELECT(280,208), "S260C3.s260c3f2");
    test_class_info(&lv, &cd_S260C3);
    dp->~S260C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C3(Test_S260C3, "S260C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S260C3C1Ev();
extern void _ZN6S260C3D1Ev();
Name_Map name_map_S260C3[] = {
  NSPAIR(_ZN6S260C3C1Ev),
  NSPAIR(_ZN6S260C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
extern Class_Descriptor cd_S260C5;
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
extern Class_Descriptor cd_S260C4;
extern VTBL_ENTRY _ZTI6S260C4[];
extern  VTBL_ENTRY _ZTV6S260C4[];
static Base_Class bases_S260C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S260C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S260C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S260C3[];
extern void _ZN6S260C3D1Ev();
extern void _ZN6S260C3D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
extern void _ZN6S260C43v92Ev();
extern void _ZN6S260C43v93Ev();
extern void _ZN6S260C43v94Ev();
extern void _ZN6S260C43v95Ev();
extern void _ZN6S260C43v96Ev();
extern void _ZN6S260C43v97Ev();
extern void _ZN6S260C43v98Ev();
extern void _ZN6S260C43v99Ev();
extern void _ZN6S260C44v100Ev();
extern void _ZN6S260C44v101Ev();
extern void _ZN6S260C44v102Ev();
extern void _ZN6S260C44v103Ev();
extern void _ZN6S260C44v104Ev();
extern void _ZN6S260C44v105Ev();
extern void _ZN6S260C44v106Ev();
extern void _ZN6S260C44v107Ev();
extern void _ZN6S260C44v108Ev();
extern void _ZN6S260C44v109Ev();
extern void _ZN6S260C44v110Ev();
extern void _ZN6S260C44v111Ev();
extern void _ZN6S260C34v112Ev();
extern void _ZN6S260C34v113Ev();
extern void _ZN6S260C34v114Ev();
extern void _ZN6S260C34v115Ev();
static  VTBL_ENTRY vtc_S260C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C3[0]),
  (VTBL_ENTRY)&_ZN6S260C3D1Ev,
  (VTBL_ENTRY)&_ZN6S260C3D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
  (VTBL_ENTRY)&_ZN6S260C43v92Ev,
  (VTBL_ENTRY)&_ZN6S260C43v93Ev,
  (VTBL_ENTRY)&_ZN6S260C43v94Ev,
  (VTBL_ENTRY)&_ZN6S260C43v95Ev,
  (VTBL_ENTRY)&_ZN6S260C43v96Ev,
  (VTBL_ENTRY)&_ZN6S260C43v97Ev,
  (VTBL_ENTRY)&_ZN6S260C43v98Ev,
  (VTBL_ENTRY)&_ZN6S260C43v99Ev,
  (VTBL_ENTRY)&_ZN6S260C44v100Ev,
  (VTBL_ENTRY)&_ZN6S260C44v101Ev,
  (VTBL_ENTRY)&_ZN6S260C44v102Ev,
  (VTBL_ENTRY)&_ZN6S260C44v103Ev,
  (VTBL_ENTRY)&_ZN6S260C44v104Ev,
  (VTBL_ENTRY)&_ZN6S260C44v105Ev,
  (VTBL_ENTRY)&_ZN6S260C44v106Ev,
  (VTBL_ENTRY)&_ZN6S260C44v107Ev,
  (VTBL_ENTRY)&_ZN6S260C44v108Ev,
  (VTBL_ENTRY)&_ZN6S260C44v109Ev,
  (VTBL_ENTRY)&_ZN6S260C44v110Ev,
  (VTBL_ENTRY)&_ZN6S260C44v111Ev,
  (VTBL_ENTRY)&_ZN6S260C34v112Ev,
  (VTBL_ENTRY)&_ZN6S260C34v113Ev,
  (VTBL_ENTRY)&_ZN6S260C34v114Ev,
  (VTBL_ENTRY)&_ZN6S260C34v115Ev,
};
extern VTBL_ENTRY _ZTI6S260C3[];
extern  VTBL_ENTRY _ZTV6S260C3[];
Class_Descriptor cd_S260C3 = {  "S260C3", // class name
  bases_S260C3, 3,
  &(vtc_S260C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S260C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C2  : S260C3 {
  ::S287C19 s260c2f0;
  unsigned int s260c2f1:1;
  virtual  ~S260C2(); // _ZN6S260C2D1Ev
  virtual void  v116(); // _ZN6S260C24v116Ev
  virtual void  v117(); // _ZN6S260C24v117Ev
  virtual void  v118(); // _ZN6S260C24v118Ev
  virtual void  v119(); // _ZN6S260C24v119Ev
  virtual void  v120(); // _ZN6S260C24v120Ev
  virtual void  v121(); // _ZN6S260C24v121Ev
  virtual void  v122(); // _ZN6S260C24v122Ev
  S260C2(); // tgen
};
//SIG(-1 S260C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S260C2 ::~S260C2(){ note_dtor("S260C2", this);}
void  S260C2 ::v116(){vfunc_called(this, "_ZN6S260C24v116Ev");}
void  S260C2 ::v117(){vfunc_called(this, "_ZN6S260C24v117Ev");}
void  S260C2 ::v118(){vfunc_called(this, "_ZN6S260C24v118Ev");}
void  S260C2 ::v119(){vfunc_called(this, "_ZN6S260C24v119Ev");}
void  S260C2 ::v120(){vfunc_called(this, "_ZN6S260C24v120Ev");}
void  S260C2 ::v121(){vfunc_called(this, "_ZN6S260C24v121Ev");}
void  S260C2 ::v122(){vfunc_called(this, "_ZN6S260C24v122Ev");}
S260C2 ::S260C2(){ note_ctor("S260C2", this);} // tgen

static void Test_S260C2()
{
  extern Class_Descriptor cd_S260C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S260C2, buf);
    S260C2 *dp, &lv = *(dp=new (buf) S260C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S260C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C2)");
    check_base_class_offset(lv, (S260C6*)(S260C5*)(S260C4*)(S260C3*), 0, "S260C2");
    check_base_class_offset(lv, (S260C5*)(S260C4*)(S260C3*), 0, "S260C2");
    check_base_class_offset(lv, (S260C4*)(S260C3*), 0, "S260C2");
    check_base_class_offset(lv, (S260C3*), 0, "S260C2");
    check_field_offset(lv, s260c2f0, ABISELECT(296,220), "S260C2.s260c2f0");
    set_bf_and_test(lv, s260c2f1, ABISELECT(312,232), 0, 1, 1, "S260C2");
    test_class_info(&lv, &cd_S260C2);
    dp->~S260C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C2(Test_S260C2, "S260C2", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S260C2C1Ev();
extern void _ZN6S260C2D1Ev();
Name_Map name_map_S260C2[] = {
  NSPAIR(_ZN6S260C2C1Ev),
  NSPAIR(_ZN6S260C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
extern Class_Descriptor cd_S260C5;
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
extern Class_Descriptor cd_S260C4;
extern VTBL_ENTRY _ZTI6S260C4[];
extern  VTBL_ENTRY _ZTV6S260C4[];
extern Class_Descriptor cd_S260C3;
extern VTBL_ENTRY _ZTI6S260C3[];
extern  VTBL_ENTRY _ZTV6S260C3[];
static Base_Class bases_S260C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S260C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S260C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S260C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S260C2[];
extern void _ZN6S260C2D1Ev();
extern void _ZN6S260C2D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
extern void _ZN6S260C43v92Ev();
extern void _ZN6S260C43v93Ev();
extern void _ZN6S260C43v94Ev();
extern void _ZN6S260C43v95Ev();
extern void _ZN6S260C43v96Ev();
extern void _ZN6S260C43v97Ev();
extern void _ZN6S260C43v98Ev();
extern void _ZN6S260C43v99Ev();
extern void _ZN6S260C44v100Ev();
extern void _ZN6S260C44v101Ev();
extern void _ZN6S260C44v102Ev();
extern void _ZN6S260C44v103Ev();
extern void _ZN6S260C44v104Ev();
extern void _ZN6S260C44v105Ev();
extern void _ZN6S260C44v106Ev();
extern void _ZN6S260C44v107Ev();
extern void _ZN6S260C44v108Ev();
extern void _ZN6S260C44v109Ev();
extern void _ZN6S260C44v110Ev();
extern void _ZN6S260C44v111Ev();
extern void _ZN6S260C34v112Ev();
extern void _ZN6S260C34v113Ev();
extern void _ZN6S260C34v114Ev();
extern void _ZN6S260C34v115Ev();
extern void _ZN6S260C24v116Ev();
extern void _ZN6S260C24v117Ev();
extern void _ZN6S260C24v118Ev();
extern void _ZN6S260C24v119Ev();
extern void _ZN6S260C24v120Ev();
extern void _ZN6S260C24v121Ev();
extern void _ZN6S260C24v122Ev();
static  VTBL_ENTRY vtc_S260C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C2[0]),
  (VTBL_ENTRY)&_ZN6S260C2D1Ev,
  (VTBL_ENTRY)&_ZN6S260C2D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
  (VTBL_ENTRY)&_ZN6S260C43v92Ev,
  (VTBL_ENTRY)&_ZN6S260C43v93Ev,
  (VTBL_ENTRY)&_ZN6S260C43v94Ev,
  (VTBL_ENTRY)&_ZN6S260C43v95Ev,
  (VTBL_ENTRY)&_ZN6S260C43v96Ev,
  (VTBL_ENTRY)&_ZN6S260C43v97Ev,
  (VTBL_ENTRY)&_ZN6S260C43v98Ev,
  (VTBL_ENTRY)&_ZN6S260C43v99Ev,
  (VTBL_ENTRY)&_ZN6S260C44v100Ev,
  (VTBL_ENTRY)&_ZN6S260C44v101Ev,
  (VTBL_ENTRY)&_ZN6S260C44v102Ev,
  (VTBL_ENTRY)&_ZN6S260C44v103Ev,
  (VTBL_ENTRY)&_ZN6S260C44v104Ev,
  (VTBL_ENTRY)&_ZN6S260C44v105Ev,
  (VTBL_ENTRY)&_ZN6S260C44v106Ev,
  (VTBL_ENTRY)&_ZN6S260C44v107Ev,
  (VTBL_ENTRY)&_ZN6S260C44v108Ev,
  (VTBL_ENTRY)&_ZN6S260C44v109Ev,
  (VTBL_ENTRY)&_ZN6S260C44v110Ev,
  (VTBL_ENTRY)&_ZN6S260C44v111Ev,
  (VTBL_ENTRY)&_ZN6S260C34v112Ev,
  (VTBL_ENTRY)&_ZN6S260C34v113Ev,
  (VTBL_ENTRY)&_ZN6S260C34v114Ev,
  (VTBL_ENTRY)&_ZN6S260C34v115Ev,
  (VTBL_ENTRY)&_ZN6S260C24v116Ev,
  (VTBL_ENTRY)&_ZN6S260C24v117Ev,
  (VTBL_ENTRY)&_ZN6S260C24v118Ev,
  (VTBL_ENTRY)&_ZN6S260C24v119Ev,
  (VTBL_ENTRY)&_ZN6S260C24v120Ev,
  (VTBL_ENTRY)&_ZN6S260C24v121Ev,
  (VTBL_ENTRY)&_ZN6S260C24v122Ev,
};
extern VTBL_ENTRY _ZTI6S260C2[];
extern  VTBL_ENTRY _ZTV6S260C2[];
Class_Descriptor cd_S260C2 = {  "S260C2", // class name
  bases_S260C2, 4,
  &(vtc_S260C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S260C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C2),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C26_nt  {
  int s260c26f0[5];
};
//SIG(-1 S260C26_nt) C1{ Fi[5]}



//skip512 S260C26_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C25_nt  {
  ::S260C26_nt s260c25f0;
  ::S3350C4_nt s260c25f1;
  void *s260c25f2;
  unsigned int s260c25f3:1;
};
//SIG(-1 S260C25_nt) C1{ FC2{ Fi[5]} FC3{ m Fi[2]} Fp Fi:1}



//skip512 S260C25_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S260C1  : S260C2 {
  ::S3350C4_nt s260c1f0;
  ::S3350C4_nt s260c1f1;
  void *s260c1f2;
  int s260c1f3[3];
  ::S260C25_nt s260c1f4;
  virtual  ~S260C1(); // _ZN6S260C1D1Ev
  virtual void  v1(); // _ZN6S260C12v1Ev
  virtual void  v2(); // _ZN6S260C12v2Ev
  virtual void  v3(); // _ZN6S260C12v3Ev
  virtual void  v4(); // _ZN6S260C12v4Ev
  virtual void  v5(); // _ZN6S260C12v5Ev
  S260C1(); // tgen
};
//SIG(1 S260C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v112 v113 v114 v115 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v116 v117 v118 v119 v120 v121 v122 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 v3 v4 v5 FC7 FC7 Fp Fi[3] FC25{ FC26{ Fi[5]} FC7 Fp Fi:1}}


 S260C1 ::~S260C1(){ note_dtor("S260C1", this);}
void  S260C1 ::v1(){vfunc_called(this, "_ZN6S260C12v1Ev");}
void  S260C1 ::v2(){vfunc_called(this, "_ZN6S260C12v2Ev");}
void  S260C1 ::v3(){vfunc_called(this, "_ZN6S260C12v3Ev");}
void  S260C1 ::v4(){vfunc_called(this, "_ZN6S260C12v4Ev");}
void  S260C1 ::v5(){vfunc_called(this, "_ZN6S260C12v5Ev");}
S260C1 ::S260C1(){ note_ctor("S260C1", this);} // tgen

static void Test_S260C1()
{
  extern Class_Descriptor cd_S260C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,77)];
    init_test(&cd_S260C1, buf);
    S260C1 *dp, &lv = *(dp=new (buf) S260C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,304), "sizeof(S260C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S260C1)");
    check_base_class_offset(lv, (S260C6*)(S260C5*)(S260C4*)(S260C3*)(S260C2*), 0, "S260C1");
    check_base_class_offset(lv, (S260C5*)(S260C4*)(S260C3*)(S260C2*), 0, "S260C1");
    check_base_class_offset(lv, (S260C4*)(S260C3*)(S260C2*), 0, "S260C1");
    check_base_class_offset(lv, (S260C3*)(S260C2*), 0, "S260C1");
    check_base_class_offset(lv, (S260C2*), 0, "S260C1");
    check_field_offset(lv, s260c1f0, ABISELECT(316,236), "S260C1.s260c1f0");
    check_field_offset(lv, s260c1f1, ABISELECT(324,244), "S260C1.s260c1f1");
    check_field_offset(lv, s260c1f2, ABISELECT(336,252), "S260C1.s260c1f2");
    check_field_offset(lv, s260c1f3, ABISELECT(344,256), "S260C1.s260c1f3");
    check_field_offset(lv, s260c1f4, ABISELECT(360,268), "S260C1.s260c1f4");
    test_class_info(&lv, &cd_S260C1);
    dp->~S260C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS260C1(Test_S260C1, "S260C1", ABISELECT(408,304));

#else // __cplusplus

extern void _ZN6S260C1C1Ev();
extern void _ZN6S260C1D1Ev();
Name_Map name_map_S260C1[] = {
  NSPAIR(_ZN6S260C1C1Ev),
  NSPAIR(_ZN6S260C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S260C6;
extern VTBL_ENTRY _ZTI6S260C6[];
extern  VTBL_ENTRY _ZTV6S260C6[];
extern Class_Descriptor cd_S260C5;
extern VTBL_ENTRY _ZTI6S260C5[];
extern  VTBL_ENTRY _ZTV6S260C5[];
extern Class_Descriptor cd_S260C4;
extern VTBL_ENTRY _ZTI6S260C4[];
extern  VTBL_ENTRY _ZTV6S260C4[];
extern Class_Descriptor cd_S260C3;
extern VTBL_ENTRY _ZTI6S260C3[];
extern  VTBL_ENTRY _ZTV6S260C3[];
extern Class_Descriptor cd_S260C2;
extern VTBL_ENTRY _ZTI6S260C2[];
extern  VTBL_ENTRY _ZTV6S260C2[];
static Base_Class bases_S260C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S260C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S260C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S260C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S260C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S260C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S260C1[];
extern void _ZN6S260C1D1Ev();
extern void _ZN6S260C1D0Ev();
extern void _ZN6S260C62v6Ev();
extern void _ZN6S260C62v7Ev();
extern void _ZN6S260C62v8Ev();
extern void _ZN6S260C62v9Ev();
extern void _ZN6S260C63v10Ev();
extern void _ZN6S260C63v11Ev();
extern void _ZN6S260C63v12Ev();
extern void _ZN6S260C63v13Ev();
extern void _ZN6S260C63v14Ev();
extern void _ZN6S260C63v15Ev();
extern void _ZN6S260C63v16Ev();
extern void _ZN6S260C63v17Ev();
extern void _ZN6S260C63v18Ev();
extern void _ZN6S260C63v19Ev();
extern void _ZN6S260C63v20Ev();
extern void _ZN6S260C63v21Ev();
extern void _ZN6S260C63v22Ev();
extern void _ZN6S260C63v23Ev();
extern void _ZN6S260C63v24Ev();
extern void _ZN6S260C63v25Ev();
extern void _ZN6S260C63v26Ev();
extern void _ZN6S260C63v27Ev();
extern void _ZN6S260C63v28Ev();
extern void _ZN6S260C63v29Ev();
extern void _ZN6S260C63v30Ev();
extern void _ZN6S260C63v31Ev();
extern void _ZN6S260C63v32Ev();
extern void _ZN6S260C63v33Ev();
extern void _ZN6S260C63v34Ev();
extern void _ZN6S260C63v35Ev();
extern void _ZN6S260C63v36Ev();
extern void _ZN6S260C63v37Ev();
extern void _ZN6S260C63v38Ev();
extern void _ZN6S260C63v39Ev();
extern void _ZN6S260C63v40Ev();
extern void _ZN6S260C63v41Ev();
extern void _ZN6S260C63v42Ev();
extern void _ZN6S260C63v43Ev();
extern void _ZN6S260C63v44Ev();
extern void _ZN6S260C63v45Ev();
extern void _ZN6S260C63v46Ev();
extern void _ZN6S260C63v47Ev();
extern void _ZN6S260C63v48Ev();
extern void _ZN6S260C63v49Ev();
extern void _ZN6S260C63v50Ev();
extern void _ZN6S260C63v51Ev();
extern void _ZN6S260C63v52Ev();
extern void _ZN6S260C63v53Ev();
extern void _ZN6S260C63v54Ev();
extern void _ZN6S260C63v55Ev();
extern void _ZN6S260C63v56Ev();
extern void _ZN6S260C63v57Ev();
extern void _ZN6S260C63v58Ev();
extern void _ZN6S260C63v59Ev();
extern void _ZN6S260C63v60Ev();
extern void _ZN6S260C63v61Ev();
extern void _ZN6S260C63v62Ev();
extern void _ZN6S260C63v63Ev();
extern void _ZN6S260C63v64Ev();
extern void _ZN6S260C63v65Ev();
extern void _ZN6S260C63v66Ev();
extern void _ZN6S260C63v67Ev();
extern void _ZN6S260C63v68Ev();
extern void _ZN6S260C63v69Ev();
extern void _ZN6S260C53v70Ev();
extern void _ZN6S260C53v71Ev();
extern void _ZN6S260C53v72Ev();
extern void _ZN6S260C53v73Ev();
extern void _ZN6S260C53v74Ev();
extern void _ZN6S260C53v75Ev();
extern void _ZN6S260C53v76Ev();
extern void _ZN6S260C53v77Ev();
extern void _ZN6S260C53v78Ev();
extern void _ZN6S260C53v79Ev();
extern void _ZN6S260C53v80Ev();
extern void _ZN6S260C53v81Ev();
extern void _ZN6S260C53v82Ev();
extern void _ZN6S260C53v83Ev();
extern void _ZN6S260C53v84Ev();
extern void _ZN6S260C53v85Ev();
extern void _ZN6S260C53v86Ev();
extern void _ZN6S260C53v87Ev();
extern void _ZN6S260C53v88Ev();
extern void _ZN6S260C53v89Ev();
extern void _ZN6S260C53v90Ev();
extern void _ZN6S260C53v91Ev();
extern void _ZN6S260C43v92Ev();
extern void _ZN6S260C43v93Ev();
extern void _ZN6S260C43v94Ev();
extern void _ZN6S260C43v95Ev();
extern void _ZN6S260C43v96Ev();
extern void _ZN6S260C43v97Ev();
extern void _ZN6S260C43v98Ev();
extern void _ZN6S260C43v99Ev();
extern void _ZN6S260C44v100Ev();
extern void _ZN6S260C44v101Ev();
extern void _ZN6S260C44v102Ev();
extern void _ZN6S260C44v103Ev();
extern void _ZN6S260C44v104Ev();
extern void _ZN6S260C44v105Ev();
extern void _ZN6S260C44v106Ev();
extern void _ZN6S260C44v107Ev();
extern void _ZN6S260C44v108Ev();
extern void _ZN6S260C44v109Ev();
extern void _ZN6S260C44v110Ev();
extern void _ZN6S260C44v111Ev();
extern void _ZN6S260C34v112Ev();
extern void _ZN6S260C34v113Ev();
extern void _ZN6S260C34v114Ev();
extern void _ZN6S260C34v115Ev();
extern void _ZN6S260C24v116Ev();
extern void _ZN6S260C24v117Ev();
extern void _ZN6S260C24v118Ev();
extern void _ZN6S260C24v119Ev();
extern void _ZN6S260C24v120Ev();
extern void _ZN6S260C24v121Ev();
extern void _ZN6S260C24v122Ev();
extern void _ZN6S260C12v1Ev();
extern void _ZN6S260C12v2Ev();
extern void _ZN6S260C12v3Ev();
extern void _ZN6S260C12v4Ev();
extern void _ZN6S260C12v5Ev();
static  VTBL_ENTRY vtc_S260C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S260C1[0]),
  (VTBL_ENTRY)&_ZN6S260C1D1Ev,
  (VTBL_ENTRY)&_ZN6S260C1D0Ev,
  (VTBL_ENTRY)&_ZN6S260C62v6Ev,
  (VTBL_ENTRY)&_ZN6S260C62v7Ev,
  (VTBL_ENTRY)&_ZN6S260C62v8Ev,
  (VTBL_ENTRY)&_ZN6S260C62v9Ev,
  (VTBL_ENTRY)&_ZN6S260C63v10Ev,
  (VTBL_ENTRY)&_ZN6S260C63v11Ev,
  (VTBL_ENTRY)&_ZN6S260C63v12Ev,
  (VTBL_ENTRY)&_ZN6S260C63v13Ev,
  (VTBL_ENTRY)&_ZN6S260C63v14Ev,
  (VTBL_ENTRY)&_ZN6S260C63v15Ev,
  (VTBL_ENTRY)&_ZN6S260C63v16Ev,
  (VTBL_ENTRY)&_ZN6S260C63v17Ev,
  (VTBL_ENTRY)&_ZN6S260C63v18Ev,
  (VTBL_ENTRY)&_ZN6S260C63v19Ev,
  (VTBL_ENTRY)&_ZN6S260C63v20Ev,
  (VTBL_ENTRY)&_ZN6S260C63v21Ev,
  (VTBL_ENTRY)&_ZN6S260C63v22Ev,
  (VTBL_ENTRY)&_ZN6S260C63v23Ev,
  (VTBL_ENTRY)&_ZN6S260C63v24Ev,
  (VTBL_ENTRY)&_ZN6S260C63v25Ev,
  (VTBL_ENTRY)&_ZN6S260C63v26Ev,
  (VTBL_ENTRY)&_ZN6S260C63v27Ev,
  (VTBL_ENTRY)&_ZN6S260C63v28Ev,
  (VTBL_ENTRY)&_ZN6S260C63v29Ev,
  (VTBL_ENTRY)&_ZN6S260C63v30Ev,
  (VTBL_ENTRY)&_ZN6S260C63v31Ev,
  (VTBL_ENTRY)&_ZN6S260C63v32Ev,
  (VTBL_ENTRY)&_ZN6S260C63v33Ev,
  (VTBL_ENTRY)&_ZN6S260C63v34Ev,
  (VTBL_ENTRY)&_ZN6S260C63v35Ev,
  (VTBL_ENTRY)&_ZN6S260C63v36Ev,
  (VTBL_ENTRY)&_ZN6S260C63v37Ev,
  (VTBL_ENTRY)&_ZN6S260C63v38Ev,
  (VTBL_ENTRY)&_ZN6S260C63v39Ev,
  (VTBL_ENTRY)&_ZN6S260C63v40Ev,
  (VTBL_ENTRY)&_ZN6S260C63v41Ev,
  (VTBL_ENTRY)&_ZN6S260C63v42Ev,
  (VTBL_ENTRY)&_ZN6S260C63v43Ev,
  (VTBL_ENTRY)&_ZN6S260C63v44Ev,
  (VTBL_ENTRY)&_ZN6S260C63v45Ev,
  (VTBL_ENTRY)&_ZN6S260C63v46Ev,
  (VTBL_ENTRY)&_ZN6S260C63v47Ev,
  (VTBL_ENTRY)&_ZN6S260C63v48Ev,
  (VTBL_ENTRY)&_ZN6S260C63v49Ev,
  (VTBL_ENTRY)&_ZN6S260C63v50Ev,
  (VTBL_ENTRY)&_ZN6S260C63v51Ev,
  (VTBL_ENTRY)&_ZN6S260C63v52Ev,
  (VTBL_ENTRY)&_ZN6S260C63v53Ev,
  (VTBL_ENTRY)&_ZN6S260C63v54Ev,
  (VTBL_ENTRY)&_ZN6S260C63v55Ev,
  (VTBL_ENTRY)&_ZN6S260C63v56Ev,
  (VTBL_ENTRY)&_ZN6S260C63v57Ev,
  (VTBL_ENTRY)&_ZN6S260C63v58Ev,
  (VTBL_ENTRY)&_ZN6S260C63v59Ev,
  (VTBL_ENTRY)&_ZN6S260C63v60Ev,
  (VTBL_ENTRY)&_ZN6S260C63v61Ev,
  (VTBL_ENTRY)&_ZN6S260C63v62Ev,
  (VTBL_ENTRY)&_ZN6S260C63v63Ev,
  (VTBL_ENTRY)&_ZN6S260C63v64Ev,
  (VTBL_ENTRY)&_ZN6S260C63v65Ev,
  (VTBL_ENTRY)&_ZN6S260C63v66Ev,
  (VTBL_ENTRY)&_ZN6S260C63v67Ev,
  (VTBL_ENTRY)&_ZN6S260C63v68Ev,
  (VTBL_ENTRY)&_ZN6S260C63v69Ev,
  (VTBL_ENTRY)&_ZN6S260C53v70Ev,
  (VTBL_ENTRY)&_ZN6S260C53v71Ev,
  (VTBL_ENTRY)&_ZN6S260C53v72Ev,
  (VTBL_ENTRY)&_ZN6S260C53v73Ev,
  (VTBL_ENTRY)&_ZN6S260C53v74Ev,
  (VTBL_ENTRY)&_ZN6S260C53v75Ev,
  (VTBL_ENTRY)&_ZN6S260C53v76Ev,
  (VTBL_ENTRY)&_ZN6S260C53v77Ev,
  (VTBL_ENTRY)&_ZN6S260C53v78Ev,
  (VTBL_ENTRY)&_ZN6S260C53v79Ev,
  (VTBL_ENTRY)&_ZN6S260C53v80Ev,
  (VTBL_ENTRY)&_ZN6S260C53v81Ev,
  (VTBL_ENTRY)&_ZN6S260C53v82Ev,
  (VTBL_ENTRY)&_ZN6S260C53v83Ev,
  (VTBL_ENTRY)&_ZN6S260C53v84Ev,
  (VTBL_ENTRY)&_ZN6S260C53v85Ev,
  (VTBL_ENTRY)&_ZN6S260C53v86Ev,
  (VTBL_ENTRY)&_ZN6S260C53v87Ev,
  (VTBL_ENTRY)&_ZN6S260C53v88Ev,
  (VTBL_ENTRY)&_ZN6S260C53v89Ev,
  (VTBL_ENTRY)&_ZN6S260C53v90Ev,
  (VTBL_ENTRY)&_ZN6S260C53v91Ev,
  (VTBL_ENTRY)&_ZN6S260C43v92Ev,
  (VTBL_ENTRY)&_ZN6S260C43v93Ev,
  (VTBL_ENTRY)&_ZN6S260C43v94Ev,
  (VTBL_ENTRY)&_ZN6S260C43v95Ev,
  (VTBL_ENTRY)&_ZN6S260C43v96Ev,
  (VTBL_ENTRY)&_ZN6S260C43v97Ev,
  (VTBL_ENTRY)&_ZN6S260C43v98Ev,
  (VTBL_ENTRY)&_ZN6S260C43v99Ev,
  (VTBL_ENTRY)&_ZN6S260C44v100Ev,
  (VTBL_ENTRY)&_ZN6S260C44v101Ev,
  (VTBL_ENTRY)&_ZN6S260C44v102Ev,
  (VTBL_ENTRY)&_ZN6S260C44v103Ev,
  (VTBL_ENTRY)&_ZN6S260C44v104Ev,
  (VTBL_ENTRY)&_ZN6S260C44v105Ev,
  (VTBL_ENTRY)&_ZN6S260C44v106Ev,
  (VTBL_ENTRY)&_ZN6S260C44v107Ev,
  (VTBL_ENTRY)&_ZN6S260C44v108Ev,
  (VTBL_ENTRY)&_ZN6S260C44v109Ev,
  (VTBL_ENTRY)&_ZN6S260C44v110Ev,
  (VTBL_ENTRY)&_ZN6S260C44v111Ev,
  (VTBL_ENTRY)&_ZN6S260C34v112Ev,
  (VTBL_ENTRY)&_ZN6S260C34v113Ev,
  (VTBL_ENTRY)&_ZN6S260C34v114Ev,
  (VTBL_ENTRY)&_ZN6S260C34v115Ev,
  (VTBL_ENTRY)&_ZN6S260C24v116Ev,
  (VTBL_ENTRY)&_ZN6S260C24v117Ev,
  (VTBL_ENTRY)&_ZN6S260C24v118Ev,
  (VTBL_ENTRY)&_ZN6S260C24v119Ev,
  (VTBL_ENTRY)&_ZN6S260C24v120Ev,
  (VTBL_ENTRY)&_ZN6S260C24v121Ev,
  (VTBL_ENTRY)&_ZN6S260C24v122Ev,
  (VTBL_ENTRY)&_ZN6S260C12v1Ev,
  (VTBL_ENTRY)&_ZN6S260C12v2Ev,
  (VTBL_ENTRY)&_ZN6S260C12v3Ev,
  (VTBL_ENTRY)&_ZN6S260C12v4Ev,
  (VTBL_ENTRY)&_ZN6S260C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S260C1[];
extern  VTBL_ENTRY _ZTV6S260C1[];
Class_Descriptor cd_S260C1 = {  "S260C1", // class name
  bases_S260C1, 5,
  &(vtc_S260C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,304), // object size
  NSPAIRA(_ZTI6S260C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S260C1),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C7  {
  int s72c7f0;
  __tsi64 s72c7f1;
  void *s72c7f2[4];
  int s72c7f3[2];
  void *s72c7f4;
  ::S3350C4_nt s72c7f5;
  void *s72c7f6[2];
  virtual  ~S72C7(); // _ZN5S72C7D1Ev
  virtual void  v4(); // _ZN5S72C72v4Ev
  virtual void  v5(); // _ZN5S72C72v5Ev
  virtual void  v6(); // _ZN5S72C72v6Ev
  virtual void  v7(); // _ZN5S72C72v7Ev
  virtual void  v8(); // _ZN5S72C72v8Ev
  virtual void  v9(); // _ZN5S72C72v9Ev
  virtual void  v10(); // _ZN5S72C73v10Ev
  virtual void  v11(); // _ZN5S72C73v11Ev
  virtual void  v12(); // _ZN5S72C73v12Ev
  virtual void  v13(); // _ZN5S72C73v13Ev
  virtual void  v14(); // _ZN5S72C73v14Ev
  virtual void  v15(); // _ZN5S72C73v15Ev
  virtual void  v16(); // _ZN5S72C73v16Ev
  virtual void  v17(); // _ZN5S72C73v17Ev
  virtual void  v18(); // _ZN5S72C73v18Ev
  virtual void  v19(); // _ZN5S72C73v19Ev
  virtual void  v20(); // _ZN5S72C73v20Ev
  virtual void  v21(); // _ZN5S72C73v21Ev
  virtual void  v22(); // _ZN5S72C73v22Ev
  virtual void  v23(); // _ZN5S72C73v23Ev
  virtual void  v24(); // _ZN5S72C73v24Ev
  virtual void  v25(); // _ZN5S72C73v25Ev
  virtual void  v26(); // _ZN5S72C73v26Ev
  virtual void  v27(); // _ZN5S72C73v27Ev
  virtual void  v28(); // _ZN5S72C73v28Ev
  virtual void  v29(); // _ZN5S72C73v29Ev
  virtual void  v30(); // _ZN5S72C73v30Ev
  virtual void  v31(); // _ZN5S72C73v31Ev
  virtual void  v32(); // _ZN5S72C73v32Ev
  virtual void  v33(); // _ZN5S72C73v33Ev
  virtual void  v34(); // _ZN5S72C73v34Ev
  virtual void  v35(); // _ZN5S72C73v35Ev
  virtual void  v36(); // _ZN5S72C73v36Ev
  virtual void  v37(); // _ZN5S72C73v37Ev
  virtual void  v38(); // _ZN5S72C73v38Ev
  virtual void  v39(); // _ZN5S72C73v39Ev
  virtual void  v40(); // _ZN5S72C73v40Ev
  virtual void  v41(); // _ZN5S72C73v41Ev
  virtual void  v42(); // _ZN5S72C73v42Ev
  virtual void  v43(); // _ZN5S72C73v43Ev
  virtual void  v44(); // _ZN5S72C73v44Ev
  virtual void  v45(); // _ZN5S72C73v45Ev
  virtual void  v46(); // _ZN5S72C73v46Ev
  virtual void  v47(); // _ZN5S72C73v47Ev
  virtual void  v48(); // _ZN5S72C73v48Ev
  virtual void  v49(); // _ZN5S72C73v49Ev
  virtual void  v50(); // _ZN5S72C73v50Ev
  virtual void  v51(); // _ZN5S72C73v51Ev
  virtual void  v52(); // _ZN5S72C73v52Ev
  virtual void  v53(); // _ZN5S72C73v53Ev
  virtual void  v54(); // _ZN5S72C73v54Ev
  virtual void  v55(); // _ZN5S72C73v55Ev
  virtual void  v56(); // _ZN5S72C73v56Ev
  virtual void  v57(); // _ZN5S72C73v57Ev
  virtual void  v58(); // _ZN5S72C73v58Ev
  virtual void  v59(); // _ZN5S72C73v59Ev
  virtual void  v60(); // _ZN5S72C73v60Ev
  virtual void  v61(); // _ZN5S72C73v61Ev
  virtual void  v62(); // _ZN5S72C73v62Ev
  virtual void  v63(); // _ZN5S72C73v63Ev
  virtual void  v64(); // _ZN5S72C73v64Ev
  virtual void  v65(); // _ZN5S72C73v65Ev
  virtual void  v66(); // _ZN5S72C73v66Ev
  virtual void  v67(); // _ZN5S72C73v67Ev
  S72C7(); // tgen
};
//SIG(-1 S72C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S72C7 ::~S72C7(){ note_dtor("S72C7", this);}
void  S72C7 ::v4(){vfunc_called(this, "_ZN5S72C72v4Ev");}
void  S72C7 ::v5(){vfunc_called(this, "_ZN5S72C72v5Ev");}
void  S72C7 ::v6(){vfunc_called(this, "_ZN5S72C72v6Ev");}
void  S72C7 ::v7(){vfunc_called(this, "_ZN5S72C72v7Ev");}
void  S72C7 ::v8(){vfunc_called(this, "_ZN5S72C72v8Ev");}
void  S72C7 ::v9(){vfunc_called(this, "_ZN5S72C72v9Ev");}
void  S72C7 ::v10(){vfunc_called(this, "_ZN5S72C73v10Ev");}
void  S72C7 ::v11(){vfunc_called(this, "_ZN5S72C73v11Ev");}
void  S72C7 ::v12(){vfunc_called(this, "_ZN5S72C73v12Ev");}
void  S72C7 ::v13(){vfunc_called(this, "_ZN5S72C73v13Ev");}
void  S72C7 ::v14(){vfunc_called(this, "_ZN5S72C73v14Ev");}
void  S72C7 ::v15(){vfunc_called(this, "_ZN5S72C73v15Ev");}
void  S72C7 ::v16(){vfunc_called(this, "_ZN5S72C73v16Ev");}
void  S72C7 ::v17(){vfunc_called(this, "_ZN5S72C73v17Ev");}
void  S72C7 ::v18(){vfunc_called(this, "_ZN5S72C73v18Ev");}
void  S72C7 ::v19(){vfunc_called(this, "_ZN5S72C73v19Ev");}
void  S72C7 ::v20(){vfunc_called(this, "_ZN5S72C73v20Ev");}
void  S72C7 ::v21(){vfunc_called(this, "_ZN5S72C73v21Ev");}
void  S72C7 ::v22(){vfunc_called(this, "_ZN5S72C73v22Ev");}
void  S72C7 ::v23(){vfunc_called(this, "_ZN5S72C73v23Ev");}
void  S72C7 ::v24(){vfunc_called(this, "_ZN5S72C73v24Ev");}
void  S72C7 ::v25(){vfunc_called(this, "_ZN5S72C73v25Ev");}
void  S72C7 ::v26(){vfunc_called(this, "_ZN5S72C73v26Ev");}
void  S72C7 ::v27(){vfunc_called(this, "_ZN5S72C73v27Ev");}
void  S72C7 ::v28(){vfunc_called(this, "_ZN5S72C73v28Ev");}
void  S72C7 ::v29(){vfunc_called(this, "_ZN5S72C73v29Ev");}
void  S72C7 ::v30(){vfunc_called(this, "_ZN5S72C73v30Ev");}
void  S72C7 ::v31(){vfunc_called(this, "_ZN5S72C73v31Ev");}
void  S72C7 ::v32(){vfunc_called(this, "_ZN5S72C73v32Ev");}
void  S72C7 ::v33(){vfunc_called(this, "_ZN5S72C73v33Ev");}
void  S72C7 ::v34(){vfunc_called(this, "_ZN5S72C73v34Ev");}
void  S72C7 ::v35(){vfunc_called(this, "_ZN5S72C73v35Ev");}
void  S72C7 ::v36(){vfunc_called(this, "_ZN5S72C73v36Ev");}
void  S72C7 ::v37(){vfunc_called(this, "_ZN5S72C73v37Ev");}
void  S72C7 ::v38(){vfunc_called(this, "_ZN5S72C73v38Ev");}
void  S72C7 ::v39(){vfunc_called(this, "_ZN5S72C73v39Ev");}
void  S72C7 ::v40(){vfunc_called(this, "_ZN5S72C73v40Ev");}
void  S72C7 ::v41(){vfunc_called(this, "_ZN5S72C73v41Ev");}
void  S72C7 ::v42(){vfunc_called(this, "_ZN5S72C73v42Ev");}
void  S72C7 ::v43(){vfunc_called(this, "_ZN5S72C73v43Ev");}
void  S72C7 ::v44(){vfunc_called(this, "_ZN5S72C73v44Ev");}
void  S72C7 ::v45(){vfunc_called(this, "_ZN5S72C73v45Ev");}
void  S72C7 ::v46(){vfunc_called(this, "_ZN5S72C73v46Ev");}
void  S72C7 ::v47(){vfunc_called(this, "_ZN5S72C73v47Ev");}
void  S72C7 ::v48(){vfunc_called(this, "_ZN5S72C73v48Ev");}
void  S72C7 ::v49(){vfunc_called(this, "_ZN5S72C73v49Ev");}
void  S72C7 ::v50(){vfunc_called(this, "_ZN5S72C73v50Ev");}
void  S72C7 ::v51(){vfunc_called(this, "_ZN5S72C73v51Ev");}
void  S72C7 ::v52(){vfunc_called(this, "_ZN5S72C73v52Ev");}
void  S72C7 ::v53(){vfunc_called(this, "_ZN5S72C73v53Ev");}
void  S72C7 ::v54(){vfunc_called(this, "_ZN5S72C73v54Ev");}
void  S72C7 ::v55(){vfunc_called(this, "_ZN5S72C73v55Ev");}
void  S72C7 ::v56(){vfunc_called(this, "_ZN5S72C73v56Ev");}
void  S72C7 ::v57(){vfunc_called(this, "_ZN5S72C73v57Ev");}
void  S72C7 ::v58(){vfunc_called(this, "_ZN5S72C73v58Ev");}
void  S72C7 ::v59(){vfunc_called(this, "_ZN5S72C73v59Ev");}
void  S72C7 ::v60(){vfunc_called(this, "_ZN5S72C73v60Ev");}
void  S72C7 ::v61(){vfunc_called(this, "_ZN5S72C73v61Ev");}
void  S72C7 ::v62(){vfunc_called(this, "_ZN5S72C73v62Ev");}
void  S72C7 ::v63(){vfunc_called(this, "_ZN5S72C73v63Ev");}
void  S72C7 ::v64(){vfunc_called(this, "_ZN5S72C73v64Ev");}
void  S72C7 ::v65(){vfunc_called(this, "_ZN5S72C73v65Ev");}
void  S72C7 ::v66(){vfunc_called(this, "_ZN5S72C73v66Ev");}
void  S72C7 ::v67(){vfunc_called(this, "_ZN5S72C73v67Ev");}
S72C7 ::S72C7(){ note_ctor("S72C7", this);} // tgen

static void Test_S72C7()
{
  extern Class_Descriptor cd_S72C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S72C7, buf);
    S72C7 *dp, &lv = *(dp=new (buf) S72C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S72C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C7)");
    check_field_offset(lv, s72c7f0, ABISELECT(8,4), "S72C7.s72c7f0");
    check_field_offset(lv, s72c7f1, ABISELECT(16,8), "S72C7.s72c7f1");
    check_field_offset(lv, s72c7f2, ABISELECT(24,16), "S72C7.s72c7f2");
    check_field_offset(lv, s72c7f3, ABISELECT(56,32), "S72C7.s72c7f3");
    check_field_offset(lv, s72c7f4, ABISELECT(64,40), "S72C7.s72c7f4");
    check_field_offset(lv, s72c7f5, ABISELECT(72,44), "S72C7.s72c7f5");
    check_field_offset(lv, s72c7f6, ABISELECT(80,52), "S72C7.s72c7f6");
    test_class_info(&lv, &cd_S72C7);
    dp->~S72C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C7(Test_S72C7, "S72C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S72C7C1Ev();
extern void _ZN5S72C7D1Ev();
Name_Map name_map_S72C7[] = {
  NSPAIR(_ZN5S72C7C1Ev),
  NSPAIR(_ZN5S72C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S72C7[];
extern void _ZN5S72C7D1Ev();
extern void _ZN5S72C7D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
static  VTBL_ENTRY vtc_S72C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C7[0]),
  (VTBL_ENTRY)&_ZN5S72C7D1Ev,
  (VTBL_ENTRY)&_ZN5S72C7D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
};
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
Class_Descriptor cd_S72C7 = {  "S72C7", // class name
  0,0,//no base classes
  &(vtc_S72C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S72C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S72C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C6  : S72C7 {
  int s72c6f0[2];
  void *s72c6f1;
  int s72c6f2[2];
  ::S287C8_nt s72c6f3;
  ::S287C8_nt s72c6f4;
  ::S2121C38 s72c6f5;
  ::S287C8_nt s72c6f6;
  unsigned int s72c6f7:1;
  unsigned int s72c6f8:1;
  unsigned int s72c6f9:1;
  unsigned int s72c6f10:1;
  unsigned int s72c6f11:1;
  int s72c6f12[2];
  virtual  ~S72C6(); // _ZN5S72C6D1Ev
  virtual void  v68(); // _ZN5S72C63v68Ev
  virtual void  v69(); // _ZN5S72C63v69Ev
  virtual void  v70(); // _ZN5S72C63v70Ev
  virtual void  v71(); // _ZN5S72C63v71Ev
  virtual void  v72(); // _ZN5S72C63v72Ev
  virtual void  v73(); // _ZN5S72C63v73Ev
  virtual void  v74(); // _ZN5S72C63v74Ev
  virtual void  v75(); // _ZN5S72C63v75Ev
  virtual void  v76(); // _ZN5S72C63v76Ev
  virtual void  v77(); // _ZN5S72C63v77Ev
  virtual void  v78(); // _ZN5S72C63v78Ev
  virtual void  v79(); // _ZN5S72C63v79Ev
  virtual void  v80(); // _ZN5S72C63v80Ev
  virtual void  v81(); // _ZN5S72C63v81Ev
  virtual void  v82(); // _ZN5S72C63v82Ev
  virtual void  v83(); // _ZN5S72C63v83Ev
  virtual void  v84(); // _ZN5S72C63v84Ev
  virtual void  v85(); // _ZN5S72C63v85Ev
  virtual void  v86(); // _ZN5S72C63v86Ev
  virtual void  v87(); // _ZN5S72C63v87Ev
  virtual void  v88(); // _ZN5S72C63v88Ev
  virtual void  v89(); // _ZN5S72C63v89Ev
  S72C6(); // tgen
};
//SIG(-1 S72C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S72C6 ::~S72C6(){ note_dtor("S72C6", this);}
void  S72C6 ::v68(){vfunc_called(this, "_ZN5S72C63v68Ev");}
void  S72C6 ::v69(){vfunc_called(this, "_ZN5S72C63v69Ev");}
void  S72C6 ::v70(){vfunc_called(this, "_ZN5S72C63v70Ev");}
void  S72C6 ::v71(){vfunc_called(this, "_ZN5S72C63v71Ev");}
void  S72C6 ::v72(){vfunc_called(this, "_ZN5S72C63v72Ev");}
void  S72C6 ::v73(){vfunc_called(this, "_ZN5S72C63v73Ev");}
void  S72C6 ::v74(){vfunc_called(this, "_ZN5S72C63v74Ev");}
void  S72C6 ::v75(){vfunc_called(this, "_ZN5S72C63v75Ev");}
void  S72C6 ::v76(){vfunc_called(this, "_ZN5S72C63v76Ev");}
void  S72C6 ::v77(){vfunc_called(this, "_ZN5S72C63v77Ev");}
void  S72C6 ::v78(){vfunc_called(this, "_ZN5S72C63v78Ev");}
void  S72C6 ::v79(){vfunc_called(this, "_ZN5S72C63v79Ev");}
void  S72C6 ::v80(){vfunc_called(this, "_ZN5S72C63v80Ev");}
void  S72C6 ::v81(){vfunc_called(this, "_ZN5S72C63v81Ev");}
void  S72C6 ::v82(){vfunc_called(this, "_ZN5S72C63v82Ev");}
void  S72C6 ::v83(){vfunc_called(this, "_ZN5S72C63v83Ev");}
void  S72C6 ::v84(){vfunc_called(this, "_ZN5S72C63v84Ev");}
void  S72C6 ::v85(){vfunc_called(this, "_ZN5S72C63v85Ev");}
void  S72C6 ::v86(){vfunc_called(this, "_ZN5S72C63v86Ev");}
void  S72C6 ::v87(){vfunc_called(this, "_ZN5S72C63v87Ev");}
void  S72C6 ::v88(){vfunc_called(this, "_ZN5S72C63v88Ev");}
void  S72C6 ::v89(){vfunc_called(this, "_ZN5S72C63v89Ev");}
S72C6 ::S72C6(){ note_ctor("S72C6", this);} // tgen

static void Test_S72C6()
{
  extern Class_Descriptor cd_S72C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S72C6, buf);
    S72C6 *dp, &lv = *(dp=new (buf) S72C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S72C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C6)");
    check_base_class_offset(lv, (S72C7*), 0, "S72C6");
    check_field_offset(lv, s72c6f0, ABISELECT(96,60), "S72C6.s72c6f0");
    check_field_offset(lv, s72c6f1, ABISELECT(104,68), "S72C6.s72c6f1");
    check_field_offset(lv, s72c6f2, ABISELECT(112,72), "S72C6.s72c6f2");
    check_field_offset(lv, s72c6f3, ABISELECT(120,80), "S72C6.s72c6f3");
    check_field_offset(lv, s72c6f4, ABISELECT(136,92), "S72C6.s72c6f4");
    check_field_offset(lv, s72c6f5, ABISELECT(152,104), "S72C6.s72c6f5");
    check_field_offset(lv, s72c6f6, ABISELECT(160,108), "S72C6.s72c6f6");
    set_bf_and_test(lv, s72c6f7, ABISELECT(176,120), 0, 1, 1, "S72C6");
    set_bf_and_test(lv, s72c6f8, ABISELECT(176,120), 1, 1, 1, "S72C6");
    set_bf_and_test(lv, s72c6f9, ABISELECT(176,120), 2, 1, 1, "S72C6");
    set_bf_and_test(lv, s72c6f10, ABISELECT(176,120), 3, 1, 1, "S72C6");
    set_bf_and_test(lv, s72c6f11, ABISELECT(176,120), 4, 1, 1, "S72C6");
    check_field_offset(lv, s72c6f12, ABISELECT(180,124), "S72C6.s72c6f12");
    test_class_info(&lv, &cd_S72C6);
    dp->~S72C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C6(Test_S72C6, "S72C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S72C6C1Ev();
extern void _ZN5S72C6D1Ev();
Name_Map name_map_S72C6[] = {
  NSPAIR(_ZN5S72C6C1Ev),
  NSPAIR(_ZN5S72C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
static Base_Class bases_S72C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S72C6[];
extern void _ZN5S72C6D1Ev();
extern void _ZN5S72C6D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
static  VTBL_ENTRY vtc_S72C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C6[0]),
  (VTBL_ENTRY)&_ZN5S72C6D1Ev,
  (VTBL_ENTRY)&_ZN5S72C6D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
};
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
Class_Descriptor cd_S72C6 = {  "S72C6", // class name
  bases_S72C6, 1,
  &(vtc_S72C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S72C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C5  : S72C6 {
  unsigned int s72c5f0:1;
  unsigned int s72c5f1:1;
  unsigned int s72c5f2:1;
  ::S3350C17 s72c5f3;
  ::S3350C11 s72c5f4;
  ::S3350C5_nt s72c5f5;
  ::S287C27 s72c5f6;
  int s72c5f7[3];
  virtual  ~S72C5(); // _ZN5S72C5D1Ev
  virtual void  v90(); // _ZN5S72C53v90Ev
  virtual void  v91(); // _ZN5S72C53v91Ev
  virtual void  v92(); // _ZN5S72C53v92Ev
  virtual void  v93(); // _ZN5S72C53v93Ev
  virtual void  v94(); // _ZN5S72C53v94Ev
  virtual void  v95(); // _ZN5S72C53v95Ev
  virtual void  v96(); // _ZN5S72C53v96Ev
  virtual void  v97(); // _ZN5S72C53v97Ev
  virtual void  v98(); // _ZN5S72C53v98Ev
  virtual void  v99(); // _ZN5S72C53v99Ev
  virtual void  v100(); // _ZN5S72C54v100Ev
  virtual void  v101(); // _ZN5S72C54v101Ev
  virtual void  v102(); // _ZN5S72C54v102Ev
  virtual void  v103(); // _ZN5S72C54v103Ev
  virtual void  v104(); // _ZN5S72C54v104Ev
  virtual void  v105(); // _ZN5S72C54v105Ev
  virtual void  v106(); // _ZN5S72C54v106Ev
  virtual void  v107(); // _ZN5S72C54v107Ev
  virtual void  v108(); // _ZN5S72C54v108Ev
  virtual void  v109(); // _ZN5S72C54v109Ev
  S72C5(); // tgen
};
//SIG(-1 S72C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S72C5 ::~S72C5(){ note_dtor("S72C5", this);}
void  S72C5 ::v90(){vfunc_called(this, "_ZN5S72C53v90Ev");}
void  S72C5 ::v91(){vfunc_called(this, "_ZN5S72C53v91Ev");}
void  S72C5 ::v92(){vfunc_called(this, "_ZN5S72C53v92Ev");}
void  S72C5 ::v93(){vfunc_called(this, "_ZN5S72C53v93Ev");}
void  S72C5 ::v94(){vfunc_called(this, "_ZN5S72C53v94Ev");}
void  S72C5 ::v95(){vfunc_called(this, "_ZN5S72C53v95Ev");}
void  S72C5 ::v96(){vfunc_called(this, "_ZN5S72C53v96Ev");}
void  S72C5 ::v97(){vfunc_called(this, "_ZN5S72C53v97Ev");}
void  S72C5 ::v98(){vfunc_called(this, "_ZN5S72C53v98Ev");}
void  S72C5 ::v99(){vfunc_called(this, "_ZN5S72C53v99Ev");}
void  S72C5 ::v100(){vfunc_called(this, "_ZN5S72C54v100Ev");}
void  S72C5 ::v101(){vfunc_called(this, "_ZN5S72C54v101Ev");}
void  S72C5 ::v102(){vfunc_called(this, "_ZN5S72C54v102Ev");}
void  S72C5 ::v103(){vfunc_called(this, "_ZN5S72C54v103Ev");}
void  S72C5 ::v104(){vfunc_called(this, "_ZN5S72C54v104Ev");}
void  S72C5 ::v105(){vfunc_called(this, "_ZN5S72C54v105Ev");}
void  S72C5 ::v106(){vfunc_called(this, "_ZN5S72C54v106Ev");}
void  S72C5 ::v107(){vfunc_called(this, "_ZN5S72C54v107Ev");}
void  S72C5 ::v108(){vfunc_called(this, "_ZN5S72C54v108Ev");}
void  S72C5 ::v109(){vfunc_called(this, "_ZN5S72C54v109Ev");}
S72C5 ::S72C5(){ note_ctor("S72C5", this);} // tgen

static void Test_S72C5()
{
  extern Class_Descriptor cd_S72C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S72C5, buf);
    S72C5 *dp, &lv = *(dp=new (buf) S72C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S72C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C5)");
    check_base_class_offset(lv, (S72C7*)(S72C6*), 0, "S72C5");
    check_base_class_offset(lv, (S72C6*), 0, "S72C5");
    set_bf_and_test(lv, s72c5f0, ABISELECT(188,132), 0, 1, 1, "S72C5");
    set_bf_and_test(lv, s72c5f1, ABISELECT(188,132), 1, 1, 1, "S72C5");
    set_bf_and_test(lv, s72c5f2, ABISELECT(188,132), 2, 1, 1, "S72C5");
    check_field_offset(lv, s72c5f3, ABISELECT(192,136), "S72C5.s72c5f3");
    check_field_offset(lv, s72c5f4, ABISELECT(208,148), "S72C5.s72c5f4");
    check_field_offset(lv, s72c5f5, ABISELECT(224,160), "S72C5.s72c5f5");
    check_field_offset(lv, s72c5f6, ABISELECT(240,172), "S72C5.s72c5f6");
    check_field_offset(lv, s72c5f7, ABISELECT(256,184), "S72C5.s72c5f7");
    test_class_info(&lv, &cd_S72C5);
    dp->~S72C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C5(Test_S72C5, "S72C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S72C5C1Ev();
extern void _ZN5S72C5D1Ev();
Name_Map name_map_S72C5[] = {
  NSPAIR(_ZN5S72C5C1Ev),
  NSPAIR(_ZN5S72C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
static Base_Class bases_S72C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S72C5[];
extern void _ZN5S72C5D1Ev();
extern void _ZN5S72C5D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
static  VTBL_ENTRY vtc_S72C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C5[0]),
  (VTBL_ENTRY)&_ZN5S72C5D1Ev,
  (VTBL_ENTRY)&_ZN5S72C5D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
};
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
Class_Descriptor cd_S72C5 = {  "S72C5", // class name
  bases_S72C5, 2,
  &(vtc_S72C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S72C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C4  : S72C5 {
  ::S3350C4_nt s72c4f0;
  unsigned int s72c4f1:1;
  ::S287C23 s72c4f2;
  virtual  ~S72C4(); // _ZN5S72C4D1Ev
  virtual void  v110(); // _ZN5S72C44v110Ev
  virtual void  v111(); // _ZN5S72C44v111Ev
  virtual void  v112(); // _ZN5S72C44v112Ev
  virtual void  v113(); // _ZN5S72C44v113Ev
  S72C4(); // tgen
};
//SIG(-1 S72C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S72C4 ::~S72C4(){ note_dtor("S72C4", this);}
void  S72C4 ::v110(){vfunc_called(this, "_ZN5S72C44v110Ev");}
void  S72C4 ::v111(){vfunc_called(this, "_ZN5S72C44v111Ev");}
void  S72C4 ::v112(){vfunc_called(this, "_ZN5S72C44v112Ev");}
void  S72C4 ::v113(){vfunc_called(this, "_ZN5S72C44v113Ev");}
S72C4 ::S72C4(){ note_ctor("S72C4", this);} // tgen

static void Test_S72C4()
{
  extern Class_Descriptor cd_S72C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S72C4, buf);
    S72C4 *dp, &lv = *(dp=new (buf) S72C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S72C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C4)");
    check_base_class_offset(lv, (S72C7*)(S72C6*)(S72C5*), 0, "S72C4");
    check_base_class_offset(lv, (S72C6*)(S72C5*), 0, "S72C4");
    check_base_class_offset(lv, (S72C5*), 0, "S72C4");
    check_field_offset(lv, s72c4f0, ABISELECT(268,196), "S72C4.s72c4f0");
    set_bf_and_test(lv, s72c4f1, ABISELECT(276,204), 0, 1, 1, "S72C4");
    check_field_offset(lv, s72c4f2, ABISELECT(280,208), "S72C4.s72c4f2");
    test_class_info(&lv, &cd_S72C4);
    dp->~S72C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C4(Test_S72C4, "S72C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S72C4C1Ev();
extern void _ZN5S72C4D1Ev();
Name_Map name_map_S72C4[] = {
  NSPAIR(_ZN5S72C4C1Ev),
  NSPAIR(_ZN5S72C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
extern Class_Descriptor cd_S72C5;
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
static Base_Class bases_S72C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S72C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S72C4[];
extern void _ZN5S72C4D1Ev();
extern void _ZN5S72C4D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
extern void _ZN5S72C44v110Ev();
extern void _ZN5S72C44v111Ev();
extern void _ZN5S72C44v112Ev();
extern void _ZN5S72C44v113Ev();
static  VTBL_ENTRY vtc_S72C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C4[0]),
  (VTBL_ENTRY)&_ZN5S72C4D1Ev,
  (VTBL_ENTRY)&_ZN5S72C4D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
  (VTBL_ENTRY)&_ZN5S72C44v110Ev,
  (VTBL_ENTRY)&_ZN5S72C44v111Ev,
  (VTBL_ENTRY)&_ZN5S72C44v112Ev,
  (VTBL_ENTRY)&_ZN5S72C44v113Ev,
};
extern VTBL_ENTRY _ZTI5S72C4[];
extern  VTBL_ENTRY _ZTV5S72C4[];
Class_Descriptor cd_S72C4 = {  "S72C4", // class name
  bases_S72C4, 3,
  &(vtc_S72C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S72C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C4),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C3  : S72C4 {
  int s72c3f0;
  unsigned int s72c3f1:1;
  virtual  ~S72C3(); // _ZN5S72C3D1Ev
  virtual void  v114(); // _ZN5S72C34v114Ev
  virtual void  v115(); // _ZN5S72C34v115Ev
  virtual void  v116(); // _ZN5S72C34v116Ev
  virtual void  v117(); // _ZN5S72C34v117Ev
  virtual void  v118(); // _ZN5S72C34v118Ev
  virtual void  v119(); // _ZN5S72C34v119Ev
  virtual void  v120(); // _ZN5S72C34v120Ev
  virtual void  v121(); // _ZN5S72C34v121Ev
  S72C3(); // tgen
};
//SIG(-1 S72C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S72C3 ::~S72C3(){ note_dtor("S72C3", this);}
void  S72C3 ::v114(){vfunc_called(this, "_ZN5S72C34v114Ev");}
void  S72C3 ::v115(){vfunc_called(this, "_ZN5S72C34v115Ev");}
void  S72C3 ::v116(){vfunc_called(this, "_ZN5S72C34v116Ev");}
void  S72C3 ::v117(){vfunc_called(this, "_ZN5S72C34v117Ev");}
void  S72C3 ::v118(){vfunc_called(this, "_ZN5S72C34v118Ev");}
void  S72C3 ::v119(){vfunc_called(this, "_ZN5S72C34v119Ev");}
void  S72C3 ::v120(){vfunc_called(this, "_ZN5S72C34v120Ev");}
void  S72C3 ::v121(){vfunc_called(this, "_ZN5S72C34v121Ev");}
S72C3 ::S72C3(){ note_ctor("S72C3", this);} // tgen

static void Test_S72C3()
{
  extern Class_Descriptor cd_S72C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S72C3, buf);
    S72C3 *dp, &lv = *(dp=new (buf) S72C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S72C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C3)");
    check_base_class_offset(lv, (S72C7*)(S72C6*)(S72C5*)(S72C4*), 0, "S72C3");
    check_base_class_offset(lv, (S72C6*)(S72C5*)(S72C4*), 0, "S72C3");
    check_base_class_offset(lv, (S72C5*)(S72C4*), 0, "S72C3");
    check_base_class_offset(lv, (S72C4*), 0, "S72C3");
    check_field_offset(lv, s72c3f0, ABISELECT(296,220), "S72C3.s72c3f0");
    set_bf_and_test(lv, s72c3f1, ABISELECT(300,224), 0, 1, 1, "S72C3");
    test_class_info(&lv, &cd_S72C3);
    dp->~S72C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C3(Test_S72C3, "S72C3", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S72C3C1Ev();
extern void _ZN5S72C3D1Ev();
Name_Map name_map_S72C3[] = {
  NSPAIR(_ZN5S72C3C1Ev),
  NSPAIR(_ZN5S72C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
extern Class_Descriptor cd_S72C5;
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
extern Class_Descriptor cd_S72C4;
extern VTBL_ENTRY _ZTI5S72C4[];
extern  VTBL_ENTRY _ZTV5S72C4[];
static Base_Class bases_S72C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S72C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S72C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S72C3[];
extern void _ZN5S72C3D1Ev();
extern void _ZN5S72C3D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
extern void _ZN5S72C44v110Ev();
extern void _ZN5S72C44v111Ev();
extern void _ZN5S72C44v112Ev();
extern void _ZN5S72C44v113Ev();
extern void _ZN5S72C34v114Ev();
extern void _ZN5S72C34v115Ev();
extern void _ZN5S72C34v116Ev();
extern void _ZN5S72C34v117Ev();
extern void _ZN5S72C34v118Ev();
extern void _ZN5S72C34v119Ev();
extern void _ZN5S72C34v120Ev();
extern void _ZN5S72C34v121Ev();
static  VTBL_ENTRY vtc_S72C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C3[0]),
  (VTBL_ENTRY)&_ZN5S72C3D1Ev,
  (VTBL_ENTRY)&_ZN5S72C3D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
  (VTBL_ENTRY)&_ZN5S72C44v110Ev,
  (VTBL_ENTRY)&_ZN5S72C44v111Ev,
  (VTBL_ENTRY)&_ZN5S72C44v112Ev,
  (VTBL_ENTRY)&_ZN5S72C44v113Ev,
  (VTBL_ENTRY)&_ZN5S72C34v114Ev,
  (VTBL_ENTRY)&_ZN5S72C34v115Ev,
  (VTBL_ENTRY)&_ZN5S72C34v116Ev,
  (VTBL_ENTRY)&_ZN5S72C34v117Ev,
  (VTBL_ENTRY)&_ZN5S72C34v118Ev,
  (VTBL_ENTRY)&_ZN5S72C34v119Ev,
  (VTBL_ENTRY)&_ZN5S72C34v120Ev,
  (VTBL_ENTRY)&_ZN5S72C34v121Ev,
};
extern VTBL_ENTRY _ZTI5S72C3[];
extern  VTBL_ENTRY _ZTV5S72C3[];
Class_Descriptor cd_S72C3 = {  "S72C3", // class name
  bases_S72C3, 4,
  &(vtc_S72C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S72C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C3),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C2  : S72C3 {
  int s72c2f0;
  virtual  ~S72C2(); // _ZN5S72C2D1Ev
  virtual void  v122(); // _ZN5S72C24v122Ev
  virtual void  v123(); // _ZN5S72C24v123Ev
  S72C2(); // tgen
};
//SIG(-1 S72C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S72C2 ::~S72C2(){ note_dtor("S72C2", this);}
void  S72C2 ::v122(){vfunc_called(this, "_ZN5S72C24v122Ev");}
void  S72C2 ::v123(){vfunc_called(this, "_ZN5S72C24v123Ev");}
S72C2 ::S72C2(){ note_ctor("S72C2", this);} // tgen

static void Test_S72C2()
{
  extern Class_Descriptor cd_S72C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S72C2, buf);
    S72C2 *dp, &lv = *(dp=new (buf) S72C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S72C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C2)");
    check_base_class_offset(lv, (S72C7*)(S72C6*)(S72C5*)(S72C4*)(S72C3*), 0, "S72C2");
    check_base_class_offset(lv, (S72C6*)(S72C5*)(S72C4*)(S72C3*), 0, "S72C2");
    check_base_class_offset(lv, (S72C5*)(S72C4*)(S72C3*), 0, "S72C2");
    check_base_class_offset(lv, (S72C4*)(S72C3*), 0, "S72C2");
    check_base_class_offset(lv, (S72C3*), 0, "S72C2");
    check_field_offset(lv, s72c2f0, ABISELECT(304,228), "S72C2.s72c2f0");
    test_class_info(&lv, &cd_S72C2);
    dp->~S72C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C2(Test_S72C2, "S72C2", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S72C2C1Ev();
extern void _ZN5S72C2D1Ev();
Name_Map name_map_S72C2[] = {
  NSPAIR(_ZN5S72C2C1Ev),
  NSPAIR(_ZN5S72C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
extern Class_Descriptor cd_S72C5;
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
extern Class_Descriptor cd_S72C4;
extern VTBL_ENTRY _ZTI5S72C4[];
extern  VTBL_ENTRY _ZTV5S72C4[];
extern Class_Descriptor cd_S72C3;
extern VTBL_ENTRY _ZTI5S72C3[];
extern  VTBL_ENTRY _ZTV5S72C3[];
static Base_Class bases_S72C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S72C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S72C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S72C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S72C2[];
extern void _ZN5S72C2D1Ev();
extern void _ZN5S72C2D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
extern void _ZN5S72C44v110Ev();
extern void _ZN5S72C44v111Ev();
extern void _ZN5S72C44v112Ev();
extern void _ZN5S72C44v113Ev();
extern void _ZN5S72C34v114Ev();
extern void _ZN5S72C34v115Ev();
extern void _ZN5S72C34v116Ev();
extern void _ZN5S72C34v117Ev();
extern void _ZN5S72C34v118Ev();
extern void _ZN5S72C34v119Ev();
extern void _ZN5S72C34v120Ev();
extern void _ZN5S72C34v121Ev();
extern void _ZN5S72C24v122Ev();
extern void _ZN5S72C24v123Ev();
static  VTBL_ENTRY vtc_S72C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C2[0]),
  (VTBL_ENTRY)&_ZN5S72C2D1Ev,
  (VTBL_ENTRY)&_ZN5S72C2D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
  (VTBL_ENTRY)&_ZN5S72C44v110Ev,
  (VTBL_ENTRY)&_ZN5S72C44v111Ev,
  (VTBL_ENTRY)&_ZN5S72C44v112Ev,
  (VTBL_ENTRY)&_ZN5S72C44v113Ev,
  (VTBL_ENTRY)&_ZN5S72C34v114Ev,
  (VTBL_ENTRY)&_ZN5S72C34v115Ev,
  (VTBL_ENTRY)&_ZN5S72C34v116Ev,
  (VTBL_ENTRY)&_ZN5S72C34v117Ev,
  (VTBL_ENTRY)&_ZN5S72C34v118Ev,
  (VTBL_ENTRY)&_ZN5S72C34v119Ev,
  (VTBL_ENTRY)&_ZN5S72C34v120Ev,
  (VTBL_ENTRY)&_ZN5S72C34v121Ev,
  (VTBL_ENTRY)&_ZN5S72C24v122Ev,
  (VTBL_ENTRY)&_ZN5S72C24v123Ev,
};
extern VTBL_ENTRY _ZTI5S72C2[];
extern  VTBL_ENTRY _ZTV5S72C2[];
Class_Descriptor cd_S72C2 = {  "S72C2", // class name
  bases_S72C2, 5,
  &(vtc_S72C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S72C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C2),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S72C1  : S72C2 {
  int s72c1f0;
  ::S3350C4_nt s72c1f1;
  ::S287C8_nt s72c1f2;
  ::S287C8_nt s72c1f3;
  void *s72c1f4;
  ::S32C27_nt s72c1f5;
  virtual  ~S72C1(); // _ZN5S72C1D1Ev
  virtual void  v1(); // _ZN5S72C12v1Ev
  virtual void  v2(); // _ZN5S72C12v2Ev
  virtual void  v3(); // _ZN5S72C12v3Ev
  S72C1(); // tgen
};
//SIG(1 S72C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v110 v111 v112 v113 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v1 v2 v3 Fi FC8 FC9 FC9 Fp FC24{ m Fi[4] Fi:1}}


 S72C1 ::~S72C1(){ note_dtor("S72C1", this);}
void  S72C1 ::v1(){vfunc_called(this, "_ZN5S72C12v1Ev");}
void  S72C1 ::v2(){vfunc_called(this, "_ZN5S72C12v2Ev");}
void  S72C1 ::v3(){vfunc_called(this, "_ZN5S72C12v3Ev");}
S72C1 ::S72C1(){ note_ctor("S72C1", this);} // tgen

static void Test_S72C1()
{
  extern Class_Descriptor cd_S72C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,74)];
    init_test(&cd_S72C1, buf);
    S72C1 *dp, &lv = *(dp=new (buf) S72C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,292), "sizeof(S72C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S72C1)");
    check_base_class_offset(lv, (S72C7*)(S72C6*)(S72C5*)(S72C4*)(S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C6*)(S72C5*)(S72C4*)(S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C5*)(S72C4*)(S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C4*)(S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C3*)(S72C2*), 0, "S72C1");
    check_base_class_offset(lv, (S72C2*), 0, "S72C1");
    check_field_offset(lv, s72c1f0, ABISELECT(308,232), "S72C1.s72c1f0");
    check_field_offset(lv, s72c1f1, ABISELECT(312,236), "S72C1.s72c1f1");
    check_field_offset(lv, s72c1f2, ABISELECT(320,244), "S72C1.s72c1f2");
    check_field_offset(lv, s72c1f3, ABISELECT(336,256), "S72C1.s72c1f3");
    check_field_offset(lv, s72c1f4, ABISELECT(352,268), "S72C1.s72c1f4");
    check_field_offset(lv, s72c1f5, ABISELECT(360,272), "S72C1.s72c1f5");
    test_class_info(&lv, &cd_S72C1);
    dp->~S72C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS72C1(Test_S72C1, "S72C1", ABISELECT(384,292));

#else // __cplusplus

extern void _ZN5S72C1C1Ev();
extern void _ZN5S72C1D1Ev();
Name_Map name_map_S72C1[] = {
  NSPAIR(_ZN5S72C1C1Ev),
  NSPAIR(_ZN5S72C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S72C7;
extern VTBL_ENTRY _ZTI5S72C7[];
extern  VTBL_ENTRY _ZTV5S72C7[];
extern Class_Descriptor cd_S72C6;
extern VTBL_ENTRY _ZTI5S72C6[];
extern  VTBL_ENTRY _ZTV5S72C6[];
extern Class_Descriptor cd_S72C5;
extern VTBL_ENTRY _ZTI5S72C5[];
extern  VTBL_ENTRY _ZTV5S72C5[];
extern Class_Descriptor cd_S72C4;
extern VTBL_ENTRY _ZTI5S72C4[];
extern  VTBL_ENTRY _ZTV5S72C4[];
extern Class_Descriptor cd_S72C3;
extern VTBL_ENTRY _ZTI5S72C3[];
extern  VTBL_ENTRY _ZTV5S72C3[];
extern Class_Descriptor cd_S72C2;
extern VTBL_ENTRY _ZTI5S72C2[];
extern  VTBL_ENTRY _ZTV5S72C2[];
static Base_Class bases_S72C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S72C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S72C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S72C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S72C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S72C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S72C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S72C1[];
extern void _ZN5S72C1D1Ev();
extern void _ZN5S72C1D0Ev();
extern void _ZN5S72C72v4Ev();
extern void _ZN5S72C72v5Ev();
extern void _ZN5S72C72v6Ev();
extern void _ZN5S72C72v7Ev();
extern void _ZN5S72C72v8Ev();
extern void _ZN5S72C72v9Ev();
extern void _ZN5S72C73v10Ev();
extern void _ZN5S72C73v11Ev();
extern void _ZN5S72C73v12Ev();
extern void _ZN5S72C73v13Ev();
extern void _ZN5S72C73v14Ev();
extern void _ZN5S72C73v15Ev();
extern void _ZN5S72C73v16Ev();
extern void _ZN5S72C73v17Ev();
extern void _ZN5S72C73v18Ev();
extern void _ZN5S72C73v19Ev();
extern void _ZN5S72C73v20Ev();
extern void _ZN5S72C73v21Ev();
extern void _ZN5S72C73v22Ev();
extern void _ZN5S72C73v23Ev();
extern void _ZN5S72C73v24Ev();
extern void _ZN5S72C73v25Ev();
extern void _ZN5S72C73v26Ev();
extern void _ZN5S72C73v27Ev();
extern void _ZN5S72C73v28Ev();
extern void _ZN5S72C73v29Ev();
extern void _ZN5S72C73v30Ev();
extern void _ZN5S72C73v31Ev();
extern void _ZN5S72C73v32Ev();
extern void _ZN5S72C73v33Ev();
extern void _ZN5S72C73v34Ev();
extern void _ZN5S72C73v35Ev();
extern void _ZN5S72C73v36Ev();
extern void _ZN5S72C73v37Ev();
extern void _ZN5S72C73v38Ev();
extern void _ZN5S72C73v39Ev();
extern void _ZN5S72C73v40Ev();
extern void _ZN5S72C73v41Ev();
extern void _ZN5S72C73v42Ev();
extern void _ZN5S72C73v43Ev();
extern void _ZN5S72C73v44Ev();
extern void _ZN5S72C73v45Ev();
extern void _ZN5S72C73v46Ev();
extern void _ZN5S72C73v47Ev();
extern void _ZN5S72C73v48Ev();
extern void _ZN5S72C73v49Ev();
extern void _ZN5S72C73v50Ev();
extern void _ZN5S72C73v51Ev();
extern void _ZN5S72C73v52Ev();
extern void _ZN5S72C73v53Ev();
extern void _ZN5S72C73v54Ev();
extern void _ZN5S72C73v55Ev();
extern void _ZN5S72C73v56Ev();
extern void _ZN5S72C73v57Ev();
extern void _ZN5S72C73v58Ev();
extern void _ZN5S72C73v59Ev();
extern void _ZN5S72C73v60Ev();
extern void _ZN5S72C73v61Ev();
extern void _ZN5S72C73v62Ev();
extern void _ZN5S72C73v63Ev();
extern void _ZN5S72C73v64Ev();
extern void _ZN5S72C73v65Ev();
extern void _ZN5S72C73v66Ev();
extern void _ZN5S72C73v67Ev();
extern void _ZN5S72C63v68Ev();
extern void _ZN5S72C63v69Ev();
extern void _ZN5S72C63v70Ev();
extern void _ZN5S72C63v71Ev();
extern void _ZN5S72C63v72Ev();
extern void _ZN5S72C63v73Ev();
extern void _ZN5S72C63v74Ev();
extern void _ZN5S72C63v75Ev();
extern void _ZN5S72C63v76Ev();
extern void _ZN5S72C63v77Ev();
extern void _ZN5S72C63v78Ev();
extern void _ZN5S72C63v79Ev();
extern void _ZN5S72C63v80Ev();
extern void _ZN5S72C63v81Ev();
extern void _ZN5S72C63v82Ev();
extern void _ZN5S72C63v83Ev();
extern void _ZN5S72C63v84Ev();
extern void _ZN5S72C63v85Ev();
extern void _ZN5S72C63v86Ev();
extern void _ZN5S72C63v87Ev();
extern void _ZN5S72C63v88Ev();
extern void _ZN5S72C63v89Ev();
extern void _ZN5S72C53v90Ev();
extern void _ZN5S72C53v91Ev();
extern void _ZN5S72C53v92Ev();
extern void _ZN5S72C53v93Ev();
extern void _ZN5S72C53v94Ev();
extern void _ZN5S72C53v95Ev();
extern void _ZN5S72C53v96Ev();
extern void _ZN5S72C53v97Ev();
extern void _ZN5S72C53v98Ev();
extern void _ZN5S72C53v99Ev();
extern void _ZN5S72C54v100Ev();
extern void _ZN5S72C54v101Ev();
extern void _ZN5S72C54v102Ev();
extern void _ZN5S72C54v103Ev();
extern void _ZN5S72C54v104Ev();
extern void _ZN5S72C54v105Ev();
extern void _ZN5S72C54v106Ev();
extern void _ZN5S72C54v107Ev();
extern void _ZN5S72C54v108Ev();
extern void _ZN5S72C54v109Ev();
extern void _ZN5S72C44v110Ev();
extern void _ZN5S72C44v111Ev();
extern void _ZN5S72C44v112Ev();
extern void _ZN5S72C44v113Ev();
extern void _ZN5S72C34v114Ev();
extern void _ZN5S72C34v115Ev();
extern void _ZN5S72C34v116Ev();
extern void _ZN5S72C34v117Ev();
extern void _ZN5S72C34v118Ev();
extern void _ZN5S72C34v119Ev();
extern void _ZN5S72C34v120Ev();
extern void _ZN5S72C34v121Ev();
extern void _ZN5S72C24v122Ev();
extern void _ZN5S72C24v123Ev();
extern void _ZN5S72C12v1Ev();
extern void _ZN5S72C12v2Ev();
extern void _ZN5S72C12v3Ev();
static  VTBL_ENTRY vtc_S72C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S72C1[0]),
  (VTBL_ENTRY)&_ZN5S72C1D1Ev,
  (VTBL_ENTRY)&_ZN5S72C1D0Ev,
  (VTBL_ENTRY)&_ZN5S72C72v4Ev,
  (VTBL_ENTRY)&_ZN5S72C72v5Ev,
  (VTBL_ENTRY)&_ZN5S72C72v6Ev,
  (VTBL_ENTRY)&_ZN5S72C72v7Ev,
  (VTBL_ENTRY)&_ZN5S72C72v8Ev,
  (VTBL_ENTRY)&_ZN5S72C72v9Ev,
  (VTBL_ENTRY)&_ZN5S72C73v10Ev,
  (VTBL_ENTRY)&_ZN5S72C73v11Ev,
  (VTBL_ENTRY)&_ZN5S72C73v12Ev,
  (VTBL_ENTRY)&_ZN5S72C73v13Ev,
  (VTBL_ENTRY)&_ZN5S72C73v14Ev,
  (VTBL_ENTRY)&_ZN5S72C73v15Ev,
  (VTBL_ENTRY)&_ZN5S72C73v16Ev,
  (VTBL_ENTRY)&_ZN5S72C73v17Ev,
  (VTBL_ENTRY)&_ZN5S72C73v18Ev,
  (VTBL_ENTRY)&_ZN5S72C73v19Ev,
  (VTBL_ENTRY)&_ZN5S72C73v20Ev,
  (VTBL_ENTRY)&_ZN5S72C73v21Ev,
  (VTBL_ENTRY)&_ZN5S72C73v22Ev,
  (VTBL_ENTRY)&_ZN5S72C73v23Ev,
  (VTBL_ENTRY)&_ZN5S72C73v24Ev,
  (VTBL_ENTRY)&_ZN5S72C73v25Ev,
  (VTBL_ENTRY)&_ZN5S72C73v26Ev,
  (VTBL_ENTRY)&_ZN5S72C73v27Ev,
  (VTBL_ENTRY)&_ZN5S72C73v28Ev,
  (VTBL_ENTRY)&_ZN5S72C73v29Ev,
  (VTBL_ENTRY)&_ZN5S72C73v30Ev,
  (VTBL_ENTRY)&_ZN5S72C73v31Ev,
  (VTBL_ENTRY)&_ZN5S72C73v32Ev,
  (VTBL_ENTRY)&_ZN5S72C73v33Ev,
  (VTBL_ENTRY)&_ZN5S72C73v34Ev,
  (VTBL_ENTRY)&_ZN5S72C73v35Ev,
  (VTBL_ENTRY)&_ZN5S72C73v36Ev,
  (VTBL_ENTRY)&_ZN5S72C73v37Ev,
  (VTBL_ENTRY)&_ZN5S72C73v38Ev,
  (VTBL_ENTRY)&_ZN5S72C73v39Ev,
  (VTBL_ENTRY)&_ZN5S72C73v40Ev,
  (VTBL_ENTRY)&_ZN5S72C73v41Ev,
  (VTBL_ENTRY)&_ZN5S72C73v42Ev,
  (VTBL_ENTRY)&_ZN5S72C73v43Ev,
  (VTBL_ENTRY)&_ZN5S72C73v44Ev,
  (VTBL_ENTRY)&_ZN5S72C73v45Ev,
  (VTBL_ENTRY)&_ZN5S72C73v46Ev,
  (VTBL_ENTRY)&_ZN5S72C73v47Ev,
  (VTBL_ENTRY)&_ZN5S72C73v48Ev,
  (VTBL_ENTRY)&_ZN5S72C73v49Ev,
  (VTBL_ENTRY)&_ZN5S72C73v50Ev,
  (VTBL_ENTRY)&_ZN5S72C73v51Ev,
  (VTBL_ENTRY)&_ZN5S72C73v52Ev,
  (VTBL_ENTRY)&_ZN5S72C73v53Ev,
  (VTBL_ENTRY)&_ZN5S72C73v54Ev,
  (VTBL_ENTRY)&_ZN5S72C73v55Ev,
  (VTBL_ENTRY)&_ZN5S72C73v56Ev,
  (VTBL_ENTRY)&_ZN5S72C73v57Ev,
  (VTBL_ENTRY)&_ZN5S72C73v58Ev,
  (VTBL_ENTRY)&_ZN5S72C73v59Ev,
  (VTBL_ENTRY)&_ZN5S72C73v60Ev,
  (VTBL_ENTRY)&_ZN5S72C73v61Ev,
  (VTBL_ENTRY)&_ZN5S72C73v62Ev,
  (VTBL_ENTRY)&_ZN5S72C73v63Ev,
  (VTBL_ENTRY)&_ZN5S72C73v64Ev,
  (VTBL_ENTRY)&_ZN5S72C73v65Ev,
  (VTBL_ENTRY)&_ZN5S72C73v66Ev,
  (VTBL_ENTRY)&_ZN5S72C73v67Ev,
  (VTBL_ENTRY)&_ZN5S72C63v68Ev,
  (VTBL_ENTRY)&_ZN5S72C63v69Ev,
  (VTBL_ENTRY)&_ZN5S72C63v70Ev,
  (VTBL_ENTRY)&_ZN5S72C63v71Ev,
  (VTBL_ENTRY)&_ZN5S72C63v72Ev,
  (VTBL_ENTRY)&_ZN5S72C63v73Ev,
  (VTBL_ENTRY)&_ZN5S72C63v74Ev,
  (VTBL_ENTRY)&_ZN5S72C63v75Ev,
  (VTBL_ENTRY)&_ZN5S72C63v76Ev,
  (VTBL_ENTRY)&_ZN5S72C63v77Ev,
  (VTBL_ENTRY)&_ZN5S72C63v78Ev,
  (VTBL_ENTRY)&_ZN5S72C63v79Ev,
  (VTBL_ENTRY)&_ZN5S72C63v80Ev,
  (VTBL_ENTRY)&_ZN5S72C63v81Ev,
  (VTBL_ENTRY)&_ZN5S72C63v82Ev,
  (VTBL_ENTRY)&_ZN5S72C63v83Ev,
  (VTBL_ENTRY)&_ZN5S72C63v84Ev,
  (VTBL_ENTRY)&_ZN5S72C63v85Ev,
  (VTBL_ENTRY)&_ZN5S72C63v86Ev,
  (VTBL_ENTRY)&_ZN5S72C63v87Ev,
  (VTBL_ENTRY)&_ZN5S72C63v88Ev,
  (VTBL_ENTRY)&_ZN5S72C63v89Ev,
  (VTBL_ENTRY)&_ZN5S72C53v90Ev,
  (VTBL_ENTRY)&_ZN5S72C53v91Ev,
  (VTBL_ENTRY)&_ZN5S72C53v92Ev,
  (VTBL_ENTRY)&_ZN5S72C53v93Ev,
  (VTBL_ENTRY)&_ZN5S72C53v94Ev,
  (VTBL_ENTRY)&_ZN5S72C53v95Ev,
  (VTBL_ENTRY)&_ZN5S72C53v96Ev,
  (VTBL_ENTRY)&_ZN5S72C53v97Ev,
  (VTBL_ENTRY)&_ZN5S72C53v98Ev,
  (VTBL_ENTRY)&_ZN5S72C53v99Ev,
  (VTBL_ENTRY)&_ZN5S72C54v100Ev,
  (VTBL_ENTRY)&_ZN5S72C54v101Ev,
  (VTBL_ENTRY)&_ZN5S72C54v102Ev,
  (VTBL_ENTRY)&_ZN5S72C54v103Ev,
  (VTBL_ENTRY)&_ZN5S72C54v104Ev,
  (VTBL_ENTRY)&_ZN5S72C54v105Ev,
  (VTBL_ENTRY)&_ZN5S72C54v106Ev,
  (VTBL_ENTRY)&_ZN5S72C54v107Ev,
  (VTBL_ENTRY)&_ZN5S72C54v108Ev,
  (VTBL_ENTRY)&_ZN5S72C54v109Ev,
  (VTBL_ENTRY)&_ZN5S72C44v110Ev,
  (VTBL_ENTRY)&_ZN5S72C44v111Ev,
  (VTBL_ENTRY)&_ZN5S72C44v112Ev,
  (VTBL_ENTRY)&_ZN5S72C44v113Ev,
  (VTBL_ENTRY)&_ZN5S72C34v114Ev,
  (VTBL_ENTRY)&_ZN5S72C34v115Ev,
  (VTBL_ENTRY)&_ZN5S72C34v116Ev,
  (VTBL_ENTRY)&_ZN5S72C34v117Ev,
  (VTBL_ENTRY)&_ZN5S72C34v118Ev,
  (VTBL_ENTRY)&_ZN5S72C34v119Ev,
  (VTBL_ENTRY)&_ZN5S72C34v120Ev,
  (VTBL_ENTRY)&_ZN5S72C34v121Ev,
  (VTBL_ENTRY)&_ZN5S72C24v122Ev,
  (VTBL_ENTRY)&_ZN5S72C24v123Ev,
  (VTBL_ENTRY)&_ZN5S72C12v1Ev,
  (VTBL_ENTRY)&_ZN5S72C12v2Ev,
  (VTBL_ENTRY)&_ZN5S72C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S72C1[];
extern  VTBL_ENTRY _ZTV5S72C1[];
Class_Descriptor cd_S72C1 = {  "S72C1", // class name
  bases_S72C1, 6,
  &(vtc_S72C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,292), // object size
  NSPAIRA(_ZTI5S72C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S72C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C7  {
  int s96c7f0;
  __tsi64 s96c7f1;
  void *s96c7f2[4];
  int s96c7f3[2];
  void *s96c7f4;
  ::S3350C4_nt s96c7f5;
  void *s96c7f6[2];
  virtual  ~S96C7(); // _ZN5S96C7D1Ev
  virtual void  v5(); // _ZN5S96C72v5Ev
  virtual void  v6(); // _ZN5S96C72v6Ev
  virtual void  v7(); // _ZN5S96C72v7Ev
  virtual void  v8(); // _ZN5S96C72v8Ev
  virtual void  v9(); // _ZN5S96C72v9Ev
  virtual void  v10(); // _ZN5S96C73v10Ev
  virtual void  v11(); // _ZN5S96C73v11Ev
  virtual void  v12(); // _ZN5S96C73v12Ev
  virtual void  v13(); // _ZN5S96C73v13Ev
  virtual void  v14(); // _ZN5S96C73v14Ev
  virtual void  v15(); // _ZN5S96C73v15Ev
  virtual void  v16(); // _ZN5S96C73v16Ev
  virtual void  v17(); // _ZN5S96C73v17Ev
  virtual void  v18(); // _ZN5S96C73v18Ev
  virtual void  v19(); // _ZN5S96C73v19Ev
  virtual void  v20(); // _ZN5S96C73v20Ev
  virtual void  v21(); // _ZN5S96C73v21Ev
  virtual void  v22(); // _ZN5S96C73v22Ev
  virtual void  v23(); // _ZN5S96C73v23Ev
  virtual void  v24(); // _ZN5S96C73v24Ev
  virtual void  v25(); // _ZN5S96C73v25Ev
  virtual void  v26(); // _ZN5S96C73v26Ev
  virtual void  v27(); // _ZN5S96C73v27Ev
  virtual void  v28(); // _ZN5S96C73v28Ev
  virtual void  v29(); // _ZN5S96C73v29Ev
  virtual void  v30(); // _ZN5S96C73v30Ev
  virtual void  v31(); // _ZN5S96C73v31Ev
  virtual void  v32(); // _ZN5S96C73v32Ev
  virtual void  v33(); // _ZN5S96C73v33Ev
  virtual void  v34(); // _ZN5S96C73v34Ev
  virtual void  v35(); // _ZN5S96C73v35Ev
  virtual void  v36(); // _ZN5S96C73v36Ev
  virtual void  v37(); // _ZN5S96C73v37Ev
  virtual void  v38(); // _ZN5S96C73v38Ev
  virtual void  v39(); // _ZN5S96C73v39Ev
  virtual void  v40(); // _ZN5S96C73v40Ev
  virtual void  v41(); // _ZN5S96C73v41Ev
  virtual void  v42(); // _ZN5S96C73v42Ev
  virtual void  v43(); // _ZN5S96C73v43Ev
  virtual void  v44(); // _ZN5S96C73v44Ev
  virtual void  v45(); // _ZN5S96C73v45Ev
  virtual void  v46(); // _ZN5S96C73v46Ev
  virtual void  v47(); // _ZN5S96C73v47Ev
  virtual void  v48(); // _ZN5S96C73v48Ev
  virtual void  v49(); // _ZN5S96C73v49Ev
  virtual void  v50(); // _ZN5S96C73v50Ev
  virtual void  v51(); // _ZN5S96C73v51Ev
  virtual void  v52(); // _ZN5S96C73v52Ev
  virtual void  v53(); // _ZN5S96C73v53Ev
  virtual void  v54(); // _ZN5S96C73v54Ev
  virtual void  v55(); // _ZN5S96C73v55Ev
  virtual void  v56(); // _ZN5S96C73v56Ev
  virtual void  v57(); // _ZN5S96C73v57Ev
  virtual void  v58(); // _ZN5S96C73v58Ev
  virtual void  v59(); // _ZN5S96C73v59Ev
  virtual void  v60(); // _ZN5S96C73v60Ev
  virtual void  v61(); // _ZN5S96C73v61Ev
  virtual void  v62(); // _ZN5S96C73v62Ev
  virtual void  v63(); // _ZN5S96C73v63Ev
  virtual void  v64(); // _ZN5S96C73v64Ev
  virtual void  v65(); // _ZN5S96C73v65Ev
  virtual void  v66(); // _ZN5S96C73v66Ev
  virtual void  v67(); // _ZN5S96C73v67Ev
  virtual void  v68(); // _ZN5S96C73v68Ev
  S96C7(); // tgen
};
//SIG(-1 S96C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S96C7 ::~S96C7(){ note_dtor("S96C7", this);}
void  S96C7 ::v5(){vfunc_called(this, "_ZN5S96C72v5Ev");}
void  S96C7 ::v6(){vfunc_called(this, "_ZN5S96C72v6Ev");}
void  S96C7 ::v7(){vfunc_called(this, "_ZN5S96C72v7Ev");}
void  S96C7 ::v8(){vfunc_called(this, "_ZN5S96C72v8Ev");}
void  S96C7 ::v9(){vfunc_called(this, "_ZN5S96C72v9Ev");}
void  S96C7 ::v10(){vfunc_called(this, "_ZN5S96C73v10Ev");}
void  S96C7 ::v11(){vfunc_called(this, "_ZN5S96C73v11Ev");}
void  S96C7 ::v12(){vfunc_called(this, "_ZN5S96C73v12Ev");}
void  S96C7 ::v13(){vfunc_called(this, "_ZN5S96C73v13Ev");}
void  S96C7 ::v14(){vfunc_called(this, "_ZN5S96C73v14Ev");}
void  S96C7 ::v15(){vfunc_called(this, "_ZN5S96C73v15Ev");}
void  S96C7 ::v16(){vfunc_called(this, "_ZN5S96C73v16Ev");}
void  S96C7 ::v17(){vfunc_called(this, "_ZN5S96C73v17Ev");}
void  S96C7 ::v18(){vfunc_called(this, "_ZN5S96C73v18Ev");}
void  S96C7 ::v19(){vfunc_called(this, "_ZN5S96C73v19Ev");}
void  S96C7 ::v20(){vfunc_called(this, "_ZN5S96C73v20Ev");}
void  S96C7 ::v21(){vfunc_called(this, "_ZN5S96C73v21Ev");}
void  S96C7 ::v22(){vfunc_called(this, "_ZN5S96C73v22Ev");}
void  S96C7 ::v23(){vfunc_called(this, "_ZN5S96C73v23Ev");}
void  S96C7 ::v24(){vfunc_called(this, "_ZN5S96C73v24Ev");}
void  S96C7 ::v25(){vfunc_called(this, "_ZN5S96C73v25Ev");}
void  S96C7 ::v26(){vfunc_called(this, "_ZN5S96C73v26Ev");}
void  S96C7 ::v27(){vfunc_called(this, "_ZN5S96C73v27Ev");}
void  S96C7 ::v28(){vfunc_called(this, "_ZN5S96C73v28Ev");}
void  S96C7 ::v29(){vfunc_called(this, "_ZN5S96C73v29Ev");}
void  S96C7 ::v30(){vfunc_called(this, "_ZN5S96C73v30Ev");}
void  S96C7 ::v31(){vfunc_called(this, "_ZN5S96C73v31Ev");}
void  S96C7 ::v32(){vfunc_called(this, "_ZN5S96C73v32Ev");}
void  S96C7 ::v33(){vfunc_called(this, "_ZN5S96C73v33Ev");}
void  S96C7 ::v34(){vfunc_called(this, "_ZN5S96C73v34Ev");}
void  S96C7 ::v35(){vfunc_called(this, "_ZN5S96C73v35Ev");}
void  S96C7 ::v36(){vfunc_called(this, "_ZN5S96C73v36Ev");}
void  S96C7 ::v37(){vfunc_called(this, "_ZN5S96C73v37Ev");}
void  S96C7 ::v38(){vfunc_called(this, "_ZN5S96C73v38Ev");}
void  S96C7 ::v39(){vfunc_called(this, "_ZN5S96C73v39Ev");}
void  S96C7 ::v40(){vfunc_called(this, "_ZN5S96C73v40Ev");}
void  S96C7 ::v41(){vfunc_called(this, "_ZN5S96C73v41Ev");}
void  S96C7 ::v42(){vfunc_called(this, "_ZN5S96C73v42Ev");}
void  S96C7 ::v43(){vfunc_called(this, "_ZN5S96C73v43Ev");}
void  S96C7 ::v44(){vfunc_called(this, "_ZN5S96C73v44Ev");}
void  S96C7 ::v45(){vfunc_called(this, "_ZN5S96C73v45Ev");}
void  S96C7 ::v46(){vfunc_called(this, "_ZN5S96C73v46Ev");}
void  S96C7 ::v47(){vfunc_called(this, "_ZN5S96C73v47Ev");}
void  S96C7 ::v48(){vfunc_called(this, "_ZN5S96C73v48Ev");}
void  S96C7 ::v49(){vfunc_called(this, "_ZN5S96C73v49Ev");}
void  S96C7 ::v50(){vfunc_called(this, "_ZN5S96C73v50Ev");}
void  S96C7 ::v51(){vfunc_called(this, "_ZN5S96C73v51Ev");}
void  S96C7 ::v52(){vfunc_called(this, "_ZN5S96C73v52Ev");}
void  S96C7 ::v53(){vfunc_called(this, "_ZN5S96C73v53Ev");}
void  S96C7 ::v54(){vfunc_called(this, "_ZN5S96C73v54Ev");}
void  S96C7 ::v55(){vfunc_called(this, "_ZN5S96C73v55Ev");}
void  S96C7 ::v56(){vfunc_called(this, "_ZN5S96C73v56Ev");}
void  S96C7 ::v57(){vfunc_called(this, "_ZN5S96C73v57Ev");}
void  S96C7 ::v58(){vfunc_called(this, "_ZN5S96C73v58Ev");}
void  S96C7 ::v59(){vfunc_called(this, "_ZN5S96C73v59Ev");}
void  S96C7 ::v60(){vfunc_called(this, "_ZN5S96C73v60Ev");}
void  S96C7 ::v61(){vfunc_called(this, "_ZN5S96C73v61Ev");}
void  S96C7 ::v62(){vfunc_called(this, "_ZN5S96C73v62Ev");}
void  S96C7 ::v63(){vfunc_called(this, "_ZN5S96C73v63Ev");}
void  S96C7 ::v64(){vfunc_called(this, "_ZN5S96C73v64Ev");}
void  S96C7 ::v65(){vfunc_called(this, "_ZN5S96C73v65Ev");}
void  S96C7 ::v66(){vfunc_called(this, "_ZN5S96C73v66Ev");}
void  S96C7 ::v67(){vfunc_called(this, "_ZN5S96C73v67Ev");}
void  S96C7 ::v68(){vfunc_called(this, "_ZN5S96C73v68Ev");}
S96C7 ::S96C7(){ note_ctor("S96C7", this);} // tgen

static void Test_S96C7()
{
  extern Class_Descriptor cd_S96C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S96C7, buf);
    S96C7 *dp, &lv = *(dp=new (buf) S96C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S96C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C7)");
    check_field_offset(lv, s96c7f0, ABISELECT(8,4), "S96C7.s96c7f0");
    check_field_offset(lv, s96c7f1, ABISELECT(16,8), "S96C7.s96c7f1");
    check_field_offset(lv, s96c7f2, ABISELECT(24,16), "S96C7.s96c7f2");
    check_field_offset(lv, s96c7f3, ABISELECT(56,32), "S96C7.s96c7f3");
    check_field_offset(lv, s96c7f4, ABISELECT(64,40), "S96C7.s96c7f4");
    check_field_offset(lv, s96c7f5, ABISELECT(72,44), "S96C7.s96c7f5");
    check_field_offset(lv, s96c7f6, ABISELECT(80,52), "S96C7.s96c7f6");
    test_class_info(&lv, &cd_S96C7);
    dp->~S96C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C7(Test_S96C7, "S96C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S96C7C1Ev();
extern void _ZN5S96C7D1Ev();
Name_Map name_map_S96C7[] = {
  NSPAIR(_ZN5S96C7C1Ev),
  NSPAIR(_ZN5S96C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S96C7[];
extern void _ZN5S96C7D1Ev();
extern void _ZN5S96C7D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
static  VTBL_ENTRY vtc_S96C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C7[0]),
  (VTBL_ENTRY)&_ZN5S96C7D1Ev,
  (VTBL_ENTRY)&_ZN5S96C7D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
};
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
Class_Descriptor cd_S96C7 = {  "S96C7", // class name
  0,0,//no base classes
  &(vtc_S96C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S96C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S96C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C6  : S96C7 {
  int s96c6f0[2];
  void *s96c6f1;
  int s96c6f2[2];
  ::S287C8_nt s96c6f3;
  ::S287C8_nt s96c6f4;
  ::S2121C38 s96c6f5;
  ::S287C8_nt s96c6f6;
  unsigned int s96c6f7:1;
  unsigned int s96c6f8:1;
  unsigned int s96c6f9:1;
  unsigned int s96c6f10:1;
  unsigned int s96c6f11:1;
  int s96c6f12[2];
  virtual  ~S96C6(); // _ZN5S96C6D1Ev
  virtual void  v69(); // _ZN5S96C63v69Ev
  virtual void  v70(); // _ZN5S96C63v70Ev
  virtual void  v71(); // _ZN5S96C63v71Ev
  virtual void  v72(); // _ZN5S96C63v72Ev
  virtual void  v73(); // _ZN5S96C63v73Ev
  virtual void  v74(); // _ZN5S96C63v74Ev
  virtual void  v75(); // _ZN5S96C63v75Ev
  virtual void  v76(); // _ZN5S96C63v76Ev
  virtual void  v77(); // _ZN5S96C63v77Ev
  virtual void  v78(); // _ZN5S96C63v78Ev
  virtual void  v79(); // _ZN5S96C63v79Ev
  virtual void  v80(); // _ZN5S96C63v80Ev
  virtual void  v81(); // _ZN5S96C63v81Ev
  virtual void  v82(); // _ZN5S96C63v82Ev
  virtual void  v83(); // _ZN5S96C63v83Ev
  virtual void  v84(); // _ZN5S96C63v84Ev
  virtual void  v85(); // _ZN5S96C63v85Ev
  virtual void  v86(); // _ZN5S96C63v86Ev
  virtual void  v87(); // _ZN5S96C63v87Ev
  virtual void  v88(); // _ZN5S96C63v88Ev
  virtual void  v89(); // _ZN5S96C63v89Ev
  virtual void  v90(); // _ZN5S96C63v90Ev
  S96C6(); // tgen
};
//SIG(-1 S96C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S96C6 ::~S96C6(){ note_dtor("S96C6", this);}
void  S96C6 ::v69(){vfunc_called(this, "_ZN5S96C63v69Ev");}
void  S96C6 ::v70(){vfunc_called(this, "_ZN5S96C63v70Ev");}
void  S96C6 ::v71(){vfunc_called(this, "_ZN5S96C63v71Ev");}
void  S96C6 ::v72(){vfunc_called(this, "_ZN5S96C63v72Ev");}
void  S96C6 ::v73(){vfunc_called(this, "_ZN5S96C63v73Ev");}
void  S96C6 ::v74(){vfunc_called(this, "_ZN5S96C63v74Ev");}
void  S96C6 ::v75(){vfunc_called(this, "_ZN5S96C63v75Ev");}
void  S96C6 ::v76(){vfunc_called(this, "_ZN5S96C63v76Ev");}
void  S96C6 ::v77(){vfunc_called(this, "_ZN5S96C63v77Ev");}
void  S96C6 ::v78(){vfunc_called(this, "_ZN5S96C63v78Ev");}
void  S96C6 ::v79(){vfunc_called(this, "_ZN5S96C63v79Ev");}
void  S96C6 ::v80(){vfunc_called(this, "_ZN5S96C63v80Ev");}
void  S96C6 ::v81(){vfunc_called(this, "_ZN5S96C63v81Ev");}
void  S96C6 ::v82(){vfunc_called(this, "_ZN5S96C63v82Ev");}
void  S96C6 ::v83(){vfunc_called(this, "_ZN5S96C63v83Ev");}
void  S96C6 ::v84(){vfunc_called(this, "_ZN5S96C63v84Ev");}
void  S96C6 ::v85(){vfunc_called(this, "_ZN5S96C63v85Ev");}
void  S96C6 ::v86(){vfunc_called(this, "_ZN5S96C63v86Ev");}
void  S96C6 ::v87(){vfunc_called(this, "_ZN5S96C63v87Ev");}
void  S96C6 ::v88(){vfunc_called(this, "_ZN5S96C63v88Ev");}
void  S96C6 ::v89(){vfunc_called(this, "_ZN5S96C63v89Ev");}
void  S96C6 ::v90(){vfunc_called(this, "_ZN5S96C63v90Ev");}
S96C6 ::S96C6(){ note_ctor("S96C6", this);} // tgen

static void Test_S96C6()
{
  extern Class_Descriptor cd_S96C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S96C6, buf);
    S96C6 *dp, &lv = *(dp=new (buf) S96C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S96C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C6)");
    check_base_class_offset(lv, (S96C7*), 0, "S96C6");
    check_field_offset(lv, s96c6f0, ABISELECT(96,60), "S96C6.s96c6f0");
    check_field_offset(lv, s96c6f1, ABISELECT(104,68), "S96C6.s96c6f1");
    check_field_offset(lv, s96c6f2, ABISELECT(112,72), "S96C6.s96c6f2");
    check_field_offset(lv, s96c6f3, ABISELECT(120,80), "S96C6.s96c6f3");
    check_field_offset(lv, s96c6f4, ABISELECT(136,92), "S96C6.s96c6f4");
    check_field_offset(lv, s96c6f5, ABISELECT(152,104), "S96C6.s96c6f5");
    check_field_offset(lv, s96c6f6, ABISELECT(160,108), "S96C6.s96c6f6");
    set_bf_and_test(lv, s96c6f7, ABISELECT(176,120), 0, 1, 1, "S96C6");
    set_bf_and_test(lv, s96c6f8, ABISELECT(176,120), 1, 1, 1, "S96C6");
    set_bf_and_test(lv, s96c6f9, ABISELECT(176,120), 2, 1, 1, "S96C6");
    set_bf_and_test(lv, s96c6f10, ABISELECT(176,120), 3, 1, 1, "S96C6");
    set_bf_and_test(lv, s96c6f11, ABISELECT(176,120), 4, 1, 1, "S96C6");
    check_field_offset(lv, s96c6f12, ABISELECT(180,124), "S96C6.s96c6f12");
    test_class_info(&lv, &cd_S96C6);
    dp->~S96C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C6(Test_S96C6, "S96C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S96C6C1Ev();
extern void _ZN5S96C6D1Ev();
Name_Map name_map_S96C6[] = {
  NSPAIR(_ZN5S96C6C1Ev),
  NSPAIR(_ZN5S96C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
static Base_Class bases_S96C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S96C6[];
extern void _ZN5S96C6D1Ev();
extern void _ZN5S96C6D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
static  VTBL_ENTRY vtc_S96C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C6[0]),
  (VTBL_ENTRY)&_ZN5S96C6D1Ev,
  (VTBL_ENTRY)&_ZN5S96C6D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
};
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
Class_Descriptor cd_S96C6 = {  "S96C6", // class name
  bases_S96C6, 1,
  &(vtc_S96C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S96C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C5  : S96C6 {
  unsigned int s96c5f0:1;
  unsigned int s96c5f1:1;
  unsigned int s96c5f2:1;
  ::S3350C17 s96c5f3;
  ::S3350C11 s96c5f4;
  ::S3350C5_nt s96c5f5;
  ::S287C27 s96c5f6;
  int s96c5f7[3];
  virtual  ~S96C5(); // _ZN5S96C5D1Ev
  virtual void  v91(); // _ZN5S96C53v91Ev
  virtual void  v92(); // _ZN5S96C53v92Ev
  virtual void  v93(); // _ZN5S96C53v93Ev
  virtual void  v94(); // _ZN5S96C53v94Ev
  virtual void  v95(); // _ZN5S96C53v95Ev
  virtual void  v96(); // _ZN5S96C53v96Ev
  virtual void  v97(); // _ZN5S96C53v97Ev
  virtual void  v98(); // _ZN5S96C53v98Ev
  virtual void  v99(); // _ZN5S96C53v99Ev
  virtual void  v100(); // _ZN5S96C54v100Ev
  virtual void  v101(); // _ZN5S96C54v101Ev
  virtual void  v102(); // _ZN5S96C54v102Ev
  virtual void  v103(); // _ZN5S96C54v103Ev
  virtual void  v104(); // _ZN5S96C54v104Ev
  virtual void  v105(); // _ZN5S96C54v105Ev
  virtual void  v106(); // _ZN5S96C54v106Ev
  virtual void  v107(); // _ZN5S96C54v107Ev
  virtual void  v108(); // _ZN5S96C54v108Ev
  virtual void  v109(); // _ZN5S96C54v109Ev
  virtual void  v110(); // _ZN5S96C54v110Ev
  S96C5(); // tgen
};
//SIG(-1 S96C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S96C5 ::~S96C5(){ note_dtor("S96C5", this);}
void  S96C5 ::v91(){vfunc_called(this, "_ZN5S96C53v91Ev");}
void  S96C5 ::v92(){vfunc_called(this, "_ZN5S96C53v92Ev");}
void  S96C5 ::v93(){vfunc_called(this, "_ZN5S96C53v93Ev");}
void  S96C5 ::v94(){vfunc_called(this, "_ZN5S96C53v94Ev");}
void  S96C5 ::v95(){vfunc_called(this, "_ZN5S96C53v95Ev");}
void  S96C5 ::v96(){vfunc_called(this, "_ZN5S96C53v96Ev");}
void  S96C5 ::v97(){vfunc_called(this, "_ZN5S96C53v97Ev");}
void  S96C5 ::v98(){vfunc_called(this, "_ZN5S96C53v98Ev");}
void  S96C5 ::v99(){vfunc_called(this, "_ZN5S96C53v99Ev");}
void  S96C5 ::v100(){vfunc_called(this, "_ZN5S96C54v100Ev");}
void  S96C5 ::v101(){vfunc_called(this, "_ZN5S96C54v101Ev");}
void  S96C5 ::v102(){vfunc_called(this, "_ZN5S96C54v102Ev");}
void  S96C5 ::v103(){vfunc_called(this, "_ZN5S96C54v103Ev");}
void  S96C5 ::v104(){vfunc_called(this, "_ZN5S96C54v104Ev");}
void  S96C5 ::v105(){vfunc_called(this, "_ZN5S96C54v105Ev");}
void  S96C5 ::v106(){vfunc_called(this, "_ZN5S96C54v106Ev");}
void  S96C5 ::v107(){vfunc_called(this, "_ZN5S96C54v107Ev");}
void  S96C5 ::v108(){vfunc_called(this, "_ZN5S96C54v108Ev");}
void  S96C5 ::v109(){vfunc_called(this, "_ZN5S96C54v109Ev");}
void  S96C5 ::v110(){vfunc_called(this, "_ZN5S96C54v110Ev");}
S96C5 ::S96C5(){ note_ctor("S96C5", this);} // tgen

static void Test_S96C5()
{
  extern Class_Descriptor cd_S96C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S96C5, buf);
    S96C5 *dp, &lv = *(dp=new (buf) S96C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S96C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C5)");
    check_base_class_offset(lv, (S96C7*)(S96C6*), 0, "S96C5");
    check_base_class_offset(lv, (S96C6*), 0, "S96C5");
    set_bf_and_test(lv, s96c5f0, ABISELECT(188,132), 0, 1, 1, "S96C5");
    set_bf_and_test(lv, s96c5f1, ABISELECT(188,132), 1, 1, 1, "S96C5");
    set_bf_and_test(lv, s96c5f2, ABISELECT(188,132), 2, 1, 1, "S96C5");
    check_field_offset(lv, s96c5f3, ABISELECT(192,136), "S96C5.s96c5f3");
    check_field_offset(lv, s96c5f4, ABISELECT(208,148), "S96C5.s96c5f4");
    check_field_offset(lv, s96c5f5, ABISELECT(224,160), "S96C5.s96c5f5");
    check_field_offset(lv, s96c5f6, ABISELECT(240,172), "S96C5.s96c5f6");
    check_field_offset(lv, s96c5f7, ABISELECT(256,184), "S96C5.s96c5f7");
    test_class_info(&lv, &cd_S96C5);
    dp->~S96C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C5(Test_S96C5, "S96C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S96C5C1Ev();
extern void _ZN5S96C5D1Ev();
Name_Map name_map_S96C5[] = {
  NSPAIR(_ZN5S96C5C1Ev),
  NSPAIR(_ZN5S96C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
static Base_Class bases_S96C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S96C5[];
extern void _ZN5S96C5D1Ev();
extern void _ZN5S96C5D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
static  VTBL_ENTRY vtc_S96C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C5[0]),
  (VTBL_ENTRY)&_ZN5S96C5D1Ev,
  (VTBL_ENTRY)&_ZN5S96C5D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
};
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
Class_Descriptor cd_S96C5 = {  "S96C5", // class name
  bases_S96C5, 2,
  &(vtc_S96C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S96C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C4  : S96C5 {
  ::S3350C4_nt s96c4f0;
  unsigned int s96c4f1:1;
  ::S287C23 s96c4f2;
  virtual  ~S96C4(); // _ZN5S96C4D1Ev
  virtual void  v111(); // _ZN5S96C44v111Ev
  virtual void  v112(); // _ZN5S96C44v112Ev
  virtual void  v113(); // _ZN5S96C44v113Ev
  virtual void  v114(); // _ZN5S96C44v114Ev
  S96C4(); // tgen
};
//SIG(-1 S96C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S96C4 ::~S96C4(){ note_dtor("S96C4", this);}
void  S96C4 ::v111(){vfunc_called(this, "_ZN5S96C44v111Ev");}
void  S96C4 ::v112(){vfunc_called(this, "_ZN5S96C44v112Ev");}
void  S96C4 ::v113(){vfunc_called(this, "_ZN5S96C44v113Ev");}
void  S96C4 ::v114(){vfunc_called(this, "_ZN5S96C44v114Ev");}
S96C4 ::S96C4(){ note_ctor("S96C4", this);} // tgen

static void Test_S96C4()
{
  extern Class_Descriptor cd_S96C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S96C4, buf);
    S96C4 *dp, &lv = *(dp=new (buf) S96C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S96C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C4)");
    check_base_class_offset(lv, (S96C7*)(S96C6*)(S96C5*), 0, "S96C4");
    check_base_class_offset(lv, (S96C6*)(S96C5*), 0, "S96C4");
    check_base_class_offset(lv, (S96C5*), 0, "S96C4");
    check_field_offset(lv, s96c4f0, ABISELECT(268,196), "S96C4.s96c4f0");
    set_bf_and_test(lv, s96c4f1, ABISELECT(276,204), 0, 1, 1, "S96C4");
    check_field_offset(lv, s96c4f2, ABISELECT(280,208), "S96C4.s96c4f2");
    test_class_info(&lv, &cd_S96C4);
    dp->~S96C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C4(Test_S96C4, "S96C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S96C4C1Ev();
extern void _ZN5S96C4D1Ev();
Name_Map name_map_S96C4[] = {
  NSPAIR(_ZN5S96C4C1Ev),
  NSPAIR(_ZN5S96C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
extern Class_Descriptor cd_S96C5;
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
static Base_Class bases_S96C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S96C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S96C4[];
extern void _ZN5S96C4D1Ev();
extern void _ZN5S96C4D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
extern void _ZN5S96C44v111Ev();
extern void _ZN5S96C44v112Ev();
extern void _ZN5S96C44v113Ev();
extern void _ZN5S96C44v114Ev();
static  VTBL_ENTRY vtc_S96C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C4[0]),
  (VTBL_ENTRY)&_ZN5S96C4D1Ev,
  (VTBL_ENTRY)&_ZN5S96C4D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
  (VTBL_ENTRY)&_ZN5S96C44v111Ev,
  (VTBL_ENTRY)&_ZN5S96C44v112Ev,
  (VTBL_ENTRY)&_ZN5S96C44v113Ev,
  (VTBL_ENTRY)&_ZN5S96C44v114Ev,
};
extern VTBL_ENTRY _ZTI5S96C4[];
extern  VTBL_ENTRY _ZTV5S96C4[];
Class_Descriptor cd_S96C4 = {  "S96C4", // class name
  bases_S96C4, 3,
  &(vtc_S96C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S96C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C4),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C3  : S96C4 {
  ::S287C19 s96c3f0;
  unsigned int s96c3f1:1;
  virtual  ~S96C3(); // _ZN5S96C3D1Ev
  virtual void  v115(); // _ZN5S96C34v115Ev
  virtual void  v116(); // _ZN5S96C34v116Ev
  virtual void  v117(); // _ZN5S96C34v117Ev
  virtual void  v118(); // _ZN5S96C34v118Ev
  virtual void  v119(); // _ZN5S96C34v119Ev
  virtual void  v120(); // _ZN5S96C34v120Ev
  virtual void  v121(); // _ZN5S96C34v121Ev
  S96C3(); // tgen
};
//SIG(-1 S96C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC22{ BC23{ BC10}} Fi:1}


 S96C3 ::~S96C3(){ note_dtor("S96C3", this);}
void  S96C3 ::v115(){vfunc_called(this, "_ZN5S96C34v115Ev");}
void  S96C3 ::v116(){vfunc_called(this, "_ZN5S96C34v116Ev");}
void  S96C3 ::v117(){vfunc_called(this, "_ZN5S96C34v117Ev");}
void  S96C3 ::v118(){vfunc_called(this, "_ZN5S96C34v118Ev");}
void  S96C3 ::v119(){vfunc_called(this, "_ZN5S96C34v119Ev");}
void  S96C3 ::v120(){vfunc_called(this, "_ZN5S96C34v120Ev");}
void  S96C3 ::v121(){vfunc_called(this, "_ZN5S96C34v121Ev");}
S96C3 ::S96C3(){ note_ctor("S96C3", this);} // tgen

static void Test_S96C3()
{
  extern Class_Descriptor cd_S96C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S96C3, buf);
    S96C3 *dp, &lv = *(dp=new (buf) S96C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S96C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C3)");
    check_base_class_offset(lv, (S96C7*)(S96C6*)(S96C5*)(S96C4*), 0, "S96C3");
    check_base_class_offset(lv, (S96C6*)(S96C5*)(S96C4*), 0, "S96C3");
    check_base_class_offset(lv, (S96C5*)(S96C4*), 0, "S96C3");
    check_base_class_offset(lv, (S96C4*), 0, "S96C3");
    check_field_offset(lv, s96c3f0, ABISELECT(296,220), "S96C3.s96c3f0");
    set_bf_and_test(lv, s96c3f1, ABISELECT(312,232), 0, 1, 1, "S96C3");
    test_class_info(&lv, &cd_S96C3);
    dp->~S96C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C3(Test_S96C3, "S96C3", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN5S96C3C1Ev();
extern void _ZN5S96C3D1Ev();
Name_Map name_map_S96C3[] = {
  NSPAIR(_ZN5S96C3C1Ev),
  NSPAIR(_ZN5S96C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
extern Class_Descriptor cd_S96C5;
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
extern Class_Descriptor cd_S96C4;
extern VTBL_ENTRY _ZTI5S96C4[];
extern  VTBL_ENTRY _ZTV5S96C4[];
static Base_Class bases_S96C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S96C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S96C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S96C3[];
extern void _ZN5S96C3D1Ev();
extern void _ZN5S96C3D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
extern void _ZN5S96C44v111Ev();
extern void _ZN5S96C44v112Ev();
extern void _ZN5S96C44v113Ev();
extern void _ZN5S96C44v114Ev();
extern void _ZN5S96C34v115Ev();
extern void _ZN5S96C34v116Ev();
extern void _ZN5S96C34v117Ev();
extern void _ZN5S96C34v118Ev();
extern void _ZN5S96C34v119Ev();
extern void _ZN5S96C34v120Ev();
extern void _ZN5S96C34v121Ev();
static  VTBL_ENTRY vtc_S96C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C3[0]),
  (VTBL_ENTRY)&_ZN5S96C3D1Ev,
  (VTBL_ENTRY)&_ZN5S96C3D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
  (VTBL_ENTRY)&_ZN5S96C44v111Ev,
  (VTBL_ENTRY)&_ZN5S96C44v112Ev,
  (VTBL_ENTRY)&_ZN5S96C44v113Ev,
  (VTBL_ENTRY)&_ZN5S96C44v114Ev,
  (VTBL_ENTRY)&_ZN5S96C34v115Ev,
  (VTBL_ENTRY)&_ZN5S96C34v116Ev,
  (VTBL_ENTRY)&_ZN5S96C34v117Ev,
  (VTBL_ENTRY)&_ZN5S96C34v118Ev,
  (VTBL_ENTRY)&_ZN5S96C34v119Ev,
  (VTBL_ENTRY)&_ZN5S96C34v120Ev,
  (VTBL_ENTRY)&_ZN5S96C34v121Ev,
};
extern VTBL_ENTRY _ZTI5S96C3[];
extern  VTBL_ENTRY _ZTV5S96C3[];
Class_Descriptor cd_S96C3 = {  "S96C3", // class name
  bases_S96C3, 4,
  &(vtc_S96C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI5S96C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C3),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C2  : S96C3 {
  unsigned int s96c2f0:1;
  unsigned int s96c2f1:1;
  virtual  ~S96C2(); // _ZN5S96C2D1Ev
  virtual void  v122(); // _ZN5S96C24v122Ev
  virtual void  v123(); // _ZN5S96C24v123Ev
  S96C2(); // tgen
};
//SIG(-1 S96C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 FC23{ BC24{ BC11}} Fi:1} vd v1 v2 Fi:1 Fi:1}


 S96C2 ::~S96C2(){ note_dtor("S96C2", this);}
void  S96C2 ::v122(){vfunc_called(this, "_ZN5S96C24v122Ev");}
void  S96C2 ::v123(){vfunc_called(this, "_ZN5S96C24v123Ev");}
S96C2 ::S96C2(){ note_ctor("S96C2", this);} // tgen

static void Test_S96C2()
{
  extern Class_Descriptor cd_S96C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S96C2, buf);
    S96C2 *dp, &lv = *(dp=new (buf) S96C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S96C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C2)");
    check_base_class_offset(lv, (S96C7*)(S96C6*)(S96C5*)(S96C4*)(S96C3*), 0, "S96C2");
    check_base_class_offset(lv, (S96C6*)(S96C5*)(S96C4*)(S96C3*), 0, "S96C2");
    check_base_class_offset(lv, (S96C5*)(S96C4*)(S96C3*), 0, "S96C2");
    check_base_class_offset(lv, (S96C4*)(S96C3*), 0, "S96C2");
    check_base_class_offset(lv, (S96C3*), 0, "S96C2");
    set_bf_and_test(lv, s96c2f0, ABISELECT(313,233), 0, 1, 1, "S96C2");
    set_bf_and_test(lv, s96c2f1, ABISELECT(313,233), 1, 1, 1, "S96C2");
    test_class_info(&lv, &cd_S96C2);
    dp->~S96C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C2(Test_S96C2, "S96C2", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN5S96C2C1Ev();
extern void _ZN5S96C2D1Ev();
Name_Map name_map_S96C2[] = {
  NSPAIR(_ZN5S96C2C1Ev),
  NSPAIR(_ZN5S96C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
extern Class_Descriptor cd_S96C5;
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
extern Class_Descriptor cd_S96C4;
extern VTBL_ENTRY _ZTI5S96C4[];
extern  VTBL_ENTRY _ZTV5S96C4[];
extern Class_Descriptor cd_S96C3;
extern VTBL_ENTRY _ZTI5S96C3[];
extern  VTBL_ENTRY _ZTV5S96C3[];
static Base_Class bases_S96C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S96C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S96C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S96C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S96C2[];
extern void _ZN5S96C2D1Ev();
extern void _ZN5S96C2D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
extern void _ZN5S96C44v111Ev();
extern void _ZN5S96C44v112Ev();
extern void _ZN5S96C44v113Ev();
extern void _ZN5S96C44v114Ev();
extern void _ZN5S96C34v115Ev();
extern void _ZN5S96C34v116Ev();
extern void _ZN5S96C34v117Ev();
extern void _ZN5S96C34v118Ev();
extern void _ZN5S96C34v119Ev();
extern void _ZN5S96C34v120Ev();
extern void _ZN5S96C34v121Ev();
extern void _ZN5S96C24v122Ev();
extern void _ZN5S96C24v123Ev();
static  VTBL_ENTRY vtc_S96C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C2[0]),
  (VTBL_ENTRY)&_ZN5S96C2D1Ev,
  (VTBL_ENTRY)&_ZN5S96C2D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
  (VTBL_ENTRY)&_ZN5S96C44v111Ev,
  (VTBL_ENTRY)&_ZN5S96C44v112Ev,
  (VTBL_ENTRY)&_ZN5S96C44v113Ev,
  (VTBL_ENTRY)&_ZN5S96C44v114Ev,
  (VTBL_ENTRY)&_ZN5S96C34v115Ev,
  (VTBL_ENTRY)&_ZN5S96C34v116Ev,
  (VTBL_ENTRY)&_ZN5S96C34v117Ev,
  (VTBL_ENTRY)&_ZN5S96C34v118Ev,
  (VTBL_ENTRY)&_ZN5S96C34v119Ev,
  (VTBL_ENTRY)&_ZN5S96C34v120Ev,
  (VTBL_ENTRY)&_ZN5S96C34v121Ev,
  (VTBL_ENTRY)&_ZN5S96C24v122Ev,
  (VTBL_ENTRY)&_ZN5S96C24v123Ev,
};
extern VTBL_ENTRY _ZTI5S96C2[];
extern  VTBL_ENTRY _ZTV5S96C2[];
Class_Descriptor cd_S96C2 = {  "S96C2", // class name
  bases_S96C2, 5,
  &(vtc_S96C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI5S96C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C2),123, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S96C1  : S96C2 {
  ::S287C9 s96c1f0;
  virtual  ~S96C1(); // _ZN5S96C1D1Ev
  virtual void  v1(); // _ZN5S96C12v1Ev
  virtual void  v2(); // _ZN5S96C12v2Ev
  virtual void  v3(); // _ZN5S96C12v3Ev
  virtual void  v4(); // _ZN5S96C12v4Ev
  S96C1(); // tgen
};
//SIG(1 S96C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v111 v112 v113 v114 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v115 v116 v117 v118 v119 v120 v121 FC24{ BC25{ BC12}} Fi:1} vd v122 v123 Fi:1 Fi:1} vd v1 v2 v3 v4 FC10}


 S96C1 ::~S96C1(){ note_dtor("S96C1", this);}
void  S96C1 ::v1(){vfunc_called(this, "_ZN5S96C12v1Ev");}
void  S96C1 ::v2(){vfunc_called(this, "_ZN5S96C12v2Ev");}
void  S96C1 ::v3(){vfunc_called(this, "_ZN5S96C12v3Ev");}
void  S96C1 ::v4(){vfunc_called(this, "_ZN5S96C12v4Ev");}
S96C1 ::S96C1(){ note_ctor("S96C1", this);} // tgen

static void Test_S96C1()
{
  extern Class_Descriptor cd_S96C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S96C1, buf);
    S96C1 *dp, &lv = *(dp=new (buf) S96C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S96C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S96C1)");
    check_base_class_offset(lv, (S96C7*)(S96C6*)(S96C5*)(S96C4*)(S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C6*)(S96C5*)(S96C4*)(S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C5*)(S96C4*)(S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C4*)(S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C3*)(S96C2*), 0, "S96C1");
    check_base_class_offset(lv, (S96C2*), 0, "S96C1");
    check_field_offset(lv, s96c1f0, ABISELECT(320,236), "S96C1.s96c1f0");
    test_class_info(&lv, &cd_S96C1);
    dp->~S96C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS96C1(Test_S96C1, "S96C1", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN5S96C1C1Ev();
extern void _ZN5S96C1D1Ev();
Name_Map name_map_S96C1[] = {
  NSPAIR(_ZN5S96C1C1Ev),
  NSPAIR(_ZN5S96C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S96C7;
extern VTBL_ENTRY _ZTI5S96C7[];
extern  VTBL_ENTRY _ZTV5S96C7[];
extern Class_Descriptor cd_S96C6;
extern VTBL_ENTRY _ZTI5S96C6[];
extern  VTBL_ENTRY _ZTV5S96C6[];
extern Class_Descriptor cd_S96C5;
extern VTBL_ENTRY _ZTI5S96C5[];
extern  VTBL_ENTRY _ZTV5S96C5[];
extern Class_Descriptor cd_S96C4;
extern VTBL_ENTRY _ZTI5S96C4[];
extern  VTBL_ENTRY _ZTV5S96C4[];
extern Class_Descriptor cd_S96C3;
extern VTBL_ENTRY _ZTI5S96C3[];
extern  VTBL_ENTRY _ZTV5S96C3[];
extern Class_Descriptor cd_S96C2;
extern VTBL_ENTRY _ZTI5S96C2[];
extern  VTBL_ENTRY _ZTV5S96C2[];
static Base_Class bases_S96C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S96C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S96C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S96C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S96C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S96C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S96C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S96C1[];
extern void _ZN5S96C1D1Ev();
extern void _ZN5S96C1D0Ev();
extern void _ZN5S96C72v5Ev();
extern void _ZN5S96C72v6Ev();
extern void _ZN5S96C72v7Ev();
extern void _ZN5S96C72v8Ev();
extern void _ZN5S96C72v9Ev();
extern void _ZN5S96C73v10Ev();
extern void _ZN5S96C73v11Ev();
extern void _ZN5S96C73v12Ev();
extern void _ZN5S96C73v13Ev();
extern void _ZN5S96C73v14Ev();
extern void _ZN5S96C73v15Ev();
extern void _ZN5S96C73v16Ev();
extern void _ZN5S96C73v17Ev();
extern void _ZN5S96C73v18Ev();
extern void _ZN5S96C73v19Ev();
extern void _ZN5S96C73v20Ev();
extern void _ZN5S96C73v21Ev();
extern void _ZN5S96C73v22Ev();
extern void _ZN5S96C73v23Ev();
extern void _ZN5S96C73v24Ev();
extern void _ZN5S96C73v25Ev();
extern void _ZN5S96C73v26Ev();
extern void _ZN5S96C73v27Ev();
extern void _ZN5S96C73v28Ev();
extern void _ZN5S96C73v29Ev();
extern void _ZN5S96C73v30Ev();
extern void _ZN5S96C73v31Ev();
extern void _ZN5S96C73v32Ev();
extern void _ZN5S96C73v33Ev();
extern void _ZN5S96C73v34Ev();
extern void _ZN5S96C73v35Ev();
extern void _ZN5S96C73v36Ev();
extern void _ZN5S96C73v37Ev();
extern void _ZN5S96C73v38Ev();
extern void _ZN5S96C73v39Ev();
extern void _ZN5S96C73v40Ev();
extern void _ZN5S96C73v41Ev();
extern void _ZN5S96C73v42Ev();
extern void _ZN5S96C73v43Ev();
extern void _ZN5S96C73v44Ev();
extern void _ZN5S96C73v45Ev();
extern void _ZN5S96C73v46Ev();
extern void _ZN5S96C73v47Ev();
extern void _ZN5S96C73v48Ev();
extern void _ZN5S96C73v49Ev();
extern void _ZN5S96C73v50Ev();
extern void _ZN5S96C73v51Ev();
extern void _ZN5S96C73v52Ev();
extern void _ZN5S96C73v53Ev();
extern void _ZN5S96C73v54Ev();
extern void _ZN5S96C73v55Ev();
extern void _ZN5S96C73v56Ev();
extern void _ZN5S96C73v57Ev();
extern void _ZN5S96C73v58Ev();
extern void _ZN5S96C73v59Ev();
extern void _ZN5S96C73v60Ev();
extern void _ZN5S96C73v61Ev();
extern void _ZN5S96C73v62Ev();
extern void _ZN5S96C73v63Ev();
extern void _ZN5S96C73v64Ev();
extern void _ZN5S96C73v65Ev();
extern void _ZN5S96C73v66Ev();
extern void _ZN5S96C73v67Ev();
extern void _ZN5S96C73v68Ev();
extern void _ZN5S96C63v69Ev();
extern void _ZN5S96C63v70Ev();
extern void _ZN5S96C63v71Ev();
extern void _ZN5S96C63v72Ev();
extern void _ZN5S96C63v73Ev();
extern void _ZN5S96C63v74Ev();
extern void _ZN5S96C63v75Ev();
extern void _ZN5S96C63v76Ev();
extern void _ZN5S96C63v77Ev();
extern void _ZN5S96C63v78Ev();
extern void _ZN5S96C63v79Ev();
extern void _ZN5S96C63v80Ev();
extern void _ZN5S96C63v81Ev();
extern void _ZN5S96C63v82Ev();
extern void _ZN5S96C63v83Ev();
extern void _ZN5S96C63v84Ev();
extern void _ZN5S96C63v85Ev();
extern void _ZN5S96C63v86Ev();
extern void _ZN5S96C63v87Ev();
extern void _ZN5S96C63v88Ev();
extern void _ZN5S96C63v89Ev();
extern void _ZN5S96C63v90Ev();
extern void _ZN5S96C53v91Ev();
extern void _ZN5S96C53v92Ev();
extern void _ZN5S96C53v93Ev();
extern void _ZN5S96C53v94Ev();
extern void _ZN5S96C53v95Ev();
extern void _ZN5S96C53v96Ev();
extern void _ZN5S96C53v97Ev();
extern void _ZN5S96C53v98Ev();
extern void _ZN5S96C53v99Ev();
extern void _ZN5S96C54v100Ev();
extern void _ZN5S96C54v101Ev();
extern void _ZN5S96C54v102Ev();
extern void _ZN5S96C54v103Ev();
extern void _ZN5S96C54v104Ev();
extern void _ZN5S96C54v105Ev();
extern void _ZN5S96C54v106Ev();
extern void _ZN5S96C54v107Ev();
extern void _ZN5S96C54v108Ev();
extern void _ZN5S96C54v109Ev();
extern void _ZN5S96C54v110Ev();
extern void _ZN5S96C44v111Ev();
extern void _ZN5S96C44v112Ev();
extern void _ZN5S96C44v113Ev();
extern void _ZN5S96C44v114Ev();
extern void _ZN5S96C34v115Ev();
extern void _ZN5S96C34v116Ev();
extern void _ZN5S96C34v117Ev();
extern void _ZN5S96C34v118Ev();
extern void _ZN5S96C34v119Ev();
extern void _ZN5S96C34v120Ev();
extern void _ZN5S96C34v121Ev();
extern void _ZN5S96C24v122Ev();
extern void _ZN5S96C24v123Ev();
extern void _ZN5S96C12v1Ev();
extern void _ZN5S96C12v2Ev();
extern void _ZN5S96C12v3Ev();
extern void _ZN5S96C12v4Ev();
static  VTBL_ENTRY vtc_S96C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S96C1[0]),
  (VTBL_ENTRY)&_ZN5S96C1D1Ev,
  (VTBL_ENTRY)&_ZN5S96C1D0Ev,
  (VTBL_ENTRY)&_ZN5S96C72v5Ev,
  (VTBL_ENTRY)&_ZN5S96C72v6Ev,
  (VTBL_ENTRY)&_ZN5S96C72v7Ev,
  (VTBL_ENTRY)&_ZN5S96C72v8Ev,
  (VTBL_ENTRY)&_ZN5S96C72v9Ev,
  (VTBL_ENTRY)&_ZN5S96C73v10Ev,
  (VTBL_ENTRY)&_ZN5S96C73v11Ev,
  (VTBL_ENTRY)&_ZN5S96C73v12Ev,
  (VTBL_ENTRY)&_ZN5S96C73v13Ev,
  (VTBL_ENTRY)&_ZN5S96C73v14Ev,
  (VTBL_ENTRY)&_ZN5S96C73v15Ev,
  (VTBL_ENTRY)&_ZN5S96C73v16Ev,
  (VTBL_ENTRY)&_ZN5S96C73v17Ev,
  (VTBL_ENTRY)&_ZN5S96C73v18Ev,
  (VTBL_ENTRY)&_ZN5S96C73v19Ev,
  (VTBL_ENTRY)&_ZN5S96C73v20Ev,
  (VTBL_ENTRY)&_ZN5S96C73v21Ev,
  (VTBL_ENTRY)&_ZN5S96C73v22Ev,
  (VTBL_ENTRY)&_ZN5S96C73v23Ev,
  (VTBL_ENTRY)&_ZN5S96C73v24Ev,
  (VTBL_ENTRY)&_ZN5S96C73v25Ev,
  (VTBL_ENTRY)&_ZN5S96C73v26Ev,
  (VTBL_ENTRY)&_ZN5S96C73v27Ev,
  (VTBL_ENTRY)&_ZN5S96C73v28Ev,
  (VTBL_ENTRY)&_ZN5S96C73v29Ev,
  (VTBL_ENTRY)&_ZN5S96C73v30Ev,
  (VTBL_ENTRY)&_ZN5S96C73v31Ev,
  (VTBL_ENTRY)&_ZN5S96C73v32Ev,
  (VTBL_ENTRY)&_ZN5S96C73v33Ev,
  (VTBL_ENTRY)&_ZN5S96C73v34Ev,
  (VTBL_ENTRY)&_ZN5S96C73v35Ev,
  (VTBL_ENTRY)&_ZN5S96C73v36Ev,
  (VTBL_ENTRY)&_ZN5S96C73v37Ev,
  (VTBL_ENTRY)&_ZN5S96C73v38Ev,
  (VTBL_ENTRY)&_ZN5S96C73v39Ev,
  (VTBL_ENTRY)&_ZN5S96C73v40Ev,
  (VTBL_ENTRY)&_ZN5S96C73v41Ev,
  (VTBL_ENTRY)&_ZN5S96C73v42Ev,
  (VTBL_ENTRY)&_ZN5S96C73v43Ev,
  (VTBL_ENTRY)&_ZN5S96C73v44Ev,
  (VTBL_ENTRY)&_ZN5S96C73v45Ev,
  (VTBL_ENTRY)&_ZN5S96C73v46Ev,
  (VTBL_ENTRY)&_ZN5S96C73v47Ev,
  (VTBL_ENTRY)&_ZN5S96C73v48Ev,
  (VTBL_ENTRY)&_ZN5S96C73v49Ev,
  (VTBL_ENTRY)&_ZN5S96C73v50Ev,
  (VTBL_ENTRY)&_ZN5S96C73v51Ev,
  (VTBL_ENTRY)&_ZN5S96C73v52Ev,
  (VTBL_ENTRY)&_ZN5S96C73v53Ev,
  (VTBL_ENTRY)&_ZN5S96C73v54Ev,
  (VTBL_ENTRY)&_ZN5S96C73v55Ev,
  (VTBL_ENTRY)&_ZN5S96C73v56Ev,
  (VTBL_ENTRY)&_ZN5S96C73v57Ev,
  (VTBL_ENTRY)&_ZN5S96C73v58Ev,
  (VTBL_ENTRY)&_ZN5S96C73v59Ev,
  (VTBL_ENTRY)&_ZN5S96C73v60Ev,
  (VTBL_ENTRY)&_ZN5S96C73v61Ev,
  (VTBL_ENTRY)&_ZN5S96C73v62Ev,
  (VTBL_ENTRY)&_ZN5S96C73v63Ev,
  (VTBL_ENTRY)&_ZN5S96C73v64Ev,
  (VTBL_ENTRY)&_ZN5S96C73v65Ev,
  (VTBL_ENTRY)&_ZN5S96C73v66Ev,
  (VTBL_ENTRY)&_ZN5S96C73v67Ev,
  (VTBL_ENTRY)&_ZN5S96C73v68Ev,
  (VTBL_ENTRY)&_ZN5S96C63v69Ev,
  (VTBL_ENTRY)&_ZN5S96C63v70Ev,
  (VTBL_ENTRY)&_ZN5S96C63v71Ev,
  (VTBL_ENTRY)&_ZN5S96C63v72Ev,
  (VTBL_ENTRY)&_ZN5S96C63v73Ev,
  (VTBL_ENTRY)&_ZN5S96C63v74Ev,
  (VTBL_ENTRY)&_ZN5S96C63v75Ev,
  (VTBL_ENTRY)&_ZN5S96C63v76Ev,
  (VTBL_ENTRY)&_ZN5S96C63v77Ev,
  (VTBL_ENTRY)&_ZN5S96C63v78Ev,
  (VTBL_ENTRY)&_ZN5S96C63v79Ev,
  (VTBL_ENTRY)&_ZN5S96C63v80Ev,
  (VTBL_ENTRY)&_ZN5S96C63v81Ev,
  (VTBL_ENTRY)&_ZN5S96C63v82Ev,
  (VTBL_ENTRY)&_ZN5S96C63v83Ev,
  (VTBL_ENTRY)&_ZN5S96C63v84Ev,
  (VTBL_ENTRY)&_ZN5S96C63v85Ev,
  (VTBL_ENTRY)&_ZN5S96C63v86Ev,
  (VTBL_ENTRY)&_ZN5S96C63v87Ev,
  (VTBL_ENTRY)&_ZN5S96C63v88Ev,
  (VTBL_ENTRY)&_ZN5S96C63v89Ev,
  (VTBL_ENTRY)&_ZN5S96C63v90Ev,
  (VTBL_ENTRY)&_ZN5S96C53v91Ev,
  (VTBL_ENTRY)&_ZN5S96C53v92Ev,
  (VTBL_ENTRY)&_ZN5S96C53v93Ev,
  (VTBL_ENTRY)&_ZN5S96C53v94Ev,
  (VTBL_ENTRY)&_ZN5S96C53v95Ev,
  (VTBL_ENTRY)&_ZN5S96C53v96Ev,
  (VTBL_ENTRY)&_ZN5S96C53v97Ev,
  (VTBL_ENTRY)&_ZN5S96C53v98Ev,
  (VTBL_ENTRY)&_ZN5S96C53v99Ev,
  (VTBL_ENTRY)&_ZN5S96C54v100Ev,
  (VTBL_ENTRY)&_ZN5S96C54v101Ev,
  (VTBL_ENTRY)&_ZN5S96C54v102Ev,
  (VTBL_ENTRY)&_ZN5S96C54v103Ev,
  (VTBL_ENTRY)&_ZN5S96C54v104Ev,
  (VTBL_ENTRY)&_ZN5S96C54v105Ev,
  (VTBL_ENTRY)&_ZN5S96C54v106Ev,
  (VTBL_ENTRY)&_ZN5S96C54v107Ev,
  (VTBL_ENTRY)&_ZN5S96C54v108Ev,
  (VTBL_ENTRY)&_ZN5S96C54v109Ev,
  (VTBL_ENTRY)&_ZN5S96C54v110Ev,
  (VTBL_ENTRY)&_ZN5S96C44v111Ev,
  (VTBL_ENTRY)&_ZN5S96C44v112Ev,
  (VTBL_ENTRY)&_ZN5S96C44v113Ev,
  (VTBL_ENTRY)&_ZN5S96C44v114Ev,
  (VTBL_ENTRY)&_ZN5S96C34v115Ev,
  (VTBL_ENTRY)&_ZN5S96C34v116Ev,
  (VTBL_ENTRY)&_ZN5S96C34v117Ev,
  (VTBL_ENTRY)&_ZN5S96C34v118Ev,
  (VTBL_ENTRY)&_ZN5S96C34v119Ev,
  (VTBL_ENTRY)&_ZN5S96C34v120Ev,
  (VTBL_ENTRY)&_ZN5S96C34v121Ev,
  (VTBL_ENTRY)&_ZN5S96C24v122Ev,
  (VTBL_ENTRY)&_ZN5S96C24v123Ev,
  (VTBL_ENTRY)&_ZN5S96C12v1Ev,
  (VTBL_ENTRY)&_ZN5S96C12v2Ev,
  (VTBL_ENTRY)&_ZN5S96C12v3Ev,
  (VTBL_ENTRY)&_ZN5S96C12v4Ev,
};
extern VTBL_ENTRY _ZTI5S96C1[];
extern  VTBL_ENTRY _ZTV5S96C1[];
Class_Descriptor cd_S96C1 = {  "S96C1", // class name
  bases_S96C1, 6,
  &(vtc_S96C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI5S96C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S96C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C8  {
  int s34c8f0;
  __tsi64 s34c8f1;
  void *s34c8f2[4];
  int s34c8f3[2];
  void *s34c8f4;
  ::S3350C4_nt s34c8f5;
  void *s34c8f6[2];
  virtual  ~S34C8(); // _ZN5S34C8D1Ev
  virtual void  v4(); // _ZN5S34C82v4Ev
  virtual void  v5(); // _ZN5S34C82v5Ev
  virtual void  v6(); // _ZN5S34C82v6Ev
  virtual void  v7(); // _ZN5S34C82v7Ev
  virtual void  v8(); // _ZN5S34C82v8Ev
  virtual void  v9(); // _ZN5S34C82v9Ev
  virtual void  v10(); // _ZN5S34C83v10Ev
  virtual void  v11(); // _ZN5S34C83v11Ev
  virtual void  v12(); // _ZN5S34C83v12Ev
  virtual void  v13(); // _ZN5S34C83v13Ev
  virtual void  v14(); // _ZN5S34C83v14Ev
  virtual void  v15(); // _ZN5S34C83v15Ev
  virtual void  v16(); // _ZN5S34C83v16Ev
  virtual void  v17(); // _ZN5S34C83v17Ev
  virtual void  v18(); // _ZN5S34C83v18Ev
  virtual void  v19(); // _ZN5S34C83v19Ev
  virtual void  v20(); // _ZN5S34C83v20Ev
  virtual void  v21(); // _ZN5S34C83v21Ev
  virtual void  v22(); // _ZN5S34C83v22Ev
  virtual void  v23(); // _ZN5S34C83v23Ev
  virtual void  v24(); // _ZN5S34C83v24Ev
  virtual void  v25(); // _ZN5S34C83v25Ev
  virtual void  v26(); // _ZN5S34C83v26Ev
  virtual void  v27(); // _ZN5S34C83v27Ev
  virtual void  v28(); // _ZN5S34C83v28Ev
  virtual void  v29(); // _ZN5S34C83v29Ev
  virtual void  v30(); // _ZN5S34C83v30Ev
  virtual void  v31(); // _ZN5S34C83v31Ev
  virtual void  v32(); // _ZN5S34C83v32Ev
  virtual void  v33(); // _ZN5S34C83v33Ev
  virtual void  v34(); // _ZN5S34C83v34Ev
  virtual void  v35(); // _ZN5S34C83v35Ev
  virtual void  v36(); // _ZN5S34C83v36Ev
  virtual void  v37(); // _ZN5S34C83v37Ev
  virtual void  v38(); // _ZN5S34C83v38Ev
  virtual void  v39(); // _ZN5S34C83v39Ev
  virtual void  v40(); // _ZN5S34C83v40Ev
  virtual void  v41(); // _ZN5S34C83v41Ev
  virtual void  v42(); // _ZN5S34C83v42Ev
  virtual void  v43(); // _ZN5S34C83v43Ev
  virtual void  v44(); // _ZN5S34C83v44Ev
  virtual void  v45(); // _ZN5S34C83v45Ev
  virtual void  v46(); // _ZN5S34C83v46Ev
  virtual void  v47(); // _ZN5S34C83v47Ev
  virtual void  v48(); // _ZN5S34C83v48Ev
  virtual void  v49(); // _ZN5S34C83v49Ev
  virtual void  v50(); // _ZN5S34C83v50Ev
  virtual void  v51(); // _ZN5S34C83v51Ev
  virtual void  v52(); // _ZN5S34C83v52Ev
  virtual void  v53(); // _ZN5S34C83v53Ev
  virtual void  v54(); // _ZN5S34C83v54Ev
  virtual void  v55(); // _ZN5S34C83v55Ev
  virtual void  v56(); // _ZN5S34C83v56Ev
  virtual void  v57(); // _ZN5S34C83v57Ev
  virtual void  v58(); // _ZN5S34C83v58Ev
  virtual void  v59(); // _ZN5S34C83v59Ev
  virtual void  v60(); // _ZN5S34C83v60Ev
  virtual void  v61(); // _ZN5S34C83v61Ev
  virtual void  v62(); // _ZN5S34C83v62Ev
  virtual void  v63(); // _ZN5S34C83v63Ev
  virtual void  v64(); // _ZN5S34C83v64Ev
  virtual void  v65(); // _ZN5S34C83v65Ev
  virtual void  v66(); // _ZN5S34C83v66Ev
  virtual void  v67(); // _ZN5S34C83v67Ev
  S34C8(); // tgen
};
//SIG(-1 S34C8) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S34C8 ::~S34C8(){ note_dtor("S34C8", this);}
void  S34C8 ::v4(){vfunc_called(this, "_ZN5S34C82v4Ev");}
void  S34C8 ::v5(){vfunc_called(this, "_ZN5S34C82v5Ev");}
void  S34C8 ::v6(){vfunc_called(this, "_ZN5S34C82v6Ev");}
void  S34C8 ::v7(){vfunc_called(this, "_ZN5S34C82v7Ev");}
void  S34C8 ::v8(){vfunc_called(this, "_ZN5S34C82v8Ev");}
void  S34C8 ::v9(){vfunc_called(this, "_ZN5S34C82v9Ev");}
void  S34C8 ::v10(){vfunc_called(this, "_ZN5S34C83v10Ev");}
void  S34C8 ::v11(){vfunc_called(this, "_ZN5S34C83v11Ev");}
void  S34C8 ::v12(){vfunc_called(this, "_ZN5S34C83v12Ev");}
void  S34C8 ::v13(){vfunc_called(this, "_ZN5S34C83v13Ev");}
void  S34C8 ::v14(){vfunc_called(this, "_ZN5S34C83v14Ev");}
void  S34C8 ::v15(){vfunc_called(this, "_ZN5S34C83v15Ev");}
void  S34C8 ::v16(){vfunc_called(this, "_ZN5S34C83v16Ev");}
void  S34C8 ::v17(){vfunc_called(this, "_ZN5S34C83v17Ev");}
void  S34C8 ::v18(){vfunc_called(this, "_ZN5S34C83v18Ev");}
void  S34C8 ::v19(){vfunc_called(this, "_ZN5S34C83v19Ev");}
void  S34C8 ::v20(){vfunc_called(this, "_ZN5S34C83v20Ev");}
void  S34C8 ::v21(){vfunc_called(this, "_ZN5S34C83v21Ev");}
void  S34C8 ::v22(){vfunc_called(this, "_ZN5S34C83v22Ev");}
void  S34C8 ::v23(){vfunc_called(this, "_ZN5S34C83v23Ev");}
void  S34C8 ::v24(){vfunc_called(this, "_ZN5S34C83v24Ev");}
void  S34C8 ::v25(){vfunc_called(this, "_ZN5S34C83v25Ev");}
void  S34C8 ::v26(){vfunc_called(this, "_ZN5S34C83v26Ev");}
void  S34C8 ::v27(){vfunc_called(this, "_ZN5S34C83v27Ev");}
void  S34C8 ::v28(){vfunc_called(this, "_ZN5S34C83v28Ev");}
void  S34C8 ::v29(){vfunc_called(this, "_ZN5S34C83v29Ev");}
void  S34C8 ::v30(){vfunc_called(this, "_ZN5S34C83v30Ev");}
void  S34C8 ::v31(){vfunc_called(this, "_ZN5S34C83v31Ev");}
void  S34C8 ::v32(){vfunc_called(this, "_ZN5S34C83v32Ev");}
void  S34C8 ::v33(){vfunc_called(this, "_ZN5S34C83v33Ev");}
void  S34C8 ::v34(){vfunc_called(this, "_ZN5S34C83v34Ev");}
void  S34C8 ::v35(){vfunc_called(this, "_ZN5S34C83v35Ev");}
void  S34C8 ::v36(){vfunc_called(this, "_ZN5S34C83v36Ev");}
void  S34C8 ::v37(){vfunc_called(this, "_ZN5S34C83v37Ev");}
void  S34C8 ::v38(){vfunc_called(this, "_ZN5S34C83v38Ev");}
void  S34C8 ::v39(){vfunc_called(this, "_ZN5S34C83v39Ev");}
void  S34C8 ::v40(){vfunc_called(this, "_ZN5S34C83v40Ev");}
void  S34C8 ::v41(){vfunc_called(this, "_ZN5S34C83v41Ev");}
void  S34C8 ::v42(){vfunc_called(this, "_ZN5S34C83v42Ev");}
void  S34C8 ::v43(){vfunc_called(this, "_ZN5S34C83v43Ev");}
void  S34C8 ::v44(){vfunc_called(this, "_ZN5S34C83v44Ev");}
void  S34C8 ::v45(){vfunc_called(this, "_ZN5S34C83v45Ev");}
void  S34C8 ::v46(){vfunc_called(this, "_ZN5S34C83v46Ev");}
void  S34C8 ::v47(){vfunc_called(this, "_ZN5S34C83v47Ev");}
void  S34C8 ::v48(){vfunc_called(this, "_ZN5S34C83v48Ev");}
void  S34C8 ::v49(){vfunc_called(this, "_ZN5S34C83v49Ev");}
void  S34C8 ::v50(){vfunc_called(this, "_ZN5S34C83v50Ev");}
void  S34C8 ::v51(){vfunc_called(this, "_ZN5S34C83v51Ev");}
void  S34C8 ::v52(){vfunc_called(this, "_ZN5S34C83v52Ev");}
void  S34C8 ::v53(){vfunc_called(this, "_ZN5S34C83v53Ev");}
void  S34C8 ::v54(){vfunc_called(this, "_ZN5S34C83v54Ev");}
void  S34C8 ::v55(){vfunc_called(this, "_ZN5S34C83v55Ev");}
void  S34C8 ::v56(){vfunc_called(this, "_ZN5S34C83v56Ev");}
void  S34C8 ::v57(){vfunc_called(this, "_ZN5S34C83v57Ev");}
void  S34C8 ::v58(){vfunc_called(this, "_ZN5S34C83v58Ev");}
void  S34C8 ::v59(){vfunc_called(this, "_ZN5S34C83v59Ev");}
void  S34C8 ::v60(){vfunc_called(this, "_ZN5S34C83v60Ev");}
void  S34C8 ::v61(){vfunc_called(this, "_ZN5S34C83v61Ev");}
void  S34C8 ::v62(){vfunc_called(this, "_ZN5S34C83v62Ev");}
void  S34C8 ::v63(){vfunc_called(this, "_ZN5S34C83v63Ev");}
void  S34C8 ::v64(){vfunc_called(this, "_ZN5S34C83v64Ev");}
void  S34C8 ::v65(){vfunc_called(this, "_ZN5S34C83v65Ev");}
void  S34C8 ::v66(){vfunc_called(this, "_ZN5S34C83v66Ev");}
void  S34C8 ::v67(){vfunc_called(this, "_ZN5S34C83v67Ev");}
S34C8 ::S34C8(){ note_ctor("S34C8", this);} // tgen

static void Test_S34C8()
{
  extern Class_Descriptor cd_S34C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S34C8, buf);
    S34C8 *dp, &lv = *(dp=new (buf) S34C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S34C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C8)");
    check_field_offset(lv, s34c8f0, ABISELECT(8,4), "S34C8.s34c8f0");
    check_field_offset(lv, s34c8f1, ABISELECT(16,8), "S34C8.s34c8f1");
    check_field_offset(lv, s34c8f2, ABISELECT(24,16), "S34C8.s34c8f2");
    check_field_offset(lv, s34c8f3, ABISELECT(56,32), "S34C8.s34c8f3");
    check_field_offset(lv, s34c8f4, ABISELECT(64,40), "S34C8.s34c8f4");
    check_field_offset(lv, s34c8f5, ABISELECT(72,44), "S34C8.s34c8f5");
    check_field_offset(lv, s34c8f6, ABISELECT(80,52), "S34C8.s34c8f6");
    test_class_info(&lv, &cd_S34C8);
    dp->~S34C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C8(Test_S34C8, "S34C8", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S34C8C1Ev();
extern void _ZN5S34C8D1Ev();
Name_Map name_map_S34C8[] = {
  NSPAIR(_ZN5S34C8C1Ev),
  NSPAIR(_ZN5S34C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S34C8[];
extern void _ZN5S34C8D1Ev();
extern void _ZN5S34C8D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
static  VTBL_ENTRY vtc_S34C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C8[0]),
  (VTBL_ENTRY)&_ZN5S34C8D1Ev,
  (VTBL_ENTRY)&_ZN5S34C8D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
};
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
Class_Descriptor cd_S34C8 = {  "S34C8", // class name
  0,0,//no base classes
  &(vtc_S34C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S34C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S34C8),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C7  : S34C8 {
  int s34c7f0[2];
  void *s34c7f1;
  int s34c7f2[2];
  ::S287C8_nt s34c7f3;
  ::S287C8_nt s34c7f4;
  ::S2121C38 s34c7f5;
  ::S287C8_nt s34c7f6;
  unsigned int s34c7f7:1;
  unsigned int s34c7f8:1;
  unsigned int s34c7f9:1;
  unsigned int s34c7f10:1;
  unsigned int s34c7f11:1;
  int s34c7f12[2];
  virtual  ~S34C7(); // _ZN5S34C7D1Ev
  virtual void  v68(); // _ZN5S34C73v68Ev
  virtual void  v69(); // _ZN5S34C73v69Ev
  virtual void  v70(); // _ZN5S34C73v70Ev
  virtual void  v71(); // _ZN5S34C73v71Ev
  virtual void  v72(); // _ZN5S34C73v72Ev
  virtual void  v73(); // _ZN5S34C73v73Ev
  virtual void  v74(); // _ZN5S34C73v74Ev
  virtual void  v75(); // _ZN5S34C73v75Ev
  virtual void  v76(); // _ZN5S34C73v76Ev
  virtual void  v77(); // _ZN5S34C73v77Ev
  virtual void  v78(); // _ZN5S34C73v78Ev
  virtual void  v79(); // _ZN5S34C73v79Ev
  virtual void  v80(); // _ZN5S34C73v80Ev
  virtual void  v81(); // _ZN5S34C73v81Ev
  virtual void  v82(); // _ZN5S34C73v82Ev
  virtual void  v83(); // _ZN5S34C73v83Ev
  virtual void  v84(); // _ZN5S34C73v84Ev
  virtual void  v85(); // _ZN5S34C73v85Ev
  virtual void  v86(); // _ZN5S34C73v86Ev
  virtual void  v87(); // _ZN5S34C73v87Ev
  virtual void  v88(); // _ZN5S34C73v88Ev
  virtual void  v89(); // _ZN5S34C73v89Ev
  S34C7(); // tgen
};
//SIG(-1 S34C7) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S34C7 ::~S34C7(){ note_dtor("S34C7", this);}
void  S34C7 ::v68(){vfunc_called(this, "_ZN5S34C73v68Ev");}
void  S34C7 ::v69(){vfunc_called(this, "_ZN5S34C73v69Ev");}
void  S34C7 ::v70(){vfunc_called(this, "_ZN5S34C73v70Ev");}
void  S34C7 ::v71(){vfunc_called(this, "_ZN5S34C73v71Ev");}
void  S34C7 ::v72(){vfunc_called(this, "_ZN5S34C73v72Ev");}
void  S34C7 ::v73(){vfunc_called(this, "_ZN5S34C73v73Ev");}
void  S34C7 ::v74(){vfunc_called(this, "_ZN5S34C73v74Ev");}
void  S34C7 ::v75(){vfunc_called(this, "_ZN5S34C73v75Ev");}
void  S34C7 ::v76(){vfunc_called(this, "_ZN5S34C73v76Ev");}
void  S34C7 ::v77(){vfunc_called(this, "_ZN5S34C73v77Ev");}
void  S34C7 ::v78(){vfunc_called(this, "_ZN5S34C73v78Ev");}
void  S34C7 ::v79(){vfunc_called(this, "_ZN5S34C73v79Ev");}
void  S34C7 ::v80(){vfunc_called(this, "_ZN5S34C73v80Ev");}
void  S34C7 ::v81(){vfunc_called(this, "_ZN5S34C73v81Ev");}
void  S34C7 ::v82(){vfunc_called(this, "_ZN5S34C73v82Ev");}
void  S34C7 ::v83(){vfunc_called(this, "_ZN5S34C73v83Ev");}
void  S34C7 ::v84(){vfunc_called(this, "_ZN5S34C73v84Ev");}
void  S34C7 ::v85(){vfunc_called(this, "_ZN5S34C73v85Ev");}
void  S34C7 ::v86(){vfunc_called(this, "_ZN5S34C73v86Ev");}
void  S34C7 ::v87(){vfunc_called(this, "_ZN5S34C73v87Ev");}
void  S34C7 ::v88(){vfunc_called(this, "_ZN5S34C73v88Ev");}
void  S34C7 ::v89(){vfunc_called(this, "_ZN5S34C73v89Ev");}
S34C7 ::S34C7(){ note_ctor("S34C7", this);} // tgen

static void Test_S34C7()
{
  extern Class_Descriptor cd_S34C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S34C7, buf);
    S34C7 *dp, &lv = *(dp=new (buf) S34C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S34C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C7)");
    check_base_class_offset(lv, (S34C8*), 0, "S34C7");
    check_field_offset(lv, s34c7f0, ABISELECT(96,60), "S34C7.s34c7f0");
    check_field_offset(lv, s34c7f1, ABISELECT(104,68), "S34C7.s34c7f1");
    check_field_offset(lv, s34c7f2, ABISELECT(112,72), "S34C7.s34c7f2");
    check_field_offset(lv, s34c7f3, ABISELECT(120,80), "S34C7.s34c7f3");
    check_field_offset(lv, s34c7f4, ABISELECT(136,92), "S34C7.s34c7f4");
    check_field_offset(lv, s34c7f5, ABISELECT(152,104), "S34C7.s34c7f5");
    check_field_offset(lv, s34c7f6, ABISELECT(160,108), "S34C7.s34c7f6");
    set_bf_and_test(lv, s34c7f7, ABISELECT(176,120), 0, 1, 1, "S34C7");
    set_bf_and_test(lv, s34c7f8, ABISELECT(176,120), 1, 1, 1, "S34C7");
    set_bf_and_test(lv, s34c7f9, ABISELECT(176,120), 2, 1, 1, "S34C7");
    set_bf_and_test(lv, s34c7f10, ABISELECT(176,120), 3, 1, 1, "S34C7");
    set_bf_and_test(lv, s34c7f11, ABISELECT(176,120), 4, 1, 1, "S34C7");
    check_field_offset(lv, s34c7f12, ABISELECT(180,124), "S34C7.s34c7f12");
    test_class_info(&lv, &cd_S34C7);
    dp->~S34C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C7(Test_S34C7, "S34C7", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S34C7C1Ev();
extern void _ZN5S34C7D1Ev();
Name_Map name_map_S34C7[] = {
  NSPAIR(_ZN5S34C7C1Ev),
  NSPAIR(_ZN5S34C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
static Base_Class bases_S34C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S34C7[];
extern void _ZN5S34C7D1Ev();
extern void _ZN5S34C7D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
static  VTBL_ENTRY vtc_S34C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C7[0]),
  (VTBL_ENTRY)&_ZN5S34C7D1Ev,
  (VTBL_ENTRY)&_ZN5S34C7D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
};
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
Class_Descriptor cd_S34C7 = {  "S34C7", // class name
  bases_S34C7, 1,
  &(vtc_S34C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S34C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C7),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C6  : S34C7 {
  unsigned int s34c6f0:1;
  unsigned int s34c6f1:1;
  unsigned int s34c6f2:1;
  ::S3350C17 s34c6f3;
  ::S3350C11 s34c6f4;
  ::S3350C5_nt s34c6f5;
  ::S287C27 s34c6f6;
  int s34c6f7[3];
  virtual  ~S34C6(); // _ZN5S34C6D1Ev
  virtual void  v90(); // _ZN5S34C63v90Ev
  virtual void  v91(); // _ZN5S34C63v91Ev
  virtual void  v92(); // _ZN5S34C63v92Ev
  virtual void  v93(); // _ZN5S34C63v93Ev
  virtual void  v94(); // _ZN5S34C63v94Ev
  virtual void  v95(); // _ZN5S34C63v95Ev
  virtual void  v96(); // _ZN5S34C63v96Ev
  virtual void  v97(); // _ZN5S34C63v97Ev
  virtual void  v98(); // _ZN5S34C63v98Ev
  virtual void  v99(); // _ZN5S34C63v99Ev
  virtual void  v100(); // _ZN5S34C64v100Ev
  virtual void  v101(); // _ZN5S34C64v101Ev
  virtual void  v102(); // _ZN5S34C64v102Ev
  virtual void  v103(); // _ZN5S34C64v103Ev
  virtual void  v104(); // _ZN5S34C64v104Ev
  virtual void  v105(); // _ZN5S34C64v105Ev
  virtual void  v106(); // _ZN5S34C64v106Ev
  virtual void  v107(); // _ZN5S34C64v107Ev
  virtual void  v108(); // _ZN5S34C64v108Ev
  virtual void  v109(); // _ZN5S34C64v109Ev
  S34C6(); // tgen
};
//SIG(-1 S34C6) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S34C6 ::~S34C6(){ note_dtor("S34C6", this);}
void  S34C6 ::v90(){vfunc_called(this, "_ZN5S34C63v90Ev");}
void  S34C6 ::v91(){vfunc_called(this, "_ZN5S34C63v91Ev");}
void  S34C6 ::v92(){vfunc_called(this, "_ZN5S34C63v92Ev");}
void  S34C6 ::v93(){vfunc_called(this, "_ZN5S34C63v93Ev");}
void  S34C6 ::v94(){vfunc_called(this, "_ZN5S34C63v94Ev");}
void  S34C6 ::v95(){vfunc_called(this, "_ZN5S34C63v95Ev");}
void  S34C6 ::v96(){vfunc_called(this, "_ZN5S34C63v96Ev");}
void  S34C6 ::v97(){vfunc_called(this, "_ZN5S34C63v97Ev");}
void  S34C6 ::v98(){vfunc_called(this, "_ZN5S34C63v98Ev");}
void  S34C6 ::v99(){vfunc_called(this, "_ZN5S34C63v99Ev");}
void  S34C6 ::v100(){vfunc_called(this, "_ZN5S34C64v100Ev");}
void  S34C6 ::v101(){vfunc_called(this, "_ZN5S34C64v101Ev");}
void  S34C6 ::v102(){vfunc_called(this, "_ZN5S34C64v102Ev");}
void  S34C6 ::v103(){vfunc_called(this, "_ZN5S34C64v103Ev");}
void  S34C6 ::v104(){vfunc_called(this, "_ZN5S34C64v104Ev");}
void  S34C6 ::v105(){vfunc_called(this, "_ZN5S34C64v105Ev");}
void  S34C6 ::v106(){vfunc_called(this, "_ZN5S34C64v106Ev");}
void  S34C6 ::v107(){vfunc_called(this, "_ZN5S34C64v107Ev");}
void  S34C6 ::v108(){vfunc_called(this, "_ZN5S34C64v108Ev");}
void  S34C6 ::v109(){vfunc_called(this, "_ZN5S34C64v109Ev");}
S34C6 ::S34C6(){ note_ctor("S34C6", this);} // tgen

static void Test_S34C6()
{
  extern Class_Descriptor cd_S34C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S34C6, buf);
    S34C6 *dp, &lv = *(dp=new (buf) S34C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S34C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C6)");
    check_base_class_offset(lv, (S34C8*)(S34C7*), 0, "S34C6");
    check_base_class_offset(lv, (S34C7*), 0, "S34C6");
    set_bf_and_test(lv, s34c6f0, ABISELECT(188,132), 0, 1, 1, "S34C6");
    set_bf_and_test(lv, s34c6f1, ABISELECT(188,132), 1, 1, 1, "S34C6");
    set_bf_and_test(lv, s34c6f2, ABISELECT(188,132), 2, 1, 1, "S34C6");
    check_field_offset(lv, s34c6f3, ABISELECT(192,136), "S34C6.s34c6f3");
    check_field_offset(lv, s34c6f4, ABISELECT(208,148), "S34C6.s34c6f4");
    check_field_offset(lv, s34c6f5, ABISELECT(224,160), "S34C6.s34c6f5");
    check_field_offset(lv, s34c6f6, ABISELECT(240,172), "S34C6.s34c6f6");
    check_field_offset(lv, s34c6f7, ABISELECT(256,184), "S34C6.s34c6f7");
    test_class_info(&lv, &cd_S34C6);
    dp->~S34C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C6(Test_S34C6, "S34C6", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S34C6C1Ev();
extern void _ZN5S34C6D1Ev();
Name_Map name_map_S34C6[] = {
  NSPAIR(_ZN5S34C6C1Ev),
  NSPAIR(_ZN5S34C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
static Base_Class bases_S34C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S34C6[];
extern void _ZN5S34C6D1Ev();
extern void _ZN5S34C6D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
static  VTBL_ENTRY vtc_S34C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C6[0]),
  (VTBL_ENTRY)&_ZN5S34C6D1Ev,
  (VTBL_ENTRY)&_ZN5S34C6D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
};
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
Class_Descriptor cd_S34C6 = {  "S34C6", // class name
  bases_S34C6, 2,
  &(vtc_S34C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S34C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C6),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C5  : S34C6 {
  ::S3350C4_nt s34c5f0;
  unsigned int s34c5f1:1;
  ::S287C23 s34c5f2;
  virtual  ~S34C5(); // _ZN5S34C5D1Ev
  virtual void  v110(); // _ZN5S34C54v110Ev
  virtual void  v111(); // _ZN5S34C54v111Ev
  virtual void  v112(); // _ZN5S34C54v112Ev
  virtual void  v113(); // _ZN5S34C54v113Ev
  S34C5(); // tgen
};
//SIG(-1 S34C5) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S34C5 ::~S34C5(){ note_dtor("S34C5", this);}
void  S34C5 ::v110(){vfunc_called(this, "_ZN5S34C54v110Ev");}
void  S34C5 ::v111(){vfunc_called(this, "_ZN5S34C54v111Ev");}
void  S34C5 ::v112(){vfunc_called(this, "_ZN5S34C54v112Ev");}
void  S34C5 ::v113(){vfunc_called(this, "_ZN5S34C54v113Ev");}
S34C5 ::S34C5(){ note_ctor("S34C5", this);} // tgen

static void Test_S34C5()
{
  extern Class_Descriptor cd_S34C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S34C5, buf);
    S34C5 *dp, &lv = *(dp=new (buf) S34C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S34C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C5)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*), 0, "S34C5");
    check_base_class_offset(lv, (S34C7*)(S34C6*), 0, "S34C5");
    check_base_class_offset(lv, (S34C6*), 0, "S34C5");
    check_field_offset(lv, s34c5f0, ABISELECT(268,196), "S34C5.s34c5f0");
    set_bf_and_test(lv, s34c5f1, ABISELECT(276,204), 0, 1, 1, "S34C5");
    check_field_offset(lv, s34c5f2, ABISELECT(280,208), "S34C5.s34c5f2");
    test_class_info(&lv, &cd_S34C5);
    dp->~S34C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C5(Test_S34C5, "S34C5", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S34C5C1Ev();
extern void _ZN5S34C5D1Ev();
Name_Map name_map_S34C5[] = {
  NSPAIR(_ZN5S34C5C1Ev),
  NSPAIR(_ZN5S34C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
static Base_Class bases_S34C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S34C5[];
extern void _ZN5S34C5D1Ev();
extern void _ZN5S34C5D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
static  VTBL_ENTRY vtc_S34C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C5[0]),
  (VTBL_ENTRY)&_ZN5S34C5D1Ev,
  (VTBL_ENTRY)&_ZN5S34C5D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
};
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
Class_Descriptor cd_S34C5 = {  "S34C5", // class name
  bases_S34C5, 3,
  &(vtc_S34C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S34C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C5),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C4  : S34C5 {
  int s34c4f0;
  unsigned int s34c4f1:1;
  virtual  ~S34C4(); // _ZN5S34C4D1Ev
  virtual void  v114(); // _ZN5S34C44v114Ev
  virtual void  v115(); // _ZN5S34C44v115Ev
  virtual void  v116(); // _ZN5S34C44v116Ev
  virtual void  v117(); // _ZN5S34C44v117Ev
  virtual void  v118(); // _ZN5S34C44v118Ev
  virtual void  v119(); // _ZN5S34C44v119Ev
  virtual void  v120(); // _ZN5S34C44v120Ev
  virtual void  v121(); // _ZN5S34C44v121Ev
  S34C4(); // tgen
};
//SIG(-1 S34C4) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S34C4 ::~S34C4(){ note_dtor("S34C4", this);}
void  S34C4 ::v114(){vfunc_called(this, "_ZN5S34C44v114Ev");}
void  S34C4 ::v115(){vfunc_called(this, "_ZN5S34C44v115Ev");}
void  S34C4 ::v116(){vfunc_called(this, "_ZN5S34C44v116Ev");}
void  S34C4 ::v117(){vfunc_called(this, "_ZN5S34C44v117Ev");}
void  S34C4 ::v118(){vfunc_called(this, "_ZN5S34C44v118Ev");}
void  S34C4 ::v119(){vfunc_called(this, "_ZN5S34C44v119Ev");}
void  S34C4 ::v120(){vfunc_called(this, "_ZN5S34C44v120Ev");}
void  S34C4 ::v121(){vfunc_called(this, "_ZN5S34C44v121Ev");}
S34C4 ::S34C4(){ note_ctor("S34C4", this);} // tgen

static void Test_S34C4()
{
  extern Class_Descriptor cd_S34C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S34C4, buf);
    S34C4 *dp, &lv = *(dp=new (buf) S34C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S34C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C4)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*)(S34C5*), 0, "S34C4");
    check_base_class_offset(lv, (S34C7*)(S34C6*)(S34C5*), 0, "S34C4");
    check_base_class_offset(lv, (S34C6*)(S34C5*), 0, "S34C4");
    check_base_class_offset(lv, (S34C5*), 0, "S34C4");
    check_field_offset(lv, s34c4f0, ABISELECT(296,220), "S34C4.s34c4f0");
    set_bf_and_test(lv, s34c4f1, ABISELECT(300,224), 0, 1, 1, "S34C4");
    test_class_info(&lv, &cd_S34C4);
    dp->~S34C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C4(Test_S34C4, "S34C4", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S34C4C1Ev();
extern void _ZN5S34C4D1Ev();
Name_Map name_map_S34C4[] = {
  NSPAIR(_ZN5S34C4C1Ev),
  NSPAIR(_ZN5S34C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
extern Class_Descriptor cd_S34C5;
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
static Base_Class bases_S34C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S34C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S34C4[];
extern void _ZN5S34C4D1Ev();
extern void _ZN5S34C4D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
extern void _ZN5S34C44v114Ev();
extern void _ZN5S34C44v115Ev();
extern void _ZN5S34C44v116Ev();
extern void _ZN5S34C44v117Ev();
extern void _ZN5S34C44v118Ev();
extern void _ZN5S34C44v119Ev();
extern void _ZN5S34C44v120Ev();
extern void _ZN5S34C44v121Ev();
static  VTBL_ENTRY vtc_S34C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C4[0]),
  (VTBL_ENTRY)&_ZN5S34C4D1Ev,
  (VTBL_ENTRY)&_ZN5S34C4D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
  (VTBL_ENTRY)&_ZN5S34C44v114Ev,
  (VTBL_ENTRY)&_ZN5S34C44v115Ev,
  (VTBL_ENTRY)&_ZN5S34C44v116Ev,
  (VTBL_ENTRY)&_ZN5S34C44v117Ev,
  (VTBL_ENTRY)&_ZN5S34C44v118Ev,
  (VTBL_ENTRY)&_ZN5S34C44v119Ev,
  (VTBL_ENTRY)&_ZN5S34C44v120Ev,
  (VTBL_ENTRY)&_ZN5S34C44v121Ev,
};
extern VTBL_ENTRY _ZTI5S34C4[];
extern  VTBL_ENTRY _ZTV5S34C4[];
Class_Descriptor cd_S34C4 = {  "S34C4", // class name
  bases_S34C4, 4,
  &(vtc_S34C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S34C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C4),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C3  : S34C4 {
  int s34c3f0;
  virtual  ~S34C3(); // _ZN5S34C3D1Ev
  virtual void  v122(); // _ZN5S34C34v122Ev
  virtual void  v123(); // _ZN5S34C34v123Ev
  S34C3(); // tgen
};
//SIG(-1 S34C3) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S34C3 ::~S34C3(){ note_dtor("S34C3", this);}
void  S34C3 ::v122(){vfunc_called(this, "_ZN5S34C34v122Ev");}
void  S34C3 ::v123(){vfunc_called(this, "_ZN5S34C34v123Ev");}
S34C3 ::S34C3(){ note_ctor("S34C3", this);} // tgen

static void Test_S34C3()
{
  extern Class_Descriptor cd_S34C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S34C3, buf);
    S34C3 *dp, &lv = *(dp=new (buf) S34C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S34C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C3)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*)(S34C5*)(S34C4*), 0, "S34C3");
    check_base_class_offset(lv, (S34C7*)(S34C6*)(S34C5*)(S34C4*), 0, "S34C3");
    check_base_class_offset(lv, (S34C6*)(S34C5*)(S34C4*), 0, "S34C3");
    check_base_class_offset(lv, (S34C5*)(S34C4*), 0, "S34C3");
    check_base_class_offset(lv, (S34C4*), 0, "S34C3");
    check_field_offset(lv, s34c3f0, ABISELECT(304,228), "S34C3.s34c3f0");
    test_class_info(&lv, &cd_S34C3);
    dp->~S34C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C3(Test_S34C3, "S34C3", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S34C3C1Ev();
extern void _ZN5S34C3D1Ev();
Name_Map name_map_S34C3[] = {
  NSPAIR(_ZN5S34C3C1Ev),
  NSPAIR(_ZN5S34C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
extern Class_Descriptor cd_S34C5;
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
extern Class_Descriptor cd_S34C4;
extern VTBL_ENTRY _ZTI5S34C4[];
extern  VTBL_ENTRY _ZTV5S34C4[];
static Base_Class bases_S34C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S34C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S34C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S34C3[];
extern void _ZN5S34C3D1Ev();
extern void _ZN5S34C3D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
extern void _ZN5S34C44v114Ev();
extern void _ZN5S34C44v115Ev();
extern void _ZN5S34C44v116Ev();
extern void _ZN5S34C44v117Ev();
extern void _ZN5S34C44v118Ev();
extern void _ZN5S34C44v119Ev();
extern void _ZN5S34C44v120Ev();
extern void _ZN5S34C44v121Ev();
extern void _ZN5S34C34v122Ev();
extern void _ZN5S34C34v123Ev();
static  VTBL_ENTRY vtc_S34C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C3[0]),
  (VTBL_ENTRY)&_ZN5S34C3D1Ev,
  (VTBL_ENTRY)&_ZN5S34C3D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
  (VTBL_ENTRY)&_ZN5S34C44v114Ev,
  (VTBL_ENTRY)&_ZN5S34C44v115Ev,
  (VTBL_ENTRY)&_ZN5S34C44v116Ev,
  (VTBL_ENTRY)&_ZN5S34C44v117Ev,
  (VTBL_ENTRY)&_ZN5S34C44v118Ev,
  (VTBL_ENTRY)&_ZN5S34C44v119Ev,
  (VTBL_ENTRY)&_ZN5S34C44v120Ev,
  (VTBL_ENTRY)&_ZN5S34C44v121Ev,
  (VTBL_ENTRY)&_ZN5S34C34v122Ev,
  (VTBL_ENTRY)&_ZN5S34C34v123Ev,
};
extern VTBL_ENTRY _ZTI5S34C3[];
extern  VTBL_ENTRY _ZTV5S34C3[];
Class_Descriptor cd_S34C3 = {  "S34C3", // class name
  bases_S34C3, 5,
  &(vtc_S34C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S34C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C3),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C2  : S34C3 {
  void *s34c2f0;
  ::S287C8_nt s34c2f1;
  virtual  ~S34C2(); // _ZN5S34C2D1Ev
  virtual void  v124(); // _ZN5S34C24v124Ev
  virtual void  v125(); // _ZN5S34C24v125Ev
  S34C2(); // tgen
};
//SIG(-1 S34C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v109 v110 v111 v112 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v121 v122 Fi} vd v1 v2 Fp FC9}


 S34C2 ::~S34C2(){ note_dtor("S34C2", this);}
void  S34C2 ::v124(){vfunc_called(this, "_ZN5S34C24v124Ev");}
void  S34C2 ::v125(){vfunc_called(this, "_ZN5S34C24v125Ev");}
S34C2 ::S34C2(){ note_ctor("S34C2", this);} // tgen

static void Test_S34C2()
{
  extern Class_Descriptor cd_S34C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,63)];
    init_test(&cd_S34C2, buf);
    S34C2 *dp, &lv = *(dp=new (buf) S34C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,248), "sizeof(S34C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C2)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*)(S34C5*)(S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C7*)(S34C6*)(S34C5*)(S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C6*)(S34C5*)(S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C5*)(S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C4*)(S34C3*), 0, "S34C2");
    check_base_class_offset(lv, (S34C3*), 0, "S34C2");
    check_field_offset(lv, s34c2f0, ABISELECT(312,232), "S34C2.s34c2f0");
    check_field_offset(lv, s34c2f1, ABISELECT(320,236), "S34C2.s34c2f1");
    test_class_info(&lv, &cd_S34C2);
    dp->~S34C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C2(Test_S34C2, "S34C2", ABISELECT(336,248));

#else // __cplusplus

extern void _ZN5S34C2C1Ev();
extern void _ZN5S34C2D1Ev();
Name_Map name_map_S34C2[] = {
  NSPAIR(_ZN5S34C2C1Ev),
  NSPAIR(_ZN5S34C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
extern Class_Descriptor cd_S34C5;
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
extern Class_Descriptor cd_S34C4;
extern VTBL_ENTRY _ZTI5S34C4[];
extern  VTBL_ENTRY _ZTV5S34C4[];
extern Class_Descriptor cd_S34C3;
extern VTBL_ENTRY _ZTI5S34C3[];
extern  VTBL_ENTRY _ZTV5S34C3[];
static Base_Class bases_S34C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S34C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S34C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S34C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S34C2[];
extern void _ZN5S34C2D1Ev();
extern void _ZN5S34C2D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
extern void _ZN5S34C44v114Ev();
extern void _ZN5S34C44v115Ev();
extern void _ZN5S34C44v116Ev();
extern void _ZN5S34C44v117Ev();
extern void _ZN5S34C44v118Ev();
extern void _ZN5S34C44v119Ev();
extern void _ZN5S34C44v120Ev();
extern void _ZN5S34C44v121Ev();
extern void _ZN5S34C34v122Ev();
extern void _ZN5S34C34v123Ev();
extern void _ZN5S34C24v124Ev();
extern void _ZN5S34C24v125Ev();
static  VTBL_ENTRY vtc_S34C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C2[0]),
  (VTBL_ENTRY)&_ZN5S34C2D1Ev,
  (VTBL_ENTRY)&_ZN5S34C2D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
  (VTBL_ENTRY)&_ZN5S34C44v114Ev,
  (VTBL_ENTRY)&_ZN5S34C44v115Ev,
  (VTBL_ENTRY)&_ZN5S34C44v116Ev,
  (VTBL_ENTRY)&_ZN5S34C44v117Ev,
  (VTBL_ENTRY)&_ZN5S34C44v118Ev,
  (VTBL_ENTRY)&_ZN5S34C44v119Ev,
  (VTBL_ENTRY)&_ZN5S34C44v120Ev,
  (VTBL_ENTRY)&_ZN5S34C44v121Ev,
  (VTBL_ENTRY)&_ZN5S34C34v122Ev,
  (VTBL_ENTRY)&_ZN5S34C34v123Ev,
  (VTBL_ENTRY)&_ZN5S34C24v124Ev,
  (VTBL_ENTRY)&_ZN5S34C24v125Ev,
};
extern VTBL_ENTRY _ZTI5S34C2[];
extern  VTBL_ENTRY _ZTV5S34C2[];
Class_Descriptor cd_S34C2 = {  "S34C2", // class name
  bases_S34C2, 6,
  &(vtc_S34C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,248), // object size
  NSPAIRA(_ZTI5S34C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C2),126, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S34C1  : S34C2 {
  unsigned int s34c1f0:1;
  char s34c1f1;
  virtual  ~S34C1(); // _ZN5S34C1D1Ev
  virtual void  v1(); // _ZN5S34C12v1Ev
  virtual void  v2(); // _ZN5S34C12v2Ev
  virtual void  v3(); // _ZN5S34C12v3Ev
  S34C1(); // tgen
};
//SIG(1 S34C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ BC8{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC9{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC10{ BC11{ BC12{ BC13{ m Fp Fi[2]}}}} FC10 FC14{ m} FC10 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC15{ BC16{ BC13}} FC17{ BC18{ BC13}} FC19{ BC20{ BC13}} FC21{ BC22{ BC13}} Fi[3]} vd v110 v111 v112 v113 FC9 Fi:1 FC23{ BC24{ BC13}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v124 v125 Fp FC10} vd v1 v2 v3 Fi:1 Fc}


 S34C1 ::~S34C1(){ note_dtor("S34C1", this);}
void  S34C1 ::v1(){vfunc_called(this, "_ZN5S34C12v1Ev");}
void  S34C1 ::v2(){vfunc_called(this, "_ZN5S34C12v2Ev");}
void  S34C1 ::v3(){vfunc_called(this, "_ZN5S34C12v3Ev");}
S34C1 ::S34C1(){ note_ctor("S34C1", this);} // tgen

static void Test_S34C1()
{
  extern Class_Descriptor cd_S34C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,64)];
    init_test(&cd_S34C1, buf);
    S34C1 *dp, &lv = *(dp=new (buf) S34C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,252), "sizeof(S34C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S34C1)");
    check_base_class_offset(lv, (S34C8*)(S34C7*)(S34C6*)(S34C5*)(S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C7*)(S34C6*)(S34C5*)(S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C6*)(S34C5*)(S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C5*)(S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C4*)(S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C3*)(S34C2*), 0, "S34C1");
    check_base_class_offset(lv, (S34C2*), 0, "S34C1");
    set_bf_and_test(lv, s34c1f0, ABISELECT(336,248), 0, 1, 1, "S34C1");
    check_field_offset(lv, s34c1f1, ABISELECT(337,249), "S34C1.s34c1f1");
    test_class_info(&lv, &cd_S34C1);
    dp->~S34C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS34C1(Test_S34C1, "S34C1", ABISELECT(344,252));

#else // __cplusplus

extern void _ZN5S34C1C1Ev();
extern void _ZN5S34C1D1Ev();
Name_Map name_map_S34C1[] = {
  NSPAIR(_ZN5S34C1C1Ev),
  NSPAIR(_ZN5S34C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S34C8;
extern VTBL_ENTRY _ZTI5S34C8[];
extern  VTBL_ENTRY _ZTV5S34C8[];
extern Class_Descriptor cd_S34C7;
extern VTBL_ENTRY _ZTI5S34C7[];
extern  VTBL_ENTRY _ZTV5S34C7[];
extern Class_Descriptor cd_S34C6;
extern VTBL_ENTRY _ZTI5S34C6[];
extern  VTBL_ENTRY _ZTV5S34C6[];
extern Class_Descriptor cd_S34C5;
extern VTBL_ENTRY _ZTI5S34C5[];
extern  VTBL_ENTRY _ZTV5S34C5[];
extern Class_Descriptor cd_S34C4;
extern VTBL_ENTRY _ZTI5S34C4[];
extern  VTBL_ENTRY _ZTV5S34C4[];
extern Class_Descriptor cd_S34C3;
extern VTBL_ENTRY _ZTI5S34C3[];
extern  VTBL_ENTRY _ZTV5S34C3[];
extern Class_Descriptor cd_S34C2;
extern VTBL_ENTRY _ZTI5S34C2[];
extern  VTBL_ENTRY _ZTV5S34C2[];
static Base_Class bases_S34C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S34C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S34C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S34C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S34C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S34C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S34C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S34C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S34C1[];
extern void _ZN5S34C1D1Ev();
extern void _ZN5S34C1D0Ev();
extern void _ZN5S34C82v4Ev();
extern void _ZN5S34C82v5Ev();
extern void _ZN5S34C82v6Ev();
extern void _ZN5S34C82v7Ev();
extern void _ZN5S34C82v8Ev();
extern void _ZN5S34C82v9Ev();
extern void _ZN5S34C83v10Ev();
extern void _ZN5S34C83v11Ev();
extern void _ZN5S34C83v12Ev();
extern void _ZN5S34C83v13Ev();
extern void _ZN5S34C83v14Ev();
extern void _ZN5S34C83v15Ev();
extern void _ZN5S34C83v16Ev();
extern void _ZN5S34C83v17Ev();
extern void _ZN5S34C83v18Ev();
extern void _ZN5S34C83v19Ev();
extern void _ZN5S34C83v20Ev();
extern void _ZN5S34C83v21Ev();
extern void _ZN5S34C83v22Ev();
extern void _ZN5S34C83v23Ev();
extern void _ZN5S34C83v24Ev();
extern void _ZN5S34C83v25Ev();
extern void _ZN5S34C83v26Ev();
extern void _ZN5S34C83v27Ev();
extern void _ZN5S34C83v28Ev();
extern void _ZN5S34C83v29Ev();
extern void _ZN5S34C83v30Ev();
extern void _ZN5S34C83v31Ev();
extern void _ZN5S34C83v32Ev();
extern void _ZN5S34C83v33Ev();
extern void _ZN5S34C83v34Ev();
extern void _ZN5S34C83v35Ev();
extern void _ZN5S34C83v36Ev();
extern void _ZN5S34C83v37Ev();
extern void _ZN5S34C83v38Ev();
extern void _ZN5S34C83v39Ev();
extern void _ZN5S34C83v40Ev();
extern void _ZN5S34C83v41Ev();
extern void _ZN5S34C83v42Ev();
extern void _ZN5S34C83v43Ev();
extern void _ZN5S34C83v44Ev();
extern void _ZN5S34C83v45Ev();
extern void _ZN5S34C83v46Ev();
extern void _ZN5S34C83v47Ev();
extern void _ZN5S34C83v48Ev();
extern void _ZN5S34C83v49Ev();
extern void _ZN5S34C83v50Ev();
extern void _ZN5S34C83v51Ev();
extern void _ZN5S34C83v52Ev();
extern void _ZN5S34C83v53Ev();
extern void _ZN5S34C83v54Ev();
extern void _ZN5S34C83v55Ev();
extern void _ZN5S34C83v56Ev();
extern void _ZN5S34C83v57Ev();
extern void _ZN5S34C83v58Ev();
extern void _ZN5S34C83v59Ev();
extern void _ZN5S34C83v60Ev();
extern void _ZN5S34C83v61Ev();
extern void _ZN5S34C83v62Ev();
extern void _ZN5S34C83v63Ev();
extern void _ZN5S34C83v64Ev();
extern void _ZN5S34C83v65Ev();
extern void _ZN5S34C83v66Ev();
extern void _ZN5S34C83v67Ev();
extern void _ZN5S34C73v68Ev();
extern void _ZN5S34C73v69Ev();
extern void _ZN5S34C73v70Ev();
extern void _ZN5S34C73v71Ev();
extern void _ZN5S34C73v72Ev();
extern void _ZN5S34C73v73Ev();
extern void _ZN5S34C73v74Ev();
extern void _ZN5S34C73v75Ev();
extern void _ZN5S34C73v76Ev();
extern void _ZN5S34C73v77Ev();
extern void _ZN5S34C73v78Ev();
extern void _ZN5S34C73v79Ev();
extern void _ZN5S34C73v80Ev();
extern void _ZN5S34C73v81Ev();
extern void _ZN5S34C73v82Ev();
extern void _ZN5S34C73v83Ev();
extern void _ZN5S34C73v84Ev();
extern void _ZN5S34C73v85Ev();
extern void _ZN5S34C73v86Ev();
extern void _ZN5S34C73v87Ev();
extern void _ZN5S34C73v88Ev();
extern void _ZN5S34C73v89Ev();
extern void _ZN5S34C63v90Ev();
extern void _ZN5S34C63v91Ev();
extern void _ZN5S34C63v92Ev();
extern void _ZN5S34C63v93Ev();
extern void _ZN5S34C63v94Ev();
extern void _ZN5S34C63v95Ev();
extern void _ZN5S34C63v96Ev();
extern void _ZN5S34C63v97Ev();
extern void _ZN5S34C63v98Ev();
extern void _ZN5S34C63v99Ev();
extern void _ZN5S34C64v100Ev();
extern void _ZN5S34C64v101Ev();
extern void _ZN5S34C64v102Ev();
extern void _ZN5S34C64v103Ev();
extern void _ZN5S34C64v104Ev();
extern void _ZN5S34C64v105Ev();
extern void _ZN5S34C64v106Ev();
extern void _ZN5S34C64v107Ev();
extern void _ZN5S34C64v108Ev();
extern void _ZN5S34C64v109Ev();
extern void _ZN5S34C54v110Ev();
extern void _ZN5S34C54v111Ev();
extern void _ZN5S34C54v112Ev();
extern void _ZN5S34C54v113Ev();
extern void _ZN5S34C44v114Ev();
extern void _ZN5S34C44v115Ev();
extern void _ZN5S34C44v116Ev();
extern void _ZN5S34C44v117Ev();
extern void _ZN5S34C44v118Ev();
extern void _ZN5S34C44v119Ev();
extern void _ZN5S34C44v120Ev();
extern void _ZN5S34C44v121Ev();
extern void _ZN5S34C34v122Ev();
extern void _ZN5S34C34v123Ev();
extern void _ZN5S34C24v124Ev();
extern void _ZN5S34C24v125Ev();
extern void _ZN5S34C12v1Ev();
extern void _ZN5S34C12v2Ev();
extern void _ZN5S34C12v3Ev();
static  VTBL_ENTRY vtc_S34C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S34C1[0]),
  (VTBL_ENTRY)&_ZN5S34C1D1Ev,
  (VTBL_ENTRY)&_ZN5S34C1D0Ev,
  (VTBL_ENTRY)&_ZN5S34C82v4Ev,
  (VTBL_ENTRY)&_ZN5S34C82v5Ev,
  (VTBL_ENTRY)&_ZN5S34C82v6Ev,
  (VTBL_ENTRY)&_ZN5S34C82v7Ev,
  (VTBL_ENTRY)&_ZN5S34C82v8Ev,
  (VTBL_ENTRY)&_ZN5S34C82v9Ev,
  (VTBL_ENTRY)&_ZN5S34C83v10Ev,
  (VTBL_ENTRY)&_ZN5S34C83v11Ev,
  (VTBL_ENTRY)&_ZN5S34C83v12Ev,
  (VTBL_ENTRY)&_ZN5S34C83v13Ev,
  (VTBL_ENTRY)&_ZN5S34C83v14Ev,
  (VTBL_ENTRY)&_ZN5S34C83v15Ev,
  (VTBL_ENTRY)&_ZN5S34C83v16Ev,
  (VTBL_ENTRY)&_ZN5S34C83v17Ev,
  (VTBL_ENTRY)&_ZN5S34C83v18Ev,
  (VTBL_ENTRY)&_ZN5S34C83v19Ev,
  (VTBL_ENTRY)&_ZN5S34C83v20Ev,
  (VTBL_ENTRY)&_ZN5S34C83v21Ev,
  (VTBL_ENTRY)&_ZN5S34C83v22Ev,
  (VTBL_ENTRY)&_ZN5S34C83v23Ev,
  (VTBL_ENTRY)&_ZN5S34C83v24Ev,
  (VTBL_ENTRY)&_ZN5S34C83v25Ev,
  (VTBL_ENTRY)&_ZN5S34C83v26Ev,
  (VTBL_ENTRY)&_ZN5S34C83v27Ev,
  (VTBL_ENTRY)&_ZN5S34C83v28Ev,
  (VTBL_ENTRY)&_ZN5S34C83v29Ev,
  (VTBL_ENTRY)&_ZN5S34C83v30Ev,
  (VTBL_ENTRY)&_ZN5S34C83v31Ev,
  (VTBL_ENTRY)&_ZN5S34C83v32Ev,
  (VTBL_ENTRY)&_ZN5S34C83v33Ev,
  (VTBL_ENTRY)&_ZN5S34C83v34Ev,
  (VTBL_ENTRY)&_ZN5S34C83v35Ev,
  (VTBL_ENTRY)&_ZN5S34C83v36Ev,
  (VTBL_ENTRY)&_ZN5S34C83v37Ev,
  (VTBL_ENTRY)&_ZN5S34C83v38Ev,
  (VTBL_ENTRY)&_ZN5S34C83v39Ev,
  (VTBL_ENTRY)&_ZN5S34C83v40Ev,
  (VTBL_ENTRY)&_ZN5S34C83v41Ev,
  (VTBL_ENTRY)&_ZN5S34C83v42Ev,
  (VTBL_ENTRY)&_ZN5S34C83v43Ev,
  (VTBL_ENTRY)&_ZN5S34C83v44Ev,
  (VTBL_ENTRY)&_ZN5S34C83v45Ev,
  (VTBL_ENTRY)&_ZN5S34C83v46Ev,
  (VTBL_ENTRY)&_ZN5S34C83v47Ev,
  (VTBL_ENTRY)&_ZN5S34C83v48Ev,
  (VTBL_ENTRY)&_ZN5S34C83v49Ev,
  (VTBL_ENTRY)&_ZN5S34C83v50Ev,
  (VTBL_ENTRY)&_ZN5S34C83v51Ev,
  (VTBL_ENTRY)&_ZN5S34C83v52Ev,
  (VTBL_ENTRY)&_ZN5S34C83v53Ev,
  (VTBL_ENTRY)&_ZN5S34C83v54Ev,
  (VTBL_ENTRY)&_ZN5S34C83v55Ev,
  (VTBL_ENTRY)&_ZN5S34C83v56Ev,
  (VTBL_ENTRY)&_ZN5S34C83v57Ev,
  (VTBL_ENTRY)&_ZN5S34C83v58Ev,
  (VTBL_ENTRY)&_ZN5S34C83v59Ev,
  (VTBL_ENTRY)&_ZN5S34C83v60Ev,
  (VTBL_ENTRY)&_ZN5S34C83v61Ev,
  (VTBL_ENTRY)&_ZN5S34C83v62Ev,
  (VTBL_ENTRY)&_ZN5S34C83v63Ev,
  (VTBL_ENTRY)&_ZN5S34C83v64Ev,
  (VTBL_ENTRY)&_ZN5S34C83v65Ev,
  (VTBL_ENTRY)&_ZN5S34C83v66Ev,
  (VTBL_ENTRY)&_ZN5S34C83v67Ev,
  (VTBL_ENTRY)&_ZN5S34C73v68Ev,
  (VTBL_ENTRY)&_ZN5S34C73v69Ev,
  (VTBL_ENTRY)&_ZN5S34C73v70Ev,
  (VTBL_ENTRY)&_ZN5S34C73v71Ev,
  (VTBL_ENTRY)&_ZN5S34C73v72Ev,
  (VTBL_ENTRY)&_ZN5S34C73v73Ev,
  (VTBL_ENTRY)&_ZN5S34C73v74Ev,
  (VTBL_ENTRY)&_ZN5S34C73v75Ev,
  (VTBL_ENTRY)&_ZN5S34C73v76Ev,
  (VTBL_ENTRY)&_ZN5S34C73v77Ev,
  (VTBL_ENTRY)&_ZN5S34C73v78Ev,
  (VTBL_ENTRY)&_ZN5S34C73v79Ev,
  (VTBL_ENTRY)&_ZN5S34C73v80Ev,
  (VTBL_ENTRY)&_ZN5S34C73v81Ev,
  (VTBL_ENTRY)&_ZN5S34C73v82Ev,
  (VTBL_ENTRY)&_ZN5S34C73v83Ev,
  (VTBL_ENTRY)&_ZN5S34C73v84Ev,
  (VTBL_ENTRY)&_ZN5S34C73v85Ev,
  (VTBL_ENTRY)&_ZN5S34C73v86Ev,
  (VTBL_ENTRY)&_ZN5S34C73v87Ev,
  (VTBL_ENTRY)&_ZN5S34C73v88Ev,
  (VTBL_ENTRY)&_ZN5S34C73v89Ev,
  (VTBL_ENTRY)&_ZN5S34C63v90Ev,
  (VTBL_ENTRY)&_ZN5S34C63v91Ev,
  (VTBL_ENTRY)&_ZN5S34C63v92Ev,
  (VTBL_ENTRY)&_ZN5S34C63v93Ev,
  (VTBL_ENTRY)&_ZN5S34C63v94Ev,
  (VTBL_ENTRY)&_ZN5S34C63v95Ev,
  (VTBL_ENTRY)&_ZN5S34C63v96Ev,
  (VTBL_ENTRY)&_ZN5S34C63v97Ev,
  (VTBL_ENTRY)&_ZN5S34C63v98Ev,
  (VTBL_ENTRY)&_ZN5S34C63v99Ev,
  (VTBL_ENTRY)&_ZN5S34C64v100Ev,
  (VTBL_ENTRY)&_ZN5S34C64v101Ev,
  (VTBL_ENTRY)&_ZN5S34C64v102Ev,
  (VTBL_ENTRY)&_ZN5S34C64v103Ev,
  (VTBL_ENTRY)&_ZN5S34C64v104Ev,
  (VTBL_ENTRY)&_ZN5S34C64v105Ev,
  (VTBL_ENTRY)&_ZN5S34C64v106Ev,
  (VTBL_ENTRY)&_ZN5S34C64v107Ev,
  (VTBL_ENTRY)&_ZN5S34C64v108Ev,
  (VTBL_ENTRY)&_ZN5S34C64v109Ev,
  (VTBL_ENTRY)&_ZN5S34C54v110Ev,
  (VTBL_ENTRY)&_ZN5S34C54v111Ev,
  (VTBL_ENTRY)&_ZN5S34C54v112Ev,
  (VTBL_ENTRY)&_ZN5S34C54v113Ev,
  (VTBL_ENTRY)&_ZN5S34C44v114Ev,
  (VTBL_ENTRY)&_ZN5S34C44v115Ev,
  (VTBL_ENTRY)&_ZN5S34C44v116Ev,
  (VTBL_ENTRY)&_ZN5S34C44v117Ev,
  (VTBL_ENTRY)&_ZN5S34C44v118Ev,
  (VTBL_ENTRY)&_ZN5S34C44v119Ev,
  (VTBL_ENTRY)&_ZN5S34C44v120Ev,
  (VTBL_ENTRY)&_ZN5S34C44v121Ev,
  (VTBL_ENTRY)&_ZN5S34C34v122Ev,
  (VTBL_ENTRY)&_ZN5S34C34v123Ev,
  (VTBL_ENTRY)&_ZN5S34C24v124Ev,
  (VTBL_ENTRY)&_ZN5S34C24v125Ev,
  (VTBL_ENTRY)&_ZN5S34C12v1Ev,
  (VTBL_ENTRY)&_ZN5S34C12v2Ev,
  (VTBL_ENTRY)&_ZN5S34C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S34C1[];
extern  VTBL_ENTRY _ZTV5S34C1[];
Class_Descriptor cd_S34C1 = {  "S34C1", // class name
  bases_S34C1, 7,
  &(vtc_S34C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,252), // object size
  NSPAIRA(_ZTI5S34C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S34C1),129, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C7  {
  int s73c7f0;
  __tsi64 s73c7f1;
  void *s73c7f2[4];
  int s73c7f3[2];
  void *s73c7f4;
  ::S3350C4_nt s73c7f5;
  void *s73c7f6[2];
  virtual  ~S73C7(); // _ZN5S73C7D1Ev
  virtual void  v4(); // _ZN5S73C72v4Ev
  virtual void  v5(); // _ZN5S73C72v5Ev
  virtual void  v6(); // _ZN5S73C72v6Ev
  virtual void  v7(); // _ZN5S73C72v7Ev
  virtual void  v8(); // _ZN5S73C72v8Ev
  virtual void  v9(); // _ZN5S73C72v9Ev
  virtual void  v10(); // _ZN5S73C73v10Ev
  virtual void  v11(); // _ZN5S73C73v11Ev
  virtual void  v12(); // _ZN5S73C73v12Ev
  virtual void  v13(); // _ZN5S73C73v13Ev
  virtual void  v14(); // _ZN5S73C73v14Ev
  virtual void  v15(); // _ZN5S73C73v15Ev
  virtual void  v16(); // _ZN5S73C73v16Ev
  virtual void  v17(); // _ZN5S73C73v17Ev
  virtual void  v18(); // _ZN5S73C73v18Ev
  virtual void  v19(); // _ZN5S73C73v19Ev
  virtual void  v20(); // _ZN5S73C73v20Ev
  virtual void  v21(); // _ZN5S73C73v21Ev
  virtual void  v22(); // _ZN5S73C73v22Ev
  virtual void  v23(); // _ZN5S73C73v23Ev
  virtual void  v24(); // _ZN5S73C73v24Ev
  virtual void  v25(); // _ZN5S73C73v25Ev
  virtual void  v26(); // _ZN5S73C73v26Ev
  virtual void  v27(); // _ZN5S73C73v27Ev
  virtual void  v28(); // _ZN5S73C73v28Ev
  virtual void  v29(); // _ZN5S73C73v29Ev
  virtual void  v30(); // _ZN5S73C73v30Ev
  virtual void  v31(); // _ZN5S73C73v31Ev
  virtual void  v32(); // _ZN5S73C73v32Ev
  virtual void  v33(); // _ZN5S73C73v33Ev
  virtual void  v34(); // _ZN5S73C73v34Ev
  virtual void  v35(); // _ZN5S73C73v35Ev
  virtual void  v36(); // _ZN5S73C73v36Ev
  virtual void  v37(); // _ZN5S73C73v37Ev
  virtual void  v38(); // _ZN5S73C73v38Ev
  virtual void  v39(); // _ZN5S73C73v39Ev
  virtual void  v40(); // _ZN5S73C73v40Ev
  virtual void  v41(); // _ZN5S73C73v41Ev
  virtual void  v42(); // _ZN5S73C73v42Ev
  virtual void  v43(); // _ZN5S73C73v43Ev
  virtual void  v44(); // _ZN5S73C73v44Ev
  virtual void  v45(); // _ZN5S73C73v45Ev
  virtual void  v46(); // _ZN5S73C73v46Ev
  virtual void  v47(); // _ZN5S73C73v47Ev
  virtual void  v48(); // _ZN5S73C73v48Ev
  virtual void  v49(); // _ZN5S73C73v49Ev
  virtual void  v50(); // _ZN5S73C73v50Ev
  virtual void  v51(); // _ZN5S73C73v51Ev
  virtual void  v52(); // _ZN5S73C73v52Ev
  virtual void  v53(); // _ZN5S73C73v53Ev
  virtual void  v54(); // _ZN5S73C73v54Ev
  virtual void  v55(); // _ZN5S73C73v55Ev
  virtual void  v56(); // _ZN5S73C73v56Ev
  virtual void  v57(); // _ZN5S73C73v57Ev
  virtual void  v58(); // _ZN5S73C73v58Ev
  virtual void  v59(); // _ZN5S73C73v59Ev
  virtual void  v60(); // _ZN5S73C73v60Ev
  virtual void  v61(); // _ZN5S73C73v61Ev
  virtual void  v62(); // _ZN5S73C73v62Ev
  virtual void  v63(); // _ZN5S73C73v63Ev
  virtual void  v64(); // _ZN5S73C73v64Ev
  virtual void  v65(); // _ZN5S73C73v65Ev
  virtual void  v66(); // _ZN5S73C73v66Ev
  virtual void  v67(); // _ZN5S73C73v67Ev
  S73C7(); // tgen
};
//SIG(-1 S73C7) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S73C7 ::~S73C7(){ note_dtor("S73C7", this);}
void  S73C7 ::v4(){vfunc_called(this, "_ZN5S73C72v4Ev");}
void  S73C7 ::v5(){vfunc_called(this, "_ZN5S73C72v5Ev");}
void  S73C7 ::v6(){vfunc_called(this, "_ZN5S73C72v6Ev");}
void  S73C7 ::v7(){vfunc_called(this, "_ZN5S73C72v7Ev");}
void  S73C7 ::v8(){vfunc_called(this, "_ZN5S73C72v8Ev");}
void  S73C7 ::v9(){vfunc_called(this, "_ZN5S73C72v9Ev");}
void  S73C7 ::v10(){vfunc_called(this, "_ZN5S73C73v10Ev");}
void  S73C7 ::v11(){vfunc_called(this, "_ZN5S73C73v11Ev");}
void  S73C7 ::v12(){vfunc_called(this, "_ZN5S73C73v12Ev");}
void  S73C7 ::v13(){vfunc_called(this, "_ZN5S73C73v13Ev");}
void  S73C7 ::v14(){vfunc_called(this, "_ZN5S73C73v14Ev");}
void  S73C7 ::v15(){vfunc_called(this, "_ZN5S73C73v15Ev");}
void  S73C7 ::v16(){vfunc_called(this, "_ZN5S73C73v16Ev");}
void  S73C7 ::v17(){vfunc_called(this, "_ZN5S73C73v17Ev");}
void  S73C7 ::v18(){vfunc_called(this, "_ZN5S73C73v18Ev");}
void  S73C7 ::v19(){vfunc_called(this, "_ZN5S73C73v19Ev");}
void  S73C7 ::v20(){vfunc_called(this, "_ZN5S73C73v20Ev");}
void  S73C7 ::v21(){vfunc_called(this, "_ZN5S73C73v21Ev");}
void  S73C7 ::v22(){vfunc_called(this, "_ZN5S73C73v22Ev");}
void  S73C7 ::v23(){vfunc_called(this, "_ZN5S73C73v23Ev");}
void  S73C7 ::v24(){vfunc_called(this, "_ZN5S73C73v24Ev");}
void  S73C7 ::v25(){vfunc_called(this, "_ZN5S73C73v25Ev");}
void  S73C7 ::v26(){vfunc_called(this, "_ZN5S73C73v26Ev");}
void  S73C7 ::v27(){vfunc_called(this, "_ZN5S73C73v27Ev");}
void  S73C7 ::v28(){vfunc_called(this, "_ZN5S73C73v28Ev");}
void  S73C7 ::v29(){vfunc_called(this, "_ZN5S73C73v29Ev");}
void  S73C7 ::v30(){vfunc_called(this, "_ZN5S73C73v30Ev");}
void  S73C7 ::v31(){vfunc_called(this, "_ZN5S73C73v31Ev");}
void  S73C7 ::v32(){vfunc_called(this, "_ZN5S73C73v32Ev");}
void  S73C7 ::v33(){vfunc_called(this, "_ZN5S73C73v33Ev");}
void  S73C7 ::v34(){vfunc_called(this, "_ZN5S73C73v34Ev");}
void  S73C7 ::v35(){vfunc_called(this, "_ZN5S73C73v35Ev");}
void  S73C7 ::v36(){vfunc_called(this, "_ZN5S73C73v36Ev");}
void  S73C7 ::v37(){vfunc_called(this, "_ZN5S73C73v37Ev");}
void  S73C7 ::v38(){vfunc_called(this, "_ZN5S73C73v38Ev");}
void  S73C7 ::v39(){vfunc_called(this, "_ZN5S73C73v39Ev");}
void  S73C7 ::v40(){vfunc_called(this, "_ZN5S73C73v40Ev");}
void  S73C7 ::v41(){vfunc_called(this, "_ZN5S73C73v41Ev");}
void  S73C7 ::v42(){vfunc_called(this, "_ZN5S73C73v42Ev");}
void  S73C7 ::v43(){vfunc_called(this, "_ZN5S73C73v43Ev");}
void  S73C7 ::v44(){vfunc_called(this, "_ZN5S73C73v44Ev");}
void  S73C7 ::v45(){vfunc_called(this, "_ZN5S73C73v45Ev");}
void  S73C7 ::v46(){vfunc_called(this, "_ZN5S73C73v46Ev");}
void  S73C7 ::v47(){vfunc_called(this, "_ZN5S73C73v47Ev");}
void  S73C7 ::v48(){vfunc_called(this, "_ZN5S73C73v48Ev");}
void  S73C7 ::v49(){vfunc_called(this, "_ZN5S73C73v49Ev");}
void  S73C7 ::v50(){vfunc_called(this, "_ZN5S73C73v50Ev");}
void  S73C7 ::v51(){vfunc_called(this, "_ZN5S73C73v51Ev");}
void  S73C7 ::v52(){vfunc_called(this, "_ZN5S73C73v52Ev");}
void  S73C7 ::v53(){vfunc_called(this, "_ZN5S73C73v53Ev");}
void  S73C7 ::v54(){vfunc_called(this, "_ZN5S73C73v54Ev");}
void  S73C7 ::v55(){vfunc_called(this, "_ZN5S73C73v55Ev");}
void  S73C7 ::v56(){vfunc_called(this, "_ZN5S73C73v56Ev");}
void  S73C7 ::v57(){vfunc_called(this, "_ZN5S73C73v57Ev");}
void  S73C7 ::v58(){vfunc_called(this, "_ZN5S73C73v58Ev");}
void  S73C7 ::v59(){vfunc_called(this, "_ZN5S73C73v59Ev");}
void  S73C7 ::v60(){vfunc_called(this, "_ZN5S73C73v60Ev");}
void  S73C7 ::v61(){vfunc_called(this, "_ZN5S73C73v61Ev");}
void  S73C7 ::v62(){vfunc_called(this, "_ZN5S73C73v62Ev");}
void  S73C7 ::v63(){vfunc_called(this, "_ZN5S73C73v63Ev");}
void  S73C7 ::v64(){vfunc_called(this, "_ZN5S73C73v64Ev");}
void  S73C7 ::v65(){vfunc_called(this, "_ZN5S73C73v65Ev");}
void  S73C7 ::v66(){vfunc_called(this, "_ZN5S73C73v66Ev");}
void  S73C7 ::v67(){vfunc_called(this, "_ZN5S73C73v67Ev");}
S73C7 ::S73C7(){ note_ctor("S73C7", this);} // tgen

static void Test_S73C7()
{
  extern Class_Descriptor cd_S73C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S73C7, buf);
    S73C7 *dp, &lv = *(dp=new (buf) S73C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S73C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C7)");
    check_field_offset(lv, s73c7f0, ABISELECT(8,4), "S73C7.s73c7f0");
    check_field_offset(lv, s73c7f1, ABISELECT(16,8), "S73C7.s73c7f1");
    check_field_offset(lv, s73c7f2, ABISELECT(24,16), "S73C7.s73c7f2");
    check_field_offset(lv, s73c7f3, ABISELECT(56,32), "S73C7.s73c7f3");
    check_field_offset(lv, s73c7f4, ABISELECT(64,40), "S73C7.s73c7f4");
    check_field_offset(lv, s73c7f5, ABISELECT(72,44), "S73C7.s73c7f5");
    check_field_offset(lv, s73c7f6, ABISELECT(80,52), "S73C7.s73c7f6");
    test_class_info(&lv, &cd_S73C7);
    dp->~S73C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C7(Test_S73C7, "S73C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S73C7C1Ev();
extern void _ZN5S73C7D1Ev();
Name_Map name_map_S73C7[] = {
  NSPAIR(_ZN5S73C7C1Ev),
  NSPAIR(_ZN5S73C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S73C7[];
extern void _ZN5S73C7D1Ev();
extern void _ZN5S73C7D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
static  VTBL_ENTRY vtc_S73C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C7[0]),
  (VTBL_ENTRY)&_ZN5S73C7D1Ev,
  (VTBL_ENTRY)&_ZN5S73C7D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
};
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
Class_Descriptor cd_S73C7 = {  "S73C7", // class name
  0,0,//no base classes
  &(vtc_S73C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S73C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S73C7),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C6  : S73C7 {
  int s73c6f0[2];
  void *s73c6f1;
  int s73c6f2[2];
  ::S287C8_nt s73c6f3;
  ::S287C8_nt s73c6f4;
  ::S2121C38 s73c6f5;
  ::S287C8_nt s73c6f6;
  unsigned int s73c6f7:1;
  unsigned int s73c6f8:1;
  unsigned int s73c6f9:1;
  unsigned int s73c6f10:1;
  unsigned int s73c6f11:1;
  int s73c6f12[2];
  virtual  ~S73C6(); // _ZN5S73C6D1Ev
  virtual void  v68(); // _ZN5S73C63v68Ev
  virtual void  v69(); // _ZN5S73C63v69Ev
  virtual void  v70(); // _ZN5S73C63v70Ev
  virtual void  v71(); // _ZN5S73C63v71Ev
  virtual void  v72(); // _ZN5S73C63v72Ev
  virtual void  v73(); // _ZN5S73C63v73Ev
  virtual void  v74(); // _ZN5S73C63v74Ev
  virtual void  v75(); // _ZN5S73C63v75Ev
  virtual void  v76(); // _ZN5S73C63v76Ev
  virtual void  v77(); // _ZN5S73C63v77Ev
  virtual void  v78(); // _ZN5S73C63v78Ev
  virtual void  v79(); // _ZN5S73C63v79Ev
  virtual void  v80(); // _ZN5S73C63v80Ev
  virtual void  v81(); // _ZN5S73C63v81Ev
  virtual void  v82(); // _ZN5S73C63v82Ev
  virtual void  v83(); // _ZN5S73C63v83Ev
  virtual void  v84(); // _ZN5S73C63v84Ev
  virtual void  v85(); // _ZN5S73C63v85Ev
  virtual void  v86(); // _ZN5S73C63v86Ev
  virtual void  v87(); // _ZN5S73C63v87Ev
  virtual void  v88(); // _ZN5S73C63v88Ev
  virtual void  v89(); // _ZN5S73C63v89Ev
  S73C6(); // tgen
};
//SIG(-1 S73C6) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S73C6 ::~S73C6(){ note_dtor("S73C6", this);}
void  S73C6 ::v68(){vfunc_called(this, "_ZN5S73C63v68Ev");}
void  S73C6 ::v69(){vfunc_called(this, "_ZN5S73C63v69Ev");}
void  S73C6 ::v70(){vfunc_called(this, "_ZN5S73C63v70Ev");}
void  S73C6 ::v71(){vfunc_called(this, "_ZN5S73C63v71Ev");}
void  S73C6 ::v72(){vfunc_called(this, "_ZN5S73C63v72Ev");}
void  S73C6 ::v73(){vfunc_called(this, "_ZN5S73C63v73Ev");}
void  S73C6 ::v74(){vfunc_called(this, "_ZN5S73C63v74Ev");}
void  S73C6 ::v75(){vfunc_called(this, "_ZN5S73C63v75Ev");}
void  S73C6 ::v76(){vfunc_called(this, "_ZN5S73C63v76Ev");}
void  S73C6 ::v77(){vfunc_called(this, "_ZN5S73C63v77Ev");}
void  S73C6 ::v78(){vfunc_called(this, "_ZN5S73C63v78Ev");}
void  S73C6 ::v79(){vfunc_called(this, "_ZN5S73C63v79Ev");}
void  S73C6 ::v80(){vfunc_called(this, "_ZN5S73C63v80Ev");}
void  S73C6 ::v81(){vfunc_called(this, "_ZN5S73C63v81Ev");}
void  S73C6 ::v82(){vfunc_called(this, "_ZN5S73C63v82Ev");}
void  S73C6 ::v83(){vfunc_called(this, "_ZN5S73C63v83Ev");}
void  S73C6 ::v84(){vfunc_called(this, "_ZN5S73C63v84Ev");}
void  S73C6 ::v85(){vfunc_called(this, "_ZN5S73C63v85Ev");}
void  S73C6 ::v86(){vfunc_called(this, "_ZN5S73C63v86Ev");}
void  S73C6 ::v87(){vfunc_called(this, "_ZN5S73C63v87Ev");}
void  S73C6 ::v88(){vfunc_called(this, "_ZN5S73C63v88Ev");}
void  S73C6 ::v89(){vfunc_called(this, "_ZN5S73C63v89Ev");}
S73C6 ::S73C6(){ note_ctor("S73C6", this);} // tgen

static void Test_S73C6()
{
  extern Class_Descriptor cd_S73C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S73C6, buf);
    S73C6 *dp, &lv = *(dp=new (buf) S73C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S73C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C6)");
    check_base_class_offset(lv, (S73C7*), 0, "S73C6");
    check_field_offset(lv, s73c6f0, ABISELECT(96,60), "S73C6.s73c6f0");
    check_field_offset(lv, s73c6f1, ABISELECT(104,68), "S73C6.s73c6f1");
    check_field_offset(lv, s73c6f2, ABISELECT(112,72), "S73C6.s73c6f2");
    check_field_offset(lv, s73c6f3, ABISELECT(120,80), "S73C6.s73c6f3");
    check_field_offset(lv, s73c6f4, ABISELECT(136,92), "S73C6.s73c6f4");
    check_field_offset(lv, s73c6f5, ABISELECT(152,104), "S73C6.s73c6f5");
    check_field_offset(lv, s73c6f6, ABISELECT(160,108), "S73C6.s73c6f6");
    set_bf_and_test(lv, s73c6f7, ABISELECT(176,120), 0, 1, 1, "S73C6");
    set_bf_and_test(lv, s73c6f8, ABISELECT(176,120), 1, 1, 1, "S73C6");
    set_bf_and_test(lv, s73c6f9, ABISELECT(176,120), 2, 1, 1, "S73C6");
    set_bf_and_test(lv, s73c6f10, ABISELECT(176,120), 3, 1, 1, "S73C6");
    set_bf_and_test(lv, s73c6f11, ABISELECT(176,120), 4, 1, 1, "S73C6");
    check_field_offset(lv, s73c6f12, ABISELECT(180,124), "S73C6.s73c6f12");
    test_class_info(&lv, &cd_S73C6);
    dp->~S73C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C6(Test_S73C6, "S73C6", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN5S73C6C1Ev();
extern void _ZN5S73C6D1Ev();
Name_Map name_map_S73C6[] = {
  NSPAIR(_ZN5S73C6C1Ev),
  NSPAIR(_ZN5S73C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
static Base_Class bases_S73C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S73C6[];
extern void _ZN5S73C6D1Ev();
extern void _ZN5S73C6D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
static  VTBL_ENTRY vtc_S73C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C6[0]),
  (VTBL_ENTRY)&_ZN5S73C6D1Ev,
  (VTBL_ENTRY)&_ZN5S73C6D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
};
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
Class_Descriptor cd_S73C6 = {  "S73C6", // class name
  bases_S73C6, 1,
  &(vtc_S73C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI5S73C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C6),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C5  : S73C6 {
  unsigned int s73c5f0:1;
  unsigned int s73c5f1:1;
  unsigned int s73c5f2:1;
  ::S3350C17 s73c5f3;
  ::S3350C11 s73c5f4;
  ::S3350C5_nt s73c5f5;
  ::S287C27 s73c5f6;
  int s73c5f7[3];
  virtual  ~S73C5(); // _ZN5S73C5D1Ev
  virtual void  v90(); // _ZN5S73C53v90Ev
  virtual void  v91(); // _ZN5S73C53v91Ev
  virtual void  v92(); // _ZN5S73C53v92Ev
  virtual void  v93(); // _ZN5S73C53v93Ev
  virtual void  v94(); // _ZN5S73C53v94Ev
  virtual void  v95(); // _ZN5S73C53v95Ev
  virtual void  v96(); // _ZN5S73C53v96Ev
  virtual void  v97(); // _ZN5S73C53v97Ev
  virtual void  v98(); // _ZN5S73C53v98Ev
  virtual void  v99(); // _ZN5S73C53v99Ev
  virtual void  v100(); // _ZN5S73C54v100Ev
  virtual void  v101(); // _ZN5S73C54v101Ev
  virtual void  v102(); // _ZN5S73C54v102Ev
  virtual void  v103(); // _ZN5S73C54v103Ev
  virtual void  v104(); // _ZN5S73C54v104Ev
  virtual void  v105(); // _ZN5S73C54v105Ev
  virtual void  v106(); // _ZN5S73C54v106Ev
  virtual void  v107(); // _ZN5S73C54v107Ev
  virtual void  v108(); // _ZN5S73C54v108Ev
  virtual void  v109(); // _ZN5S73C54v109Ev
  S73C5(); // tgen
};
//SIG(-1 S73C5) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC16{ BC17{ BC8}} Fi[3]}


 S73C5 ::~S73C5(){ note_dtor("S73C5", this);}
void  S73C5 ::v90(){vfunc_called(this, "_ZN5S73C53v90Ev");}
void  S73C5 ::v91(){vfunc_called(this, "_ZN5S73C53v91Ev");}
void  S73C5 ::v92(){vfunc_called(this, "_ZN5S73C53v92Ev");}
void  S73C5 ::v93(){vfunc_called(this, "_ZN5S73C53v93Ev");}
void  S73C5 ::v94(){vfunc_called(this, "_ZN5S73C53v94Ev");}
void  S73C5 ::v95(){vfunc_called(this, "_ZN5S73C53v95Ev");}
void  S73C5 ::v96(){vfunc_called(this, "_ZN5S73C53v96Ev");}
void  S73C5 ::v97(){vfunc_called(this, "_ZN5S73C53v97Ev");}
void  S73C5 ::v98(){vfunc_called(this, "_ZN5S73C53v98Ev");}
void  S73C5 ::v99(){vfunc_called(this, "_ZN5S73C53v99Ev");}
void  S73C5 ::v100(){vfunc_called(this, "_ZN5S73C54v100Ev");}
void  S73C5 ::v101(){vfunc_called(this, "_ZN5S73C54v101Ev");}
void  S73C5 ::v102(){vfunc_called(this, "_ZN5S73C54v102Ev");}
void  S73C5 ::v103(){vfunc_called(this, "_ZN5S73C54v103Ev");}
void  S73C5 ::v104(){vfunc_called(this, "_ZN5S73C54v104Ev");}
void  S73C5 ::v105(){vfunc_called(this, "_ZN5S73C54v105Ev");}
void  S73C5 ::v106(){vfunc_called(this, "_ZN5S73C54v106Ev");}
void  S73C5 ::v107(){vfunc_called(this, "_ZN5S73C54v107Ev");}
void  S73C5 ::v108(){vfunc_called(this, "_ZN5S73C54v108Ev");}
void  S73C5 ::v109(){vfunc_called(this, "_ZN5S73C54v109Ev");}
S73C5 ::S73C5(){ note_ctor("S73C5", this);} // tgen

static void Test_S73C5()
{
  extern Class_Descriptor cd_S73C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S73C5, buf);
    S73C5 *dp, &lv = *(dp=new (buf) S73C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S73C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C5)");
    check_base_class_offset(lv, (S73C7*)(S73C6*), 0, "S73C5");
    check_base_class_offset(lv, (S73C6*), 0, "S73C5");
    set_bf_and_test(lv, s73c5f0, ABISELECT(188,132), 0, 1, 1, "S73C5");
    set_bf_and_test(lv, s73c5f1, ABISELECT(188,132), 1, 1, 1, "S73C5");
    set_bf_and_test(lv, s73c5f2, ABISELECT(188,132), 2, 1, 1, "S73C5");
    check_field_offset(lv, s73c5f3, ABISELECT(192,136), "S73C5.s73c5f3");
    check_field_offset(lv, s73c5f4, ABISELECT(208,148), "S73C5.s73c5f4");
    check_field_offset(lv, s73c5f5, ABISELECT(224,160), "S73C5.s73c5f5");
    check_field_offset(lv, s73c5f6, ABISELECT(240,172), "S73C5.s73c5f6");
    check_field_offset(lv, s73c5f7, ABISELECT(256,184), "S73C5.s73c5f7");
    test_class_info(&lv, &cd_S73C5);
    dp->~S73C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C5(Test_S73C5, "S73C5", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN5S73C5C1Ev();
extern void _ZN5S73C5D1Ev();
Name_Map name_map_S73C5[] = {
  NSPAIR(_ZN5S73C5C1Ev),
  NSPAIR(_ZN5S73C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
static Base_Class bases_S73C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S73C5[];
extern void _ZN5S73C5D1Ev();
extern void _ZN5S73C5D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
static  VTBL_ENTRY vtc_S73C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C5[0]),
  (VTBL_ENTRY)&_ZN5S73C5D1Ev,
  (VTBL_ENTRY)&_ZN5S73C5D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
};
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
Class_Descriptor cd_S73C5 = {  "S73C5", // class name
  bases_S73C5, 2,
  &(vtc_S73C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI5S73C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C5),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C4  : S73C5 {
  ::S3350C4_nt s73c4f0;
  unsigned int s73c4f1:1;
  ::S287C23 s73c4f2;
  virtual  ~S73C4(); // _ZN5S73C4D1Ev
  virtual void  v110(); // _ZN5S73C44v110Ev
  virtual void  v111(); // _ZN5S73C44v111Ev
  virtual void  v112(); // _ZN5S73C44v112Ev
  virtual void  v113(); // _ZN5S73C44v113Ev
  S73C4(); // tgen
};
//SIG(-1 S73C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC17{ BC18{ BC9}} Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC19{ BC20{ BC9}}}


 S73C4 ::~S73C4(){ note_dtor("S73C4", this);}
void  S73C4 ::v110(){vfunc_called(this, "_ZN5S73C44v110Ev");}
void  S73C4 ::v111(){vfunc_called(this, "_ZN5S73C44v111Ev");}
void  S73C4 ::v112(){vfunc_called(this, "_ZN5S73C44v112Ev");}
void  S73C4 ::v113(){vfunc_called(this, "_ZN5S73C44v113Ev");}
S73C4 ::S73C4(){ note_ctor("S73C4", this);} // tgen

static void Test_S73C4()
{
  extern Class_Descriptor cd_S73C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S73C4, buf);
    S73C4 *dp, &lv = *(dp=new (buf) S73C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S73C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C4)");
    check_base_class_offset(lv, (S73C7*)(S73C6*)(S73C5*), 0, "S73C4");
    check_base_class_offset(lv, (S73C6*)(S73C5*), 0, "S73C4");
    check_base_class_offset(lv, (S73C5*), 0, "S73C4");
    check_field_offset(lv, s73c4f0, ABISELECT(268,196), "S73C4.s73c4f0");
    set_bf_and_test(lv, s73c4f1, ABISELECT(276,204), 0, 1, 1, "S73C4");
    check_field_offset(lv, s73c4f2, ABISELECT(280,208), "S73C4.s73c4f2");
    test_class_info(&lv, &cd_S73C4);
    dp->~S73C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C4(Test_S73C4, "S73C4", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN5S73C4C1Ev();
extern void _ZN5S73C4D1Ev();
Name_Map name_map_S73C4[] = {
  NSPAIR(_ZN5S73C4C1Ev),
  NSPAIR(_ZN5S73C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
extern Class_Descriptor cd_S73C5;
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
static Base_Class bases_S73C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S73C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S73C4[];
extern void _ZN5S73C4D1Ev();
extern void _ZN5S73C4D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
extern void _ZN5S73C44v110Ev();
extern void _ZN5S73C44v111Ev();
extern void _ZN5S73C44v112Ev();
extern void _ZN5S73C44v113Ev();
static  VTBL_ENTRY vtc_S73C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C4[0]),
  (VTBL_ENTRY)&_ZN5S73C4D1Ev,
  (VTBL_ENTRY)&_ZN5S73C4D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
  (VTBL_ENTRY)&_ZN5S73C44v110Ev,
  (VTBL_ENTRY)&_ZN5S73C44v111Ev,
  (VTBL_ENTRY)&_ZN5S73C44v112Ev,
  (VTBL_ENTRY)&_ZN5S73C44v113Ev,
};
extern VTBL_ENTRY _ZTI5S73C4[];
extern  VTBL_ENTRY _ZTV5S73C4[];
Class_Descriptor cd_S73C4 = {  "S73C4", // class name
  bases_S73C4, 3,
  &(vtc_S73C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI5S73C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C4),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C3  : S73C4 {
  int s73c3f0;
  unsigned int s73c3f1:1;
  virtual  ~S73C3(); // _ZN5S73C3D1Ev
  virtual void  v114(); // _ZN5S73C34v114Ev
  virtual void  v115(); // _ZN5S73C34v115Ev
  virtual void  v116(); // _ZN5S73C34v116Ev
  virtual void  v117(); // _ZN5S73C34v117Ev
  virtual void  v118(); // _ZN5S73C34v118Ev
  virtual void  v119(); // _ZN5S73C34v119Ev
  virtual void  v120(); // _ZN5S73C34v120Ev
  virtual void  v121(); // _ZN5S73C34v121Ev
  S73C3(); // tgen
};
//SIG(-1 S73C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S73C3 ::~S73C3(){ note_dtor("S73C3", this);}
void  S73C3 ::v114(){vfunc_called(this, "_ZN5S73C34v114Ev");}
void  S73C3 ::v115(){vfunc_called(this, "_ZN5S73C34v115Ev");}
void  S73C3 ::v116(){vfunc_called(this, "_ZN5S73C34v116Ev");}
void  S73C3 ::v117(){vfunc_called(this, "_ZN5S73C34v117Ev");}
void  S73C3 ::v118(){vfunc_called(this, "_ZN5S73C34v118Ev");}
void  S73C3 ::v119(){vfunc_called(this, "_ZN5S73C34v119Ev");}
void  S73C3 ::v120(){vfunc_called(this, "_ZN5S73C34v120Ev");}
void  S73C3 ::v121(){vfunc_called(this, "_ZN5S73C34v121Ev");}
S73C3 ::S73C3(){ note_ctor("S73C3", this);} // tgen

static void Test_S73C3()
{
  extern Class_Descriptor cd_S73C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S73C3, buf);
    S73C3 *dp, &lv = *(dp=new (buf) S73C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S73C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C3)");
    check_base_class_offset(lv, (S73C7*)(S73C6*)(S73C5*)(S73C4*), 0, "S73C3");
    check_base_class_offset(lv, (S73C6*)(S73C5*)(S73C4*), 0, "S73C3");
    check_base_class_offset(lv, (S73C5*)(S73C4*), 0, "S73C3");
    check_base_class_offset(lv, (S73C4*), 0, "S73C3");
    check_field_offset(lv, s73c3f0, ABISELECT(296,220), "S73C3.s73c3f0");
    set_bf_and_test(lv, s73c3f1, ABISELECT(300,224), 0, 1, 1, "S73C3");
    test_class_info(&lv, &cd_S73C3);
    dp->~S73C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C3(Test_S73C3, "S73C3", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN5S73C3C1Ev();
extern void _ZN5S73C3D1Ev();
Name_Map name_map_S73C3[] = {
  NSPAIR(_ZN5S73C3C1Ev),
  NSPAIR(_ZN5S73C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
extern Class_Descriptor cd_S73C5;
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
extern Class_Descriptor cd_S73C4;
extern VTBL_ENTRY _ZTI5S73C4[];
extern  VTBL_ENTRY _ZTV5S73C4[];
static Base_Class bases_S73C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S73C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S73C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S73C3[];
extern void _ZN5S73C3D1Ev();
extern void _ZN5S73C3D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
extern void _ZN5S73C44v110Ev();
extern void _ZN5S73C44v111Ev();
extern void _ZN5S73C44v112Ev();
extern void _ZN5S73C44v113Ev();
extern void _ZN5S73C34v114Ev();
extern void _ZN5S73C34v115Ev();
extern void _ZN5S73C34v116Ev();
extern void _ZN5S73C34v117Ev();
extern void _ZN5S73C34v118Ev();
extern void _ZN5S73C34v119Ev();
extern void _ZN5S73C34v120Ev();
extern void _ZN5S73C34v121Ev();
static  VTBL_ENTRY vtc_S73C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C3[0]),
  (VTBL_ENTRY)&_ZN5S73C3D1Ev,
  (VTBL_ENTRY)&_ZN5S73C3D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
  (VTBL_ENTRY)&_ZN5S73C44v110Ev,
  (VTBL_ENTRY)&_ZN5S73C44v111Ev,
  (VTBL_ENTRY)&_ZN5S73C44v112Ev,
  (VTBL_ENTRY)&_ZN5S73C44v113Ev,
  (VTBL_ENTRY)&_ZN5S73C34v114Ev,
  (VTBL_ENTRY)&_ZN5S73C34v115Ev,
  (VTBL_ENTRY)&_ZN5S73C34v116Ev,
  (VTBL_ENTRY)&_ZN5S73C34v117Ev,
  (VTBL_ENTRY)&_ZN5S73C34v118Ev,
  (VTBL_ENTRY)&_ZN5S73C34v119Ev,
  (VTBL_ENTRY)&_ZN5S73C34v120Ev,
  (VTBL_ENTRY)&_ZN5S73C34v121Ev,
};
extern VTBL_ENTRY _ZTI5S73C3[];
extern  VTBL_ENTRY _ZTV5S73C3[];
Class_Descriptor cd_S73C3 = {  "S73C3", // class name
  bases_S73C3, 4,
  &(vtc_S73C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI5S73C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C3),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C2  : S73C3 {
  int s73c2f0;
  virtual  ~S73C2(); // _ZN5S73C2D1Ev
  virtual void  v122(); // _ZN5S73C24v122Ev
  virtual void  v123(); // _ZN5S73C24v123Ev
  S73C2(); // tgen
};
//SIG(-1 S73C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v109 v110 v111 v112 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v113 v114 v115 v116 v117 v118 v119 v120 Fi Fi:1} vd v1 v2 Fi}


 S73C2 ::~S73C2(){ note_dtor("S73C2", this);}
void  S73C2 ::v122(){vfunc_called(this, "_ZN5S73C24v122Ev");}
void  S73C2 ::v123(){vfunc_called(this, "_ZN5S73C24v123Ev");}
S73C2 ::S73C2(){ note_ctor("S73C2", this);} // tgen

static void Test_S73C2()
{
  extern Class_Descriptor cd_S73C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S73C2, buf);
    S73C2 *dp, &lv = *(dp=new (buf) S73C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S73C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C2)");
    check_base_class_offset(lv, (S73C7*)(S73C6*)(S73C5*)(S73C4*)(S73C3*), 0, "S73C2");
    check_base_class_offset(lv, (S73C6*)(S73C5*)(S73C4*)(S73C3*), 0, "S73C2");
    check_base_class_offset(lv, (S73C5*)(S73C4*)(S73C3*), 0, "S73C2");
    check_base_class_offset(lv, (S73C4*)(S73C3*), 0, "S73C2");
    check_base_class_offset(lv, (S73C3*), 0, "S73C2");
    check_field_offset(lv, s73c2f0, ABISELECT(304,228), "S73C2.s73c2f0");
    test_class_info(&lv, &cd_S73C2);
    dp->~S73C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C2(Test_S73C2, "S73C2", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S73C2C1Ev();
extern void _ZN5S73C2D1Ev();
Name_Map name_map_S73C2[] = {
  NSPAIR(_ZN5S73C2C1Ev),
  NSPAIR(_ZN5S73C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
extern Class_Descriptor cd_S73C5;
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
extern Class_Descriptor cd_S73C4;
extern VTBL_ENTRY _ZTI5S73C4[];
extern  VTBL_ENTRY _ZTV5S73C4[];
extern Class_Descriptor cd_S73C3;
extern VTBL_ENTRY _ZTI5S73C3[];
extern  VTBL_ENTRY _ZTV5S73C3[];
static Base_Class bases_S73C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S73C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S73C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S73C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S73C2[];
extern void _ZN5S73C2D1Ev();
extern void _ZN5S73C2D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
extern void _ZN5S73C44v110Ev();
extern void _ZN5S73C44v111Ev();
extern void _ZN5S73C44v112Ev();
extern void _ZN5S73C44v113Ev();
extern void _ZN5S73C34v114Ev();
extern void _ZN5S73C34v115Ev();
extern void _ZN5S73C34v116Ev();
extern void _ZN5S73C34v117Ev();
extern void _ZN5S73C34v118Ev();
extern void _ZN5S73C34v119Ev();
extern void _ZN5S73C34v120Ev();
extern void _ZN5S73C34v121Ev();
extern void _ZN5S73C24v122Ev();
extern void _ZN5S73C24v123Ev();
static  VTBL_ENTRY vtc_S73C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C2[0]),
  (VTBL_ENTRY)&_ZN5S73C2D1Ev,
  (VTBL_ENTRY)&_ZN5S73C2D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
  (VTBL_ENTRY)&_ZN5S73C44v110Ev,
  (VTBL_ENTRY)&_ZN5S73C44v111Ev,
  (VTBL_ENTRY)&_ZN5S73C44v112Ev,
  (VTBL_ENTRY)&_ZN5S73C44v113Ev,
  (VTBL_ENTRY)&_ZN5S73C34v114Ev,
  (VTBL_ENTRY)&_ZN5S73C34v115Ev,
  (VTBL_ENTRY)&_ZN5S73C34v116Ev,
  (VTBL_ENTRY)&_ZN5S73C34v117Ev,
  (VTBL_ENTRY)&_ZN5S73C34v118Ev,
  (VTBL_ENTRY)&_ZN5S73C34v119Ev,
  (VTBL_ENTRY)&_ZN5S73C34v120Ev,
  (VTBL_ENTRY)&_ZN5S73C34v121Ev,
  (VTBL_ENTRY)&_ZN5S73C24v122Ev,
  (VTBL_ENTRY)&_ZN5S73C24v123Ev,
};
extern VTBL_ENTRY _ZTI5S73C2[];
extern  VTBL_ENTRY _ZTV5S73C2[];
Class_Descriptor cd_S73C2 = {  "S73C2", // class name
  bases_S73C2, 5,
  &(vtc_S73C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S73C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C2),124, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S73C1  : S73C2 {
  virtual  ~S73C1(); // _ZN5S73C1D1Ev
  virtual void  v1(); // _ZN5S73C12v1Ev
  virtual void  v2(); // _ZN5S73C12v2Ev
  virtual void  v3(); // _ZN5S73C12v3Ev
  S73C1(); // tgen
};
//SIG(1 S73C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC9{ BC10{ BC11{ BC12{ m Fp Fi[2]}}}} FC9 FC13{ m} FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC14{ BC15{ BC12}} FC16{ BC17{ BC12}} FC18{ BC19{ BC12}} FC20{ BC21{ BC12}} Fi[3]} vd v110 v111 v112 v113 FC8 Fi:1 FC22{ BC23{ BC12}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v122 v123 Fi} vd v1 v2 v3}


 S73C1 ::~S73C1(){ note_dtor("S73C1", this);}
void  S73C1 ::v1(){vfunc_called(this, "_ZN5S73C12v1Ev");}
void  S73C1 ::v2(){vfunc_called(this, "_ZN5S73C12v2Ev");}
void  S73C1 ::v3(){vfunc_called(this, "_ZN5S73C12v3Ev");}
S73C1 ::S73C1(){ note_ctor("S73C1", this);} // tgen

static void Test_S73C1()
{
  extern Class_Descriptor cd_S73C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S73C1, buf);
    S73C1 *dp, &lv = *(dp=new (buf) S73C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S73C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S73C1)");
    check_base_class_offset(lv, (S73C7*)(S73C6*)(S73C5*)(S73C4*)(S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C6*)(S73C5*)(S73C4*)(S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C5*)(S73C4*)(S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C4*)(S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C3*)(S73C2*), 0, "S73C1");
    check_base_class_offset(lv, (S73C2*), 0, "S73C1");
    test_class_info(&lv, &cd_S73C1);
    dp->~S73C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS73C1(Test_S73C1, "S73C1", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN5S73C1C1Ev();
extern void _ZN5S73C1D1Ev();
Name_Map name_map_S73C1[] = {
  NSPAIR(_ZN5S73C1C1Ev),
  NSPAIR(_ZN5S73C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S73C7;
extern VTBL_ENTRY _ZTI5S73C7[];
extern  VTBL_ENTRY _ZTV5S73C7[];
extern Class_Descriptor cd_S73C6;
extern VTBL_ENTRY _ZTI5S73C6[];
extern  VTBL_ENTRY _ZTV5S73C6[];
extern Class_Descriptor cd_S73C5;
extern VTBL_ENTRY _ZTI5S73C5[];
extern  VTBL_ENTRY _ZTV5S73C5[];
extern Class_Descriptor cd_S73C4;
extern VTBL_ENTRY _ZTI5S73C4[];
extern  VTBL_ENTRY _ZTV5S73C4[];
extern Class_Descriptor cd_S73C3;
extern VTBL_ENTRY _ZTI5S73C3[];
extern  VTBL_ENTRY _ZTV5S73C3[];
extern Class_Descriptor cd_S73C2;
extern VTBL_ENTRY _ZTI5S73C2[];
extern  VTBL_ENTRY _ZTV5S73C2[];
static Base_Class bases_S73C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S73C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S73C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S73C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S73C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S73C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S73C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S73C1[];
extern void _ZN5S73C1D1Ev();
extern void _ZN5S73C1D0Ev();
extern void _ZN5S73C72v4Ev();
extern void _ZN5S73C72v5Ev();
extern void _ZN5S73C72v6Ev();
extern void _ZN5S73C72v7Ev();
extern void _ZN5S73C72v8Ev();
extern void _ZN5S73C72v9Ev();
extern void _ZN5S73C73v10Ev();
extern void _ZN5S73C73v11Ev();
extern void _ZN5S73C73v12Ev();
extern void _ZN5S73C73v13Ev();
extern void _ZN5S73C73v14Ev();
extern void _ZN5S73C73v15Ev();
extern void _ZN5S73C73v16Ev();
extern void _ZN5S73C73v17Ev();
extern void _ZN5S73C73v18Ev();
extern void _ZN5S73C73v19Ev();
extern void _ZN5S73C73v20Ev();
extern void _ZN5S73C73v21Ev();
extern void _ZN5S73C73v22Ev();
extern void _ZN5S73C73v23Ev();
extern void _ZN5S73C73v24Ev();
extern void _ZN5S73C73v25Ev();
extern void _ZN5S73C73v26Ev();
extern void _ZN5S73C73v27Ev();
extern void _ZN5S73C73v28Ev();
extern void _ZN5S73C73v29Ev();
extern void _ZN5S73C73v30Ev();
extern void _ZN5S73C73v31Ev();
extern void _ZN5S73C73v32Ev();
extern void _ZN5S73C73v33Ev();
extern void _ZN5S73C73v34Ev();
extern void _ZN5S73C73v35Ev();
extern void _ZN5S73C73v36Ev();
extern void _ZN5S73C73v37Ev();
extern void _ZN5S73C73v38Ev();
extern void _ZN5S73C73v39Ev();
extern void _ZN5S73C73v40Ev();
extern void _ZN5S73C73v41Ev();
extern void _ZN5S73C73v42Ev();
extern void _ZN5S73C73v43Ev();
extern void _ZN5S73C73v44Ev();
extern void _ZN5S73C73v45Ev();
extern void _ZN5S73C73v46Ev();
extern void _ZN5S73C73v47Ev();
extern void _ZN5S73C73v48Ev();
extern void _ZN5S73C73v49Ev();
extern void _ZN5S73C73v50Ev();
extern void _ZN5S73C73v51Ev();
extern void _ZN5S73C73v52Ev();
extern void _ZN5S73C73v53Ev();
extern void _ZN5S73C73v54Ev();
extern void _ZN5S73C73v55Ev();
extern void _ZN5S73C73v56Ev();
extern void _ZN5S73C73v57Ev();
extern void _ZN5S73C73v58Ev();
extern void _ZN5S73C73v59Ev();
extern void _ZN5S73C73v60Ev();
extern void _ZN5S73C73v61Ev();
extern void _ZN5S73C73v62Ev();
extern void _ZN5S73C73v63Ev();
extern void _ZN5S73C73v64Ev();
extern void _ZN5S73C73v65Ev();
extern void _ZN5S73C73v66Ev();
extern void _ZN5S73C73v67Ev();
extern void _ZN5S73C63v68Ev();
extern void _ZN5S73C63v69Ev();
extern void _ZN5S73C63v70Ev();
extern void _ZN5S73C63v71Ev();
extern void _ZN5S73C63v72Ev();
extern void _ZN5S73C63v73Ev();
extern void _ZN5S73C63v74Ev();
extern void _ZN5S73C63v75Ev();
extern void _ZN5S73C63v76Ev();
extern void _ZN5S73C63v77Ev();
extern void _ZN5S73C63v78Ev();
extern void _ZN5S73C63v79Ev();
extern void _ZN5S73C63v80Ev();
extern void _ZN5S73C63v81Ev();
extern void _ZN5S73C63v82Ev();
extern void _ZN5S73C63v83Ev();
extern void _ZN5S73C63v84Ev();
extern void _ZN5S73C63v85Ev();
extern void _ZN5S73C63v86Ev();
extern void _ZN5S73C63v87Ev();
extern void _ZN5S73C63v88Ev();
extern void _ZN5S73C63v89Ev();
extern void _ZN5S73C53v90Ev();
extern void _ZN5S73C53v91Ev();
extern void _ZN5S73C53v92Ev();
extern void _ZN5S73C53v93Ev();
extern void _ZN5S73C53v94Ev();
extern void _ZN5S73C53v95Ev();
extern void _ZN5S73C53v96Ev();
extern void _ZN5S73C53v97Ev();
extern void _ZN5S73C53v98Ev();
extern void _ZN5S73C53v99Ev();
extern void _ZN5S73C54v100Ev();
extern void _ZN5S73C54v101Ev();
extern void _ZN5S73C54v102Ev();
extern void _ZN5S73C54v103Ev();
extern void _ZN5S73C54v104Ev();
extern void _ZN5S73C54v105Ev();
extern void _ZN5S73C54v106Ev();
extern void _ZN5S73C54v107Ev();
extern void _ZN5S73C54v108Ev();
extern void _ZN5S73C54v109Ev();
extern void _ZN5S73C44v110Ev();
extern void _ZN5S73C44v111Ev();
extern void _ZN5S73C44v112Ev();
extern void _ZN5S73C44v113Ev();
extern void _ZN5S73C34v114Ev();
extern void _ZN5S73C34v115Ev();
extern void _ZN5S73C34v116Ev();
extern void _ZN5S73C34v117Ev();
extern void _ZN5S73C34v118Ev();
extern void _ZN5S73C34v119Ev();
extern void _ZN5S73C34v120Ev();
extern void _ZN5S73C34v121Ev();
extern void _ZN5S73C24v122Ev();
extern void _ZN5S73C24v123Ev();
extern void _ZN5S73C12v1Ev();
extern void _ZN5S73C12v2Ev();
extern void _ZN5S73C12v3Ev();
static  VTBL_ENTRY vtc_S73C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S73C1[0]),
  (VTBL_ENTRY)&_ZN5S73C1D1Ev,
  (VTBL_ENTRY)&_ZN5S73C1D0Ev,
  (VTBL_ENTRY)&_ZN5S73C72v4Ev,
  (VTBL_ENTRY)&_ZN5S73C72v5Ev,
  (VTBL_ENTRY)&_ZN5S73C72v6Ev,
  (VTBL_ENTRY)&_ZN5S73C72v7Ev,
  (VTBL_ENTRY)&_ZN5S73C72v8Ev,
  (VTBL_ENTRY)&_ZN5S73C72v9Ev,
  (VTBL_ENTRY)&_ZN5S73C73v10Ev,
  (VTBL_ENTRY)&_ZN5S73C73v11Ev,
  (VTBL_ENTRY)&_ZN5S73C73v12Ev,
  (VTBL_ENTRY)&_ZN5S73C73v13Ev,
  (VTBL_ENTRY)&_ZN5S73C73v14Ev,
  (VTBL_ENTRY)&_ZN5S73C73v15Ev,
  (VTBL_ENTRY)&_ZN5S73C73v16Ev,
  (VTBL_ENTRY)&_ZN5S73C73v17Ev,
  (VTBL_ENTRY)&_ZN5S73C73v18Ev,
  (VTBL_ENTRY)&_ZN5S73C73v19Ev,
  (VTBL_ENTRY)&_ZN5S73C73v20Ev,
  (VTBL_ENTRY)&_ZN5S73C73v21Ev,
  (VTBL_ENTRY)&_ZN5S73C73v22Ev,
  (VTBL_ENTRY)&_ZN5S73C73v23Ev,
  (VTBL_ENTRY)&_ZN5S73C73v24Ev,
  (VTBL_ENTRY)&_ZN5S73C73v25Ev,
  (VTBL_ENTRY)&_ZN5S73C73v26Ev,
  (VTBL_ENTRY)&_ZN5S73C73v27Ev,
  (VTBL_ENTRY)&_ZN5S73C73v28Ev,
  (VTBL_ENTRY)&_ZN5S73C73v29Ev,
  (VTBL_ENTRY)&_ZN5S73C73v30Ev,
  (VTBL_ENTRY)&_ZN5S73C73v31Ev,
  (VTBL_ENTRY)&_ZN5S73C73v32Ev,
  (VTBL_ENTRY)&_ZN5S73C73v33Ev,
  (VTBL_ENTRY)&_ZN5S73C73v34Ev,
  (VTBL_ENTRY)&_ZN5S73C73v35Ev,
  (VTBL_ENTRY)&_ZN5S73C73v36Ev,
  (VTBL_ENTRY)&_ZN5S73C73v37Ev,
  (VTBL_ENTRY)&_ZN5S73C73v38Ev,
  (VTBL_ENTRY)&_ZN5S73C73v39Ev,
  (VTBL_ENTRY)&_ZN5S73C73v40Ev,
  (VTBL_ENTRY)&_ZN5S73C73v41Ev,
  (VTBL_ENTRY)&_ZN5S73C73v42Ev,
  (VTBL_ENTRY)&_ZN5S73C73v43Ev,
  (VTBL_ENTRY)&_ZN5S73C73v44Ev,
  (VTBL_ENTRY)&_ZN5S73C73v45Ev,
  (VTBL_ENTRY)&_ZN5S73C73v46Ev,
  (VTBL_ENTRY)&_ZN5S73C73v47Ev,
  (VTBL_ENTRY)&_ZN5S73C73v48Ev,
  (VTBL_ENTRY)&_ZN5S73C73v49Ev,
  (VTBL_ENTRY)&_ZN5S73C73v50Ev,
  (VTBL_ENTRY)&_ZN5S73C73v51Ev,
  (VTBL_ENTRY)&_ZN5S73C73v52Ev,
  (VTBL_ENTRY)&_ZN5S73C73v53Ev,
  (VTBL_ENTRY)&_ZN5S73C73v54Ev,
  (VTBL_ENTRY)&_ZN5S73C73v55Ev,
  (VTBL_ENTRY)&_ZN5S73C73v56Ev,
  (VTBL_ENTRY)&_ZN5S73C73v57Ev,
  (VTBL_ENTRY)&_ZN5S73C73v58Ev,
  (VTBL_ENTRY)&_ZN5S73C73v59Ev,
  (VTBL_ENTRY)&_ZN5S73C73v60Ev,
  (VTBL_ENTRY)&_ZN5S73C73v61Ev,
  (VTBL_ENTRY)&_ZN5S73C73v62Ev,
  (VTBL_ENTRY)&_ZN5S73C73v63Ev,
  (VTBL_ENTRY)&_ZN5S73C73v64Ev,
  (VTBL_ENTRY)&_ZN5S73C73v65Ev,
  (VTBL_ENTRY)&_ZN5S73C73v66Ev,
  (VTBL_ENTRY)&_ZN5S73C73v67Ev,
  (VTBL_ENTRY)&_ZN5S73C63v68Ev,
  (VTBL_ENTRY)&_ZN5S73C63v69Ev,
  (VTBL_ENTRY)&_ZN5S73C63v70Ev,
  (VTBL_ENTRY)&_ZN5S73C63v71Ev,
  (VTBL_ENTRY)&_ZN5S73C63v72Ev,
  (VTBL_ENTRY)&_ZN5S73C63v73Ev,
  (VTBL_ENTRY)&_ZN5S73C63v74Ev,
  (VTBL_ENTRY)&_ZN5S73C63v75Ev,
  (VTBL_ENTRY)&_ZN5S73C63v76Ev,
  (VTBL_ENTRY)&_ZN5S73C63v77Ev,
  (VTBL_ENTRY)&_ZN5S73C63v78Ev,
  (VTBL_ENTRY)&_ZN5S73C63v79Ev,
  (VTBL_ENTRY)&_ZN5S73C63v80Ev,
  (VTBL_ENTRY)&_ZN5S73C63v81Ev,
  (VTBL_ENTRY)&_ZN5S73C63v82Ev,
  (VTBL_ENTRY)&_ZN5S73C63v83Ev,
  (VTBL_ENTRY)&_ZN5S73C63v84Ev,
  (VTBL_ENTRY)&_ZN5S73C63v85Ev,
  (VTBL_ENTRY)&_ZN5S73C63v86Ev,
  (VTBL_ENTRY)&_ZN5S73C63v87Ev,
  (VTBL_ENTRY)&_ZN5S73C63v88Ev,
  (VTBL_ENTRY)&_ZN5S73C63v89Ev,
  (VTBL_ENTRY)&_ZN5S73C53v90Ev,
  (VTBL_ENTRY)&_ZN5S73C53v91Ev,
  (VTBL_ENTRY)&_ZN5S73C53v92Ev,
  (VTBL_ENTRY)&_ZN5S73C53v93Ev,
  (VTBL_ENTRY)&_ZN5S73C53v94Ev,
  (VTBL_ENTRY)&_ZN5S73C53v95Ev,
  (VTBL_ENTRY)&_ZN5S73C53v96Ev,
  (VTBL_ENTRY)&_ZN5S73C53v97Ev,
  (VTBL_ENTRY)&_ZN5S73C53v98Ev,
  (VTBL_ENTRY)&_ZN5S73C53v99Ev,
  (VTBL_ENTRY)&_ZN5S73C54v100Ev,
  (VTBL_ENTRY)&_ZN5S73C54v101Ev,
  (VTBL_ENTRY)&_ZN5S73C54v102Ev,
  (VTBL_ENTRY)&_ZN5S73C54v103Ev,
  (VTBL_ENTRY)&_ZN5S73C54v104Ev,
  (VTBL_ENTRY)&_ZN5S73C54v105Ev,
  (VTBL_ENTRY)&_ZN5S73C54v106Ev,
  (VTBL_ENTRY)&_ZN5S73C54v107Ev,
  (VTBL_ENTRY)&_ZN5S73C54v108Ev,
  (VTBL_ENTRY)&_ZN5S73C54v109Ev,
  (VTBL_ENTRY)&_ZN5S73C44v110Ev,
  (VTBL_ENTRY)&_ZN5S73C44v111Ev,
  (VTBL_ENTRY)&_ZN5S73C44v112Ev,
  (VTBL_ENTRY)&_ZN5S73C44v113Ev,
  (VTBL_ENTRY)&_ZN5S73C34v114Ev,
  (VTBL_ENTRY)&_ZN5S73C34v115Ev,
  (VTBL_ENTRY)&_ZN5S73C34v116Ev,
  (VTBL_ENTRY)&_ZN5S73C34v117Ev,
  (VTBL_ENTRY)&_ZN5S73C34v118Ev,
  (VTBL_ENTRY)&_ZN5S73C34v119Ev,
  (VTBL_ENTRY)&_ZN5S73C34v120Ev,
  (VTBL_ENTRY)&_ZN5S73C34v121Ev,
  (VTBL_ENTRY)&_ZN5S73C24v122Ev,
  (VTBL_ENTRY)&_ZN5S73C24v123Ev,
  (VTBL_ENTRY)&_ZN5S73C12v1Ev,
  (VTBL_ENTRY)&_ZN5S73C12v2Ev,
  (VTBL_ENTRY)&_ZN5S73C12v3Ev,
};
extern VTBL_ENTRY _ZTI5S73C1[];
extern  VTBL_ENTRY _ZTV5S73C1[];
Class_Descriptor cd_S73C1 = {  "S73C1", // class name
  bases_S73C1, 6,
  &(vtc_S73C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI5S73C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S73C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C3_nt  {
  int s17460c3f0[3];
  void  mf17460c3(); // _ZN11S17460C3_nt9mf17460c3Ev
};
//SIG(-1 S17460C3_nt) C1{ m Fi[3]}


void  S17460C3_nt ::mf17460c3(){}

//skip512 S17460C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C15_nt  {
  int s17460c15f0[4];
  void  mf17460c15(); // _ZN12S17460C15_nt10mf17460c15Ev
};
//SIG(-1 S17460C15_nt) C1{ m Fi[4]}


void  S17460C15_nt ::mf17460c15(){}

//skip512 S17460C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C14_nt  {
  void *s17460c14f0;
  ::S17460C15_nt s17460c14f1;
  void  mf17460c14(); // _ZN12S17460C14_nt10mf17460c14Ev
};
//SIG(-1 S17460C14_nt) C1{ m Fp FC2{ m Fi[4]}}


void  S17460C14_nt ::mf17460c14(){}

//skip512 S17460C14_nt

#else // __cplusplus

Class_Descriptor cd_S17460C14_nt = {  "S17460C14_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,20), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C13  : S17460C14_nt {
  int s17460c13f0[2];
};
//SIG(-1 S17460C13) C1{ BC2{ m Fp FC3{ m Fi[4]}} Fi[2]}



static void Test_S17460C13()
{
  extern Class_Descriptor cd_S17460C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S17460C13, buf);
    S17460C13 &lv = *(new (buf) S17460C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S17460C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17460C13)");
    check_base_class_offset(lv, (S17460C14_nt*), 0, "S17460C13");
    check_field_offset(lv, s17460c13f0, ABISELECT(24,20), "S17460C13.s17460c13f0");
    test_class_info(&lv, &cd_S17460C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS17460C13(Test_S17460C13, "S17460C13", ABISELECT(32,28));

#else // __cplusplus

extern Class_Descriptor cd_S17460C14_nt;
static Base_Class bases_S17460C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17460C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S17460C13 = {  "S17460C13", // class name
  bases_S17460C13, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17460C1  {
  void *s17460c1f0;
  char s17460c1f1[2];
  ::S3350C13_nt s17460c1f2;
  ::S17460C3_nt s17460c1f3;
  ::S3350C17 s17460c1f4;
  ::S3350C17 s17460c1f5;
  ::S3350C11 s17460c1f6;
  ::S3350C5_nt s17460c1f7;
  ::S287C27 s17460c1f8;
  ::S17460C13 s17460c1f9;
  ::S3350C5_nt s17460c1f10;
  ::S3350C5_nt s17460c1f11;
  ::S3350C5_nt s17460c1f12;
  unsigned int s17460c1f13:1;
  unsigned int s17460c1f14:1;
  unsigned int s17460c1f15:1;
  unsigned int s17460c1f16:1;
  unsigned int s17460c1f17:1;
  unsigned int s17460c1f18:1;
  unsigned int s17460c1f19:1;
  unsigned int s17460c1f20:1;
  unsigned int s17460c1f21:1;
  unsigned int s17460c1f22:1;
  unsigned int s17460c1f23:1;
  unsigned int s17460c1f24:1;
  unsigned int s17460c1f25:1;
  unsigned int s17460c1f26:1;
  unsigned int s17460c1f27:1;
  int s17460c1f28;
  void *s17460c1f29;
  void  mf17460c1(); // _ZN8S17460C19mf17460c1Ev
};
//SIG(1 S17460C1) C1{ m Fp Fc[2] FC2{ m Fi[3]} FC3{ m Fi[3]} FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC4 FC7{ BC8{ BC6}} FC9{ BC10{ BC6}} FC11{ BC12{ BC6}} FC13{ BC14{ m Fp FC15{ m Fi[4]}} Fi[2]} FC9 FC9 FC9 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi Fp}


void  S17460C1 ::mf17460c1(){}

static void Test_S17460C1()
{
  {
    init_simple_test("S17460C1");
    static S17460C1 lv;
    check2(sizeof(lv), ABISELECT(216,168), "sizeof(S17460C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17460C1)");
    check_field_offset(lv, s17460c1f0, 0, "S17460C1.s17460c1f0");
    check_field_offset(lv, s17460c1f1, ABISELECT(8,4), "S17460C1.s17460c1f1");
    check_field_offset(lv, s17460c1f2, ABISELECT(12,8), "S17460C1.s17460c1f2");
    check_field_offset(lv, s17460c1f3, ABISELECT(24,20), "S17460C1.s17460c1f3");
    check_field_offset(lv, s17460c1f4, ABISELECT(40,32), "S17460C1.s17460c1f4");
    check_field_offset(lv, s17460c1f5, ABISELECT(56,44), "S17460C1.s17460c1f5");
    check_field_offset(lv, s17460c1f6, ABISELECT(72,56), "S17460C1.s17460c1f6");
    check_field_offset(lv, s17460c1f7, ABISELECT(88,68), "S17460C1.s17460c1f7");
    check_field_offset(lv, s17460c1f8, ABISELECT(104,80), "S17460C1.s17460c1f8");
    check_field_offset(lv, s17460c1f9, ABISELECT(120,92), "S17460C1.s17460c1f9");
    check_field_offset(lv, s17460c1f10, ABISELECT(152,120), "S17460C1.s17460c1f10");
    check_field_offset(lv, s17460c1f11, ABISELECT(168,132), "S17460C1.s17460c1f11");
    check_field_offset(lv, s17460c1f12, ABISELECT(184,144), "S17460C1.s17460c1f12");
    set_bf_and_test(lv, s17460c1f13, ABISELECT(200,156), 0, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f14, ABISELECT(200,156), 1, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f15, ABISELECT(200,156), 2, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f16, ABISELECT(200,156), 3, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f17, ABISELECT(200,156), 4, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f18, ABISELECT(200,156), 5, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f19, ABISELECT(200,156), 6, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f20, ABISELECT(200,156), 7, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f21, ABISELECT(201,157), 0, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f22, ABISELECT(201,157), 1, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f23, ABISELECT(201,157), 2, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f24, ABISELECT(201,157), 3, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f25, ABISELECT(201,157), 4, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f26, ABISELECT(201,157), 5, 1, 1, "S17460C1");
    set_bf_and_test(lv, s17460c1f27, ABISELECT(201,157), 6, 1, 1, "S17460C1");
    check_field_offset(lv, s17460c1f28, ABISELECT(204,160), "S17460C1.s17460c1f28");
    check_field_offset(lv, s17460c1f29, ABISELECT(208,164), "S17460C1.s17460c1f29");
  }
}
static Arrange_To_Call_Me vS17460C1(Test_S17460C1, "S17460C1", ABISELECT(216,168));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C2_nt  {
  void *s21811c2f0[2];
  void  mf21811c2(); // _ZN11S21811C2_nt9mf21811c2Ev
};
//SIG(-1 S21811C2_nt) C1{ m Fp[2]}


void  S21811C2_nt ::mf21811c2(){}

//skip512 S21811C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C7_nt  {
  void *s21811c7f0;
  int s21811c7f1[2];
  ::S2121C38 s21811c7f2;
  void  mf21811c7(); // _ZN11S21811C7_nt9mf21811c7Ev
};
//SIG(-1 S21811C7_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S21811C7_nt ::mf21811c7(){}

//skip512 S21811C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C11  {
  int s21811c11f0;
  __tsi64 s21811c11f1;
};
//SIG(-1 S21811C11) C1{ Fi FL}



static void Test_S21811C11()
{
  {
    init_simple_test("S21811C11");
    S21811C11 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S21811C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21811C11)");
    check_field_offset(lv, s21811c11f0, 0, "S21811C11.s21811c11f0");
    check_field_offset(lv, s21811c11f1, ABISELECT(8,4), "S21811C11.s21811c11f1");
  }
}
static Arrange_To_Call_Me vS21811C11(Test_S21811C11, "S21811C11", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C13_nt  {
  void *s21811c13f0;
  void  mf21811c13(); // _ZN12S21811C13_nt10mf21811c13Ev
};
//SIG(-1 S21811C13_nt) C1{ m Fp}


void  S21811C13_nt ::mf21811c13(){}

//skip512 S21811C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C12  {
  ::S2121C20_nt s21811c12f0;
  ::S21811C13_nt s21811c12f1;
  ::S2121C20_nt s21811c12f2;
  __tsi64 s21811c12f3;
};
//SIG(-1 S21811C12) C1{ FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} FC2 FL}



static void Test_S21811C12()
{
  {
    init_simple_test("S21811C12");
    S21811C12 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S21811C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21811C12)");
    check_field_offset(lv, s21811c12f0, 0, "S21811C12.s21811c12f0");
    check_field_offset(lv, s21811c12f1, ABISELECT(16,12), "S21811C12.s21811c12f1");
    check_field_offset(lv, s21811c12f2, ABISELECT(24,16), "S21811C12.s21811c12f2");
    check_field_offset(lv, s21811c12f3, ABISELECT(40,28), "S21811C12.s21811c12f3");
  }
}
static Arrange_To_Call_Me vS21811C12(Test_S21811C12, "S21811C12", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C16  {
  void *s21811c16f0;
  int s21811c16f1[2];
  ::S2121C28 s21811c16f2;
  void  mf21811c16(); // _ZN9S21811C1610mf21811c16Ev
};
//SIG(-1 S21811C16) C1{ m Fp Fi[2] FC2{ m}}


void  S21811C16 ::mf21811c16(){}

static void Test_S21811C16()
{
  {
    init_simple_test("S21811C16");
    S21811C16 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S21811C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21811C16)");
    check_field_offset(lv, s21811c16f0, 0, "S21811C16.s21811c16f0");
    check_field_offset(lv, s21811c16f1, ABISELECT(8,4), "S21811C16.s21811c16f1");
    check_field_offset(lv, s21811c16f2, ABISELECT(16,12), "S21811C16.s21811c16f2");
  }
}
static Arrange_To_Call_Me vS21811C16(Test_S21811C16, "S21811C16", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21811C1  {
  void *s21811c1f0[2];
  int s21811c1f1[3];
  void *s21811c1f2;
  ::S21811C2_nt s21811c1f3;
  int s21811c1f4;
  ::S2121C37 s21811c1f5;
  ::S2121C29_nt s21811c1f6;
  ::S21811C7_nt s21811c1f7;
  ::S2121C20_nt s21811c1f8;
  ::S21811C11 s21811c1f9;
  int s21811c1f10;
  ::S21811C12 s21811c1f11;
  char s21811c1f12[4];
  int s21811c1f13;
  char s21811c1f14;
  void *s21811c1f15[2];
  ::S21811C7_nt s21811c1f16;
  ::S21811C16 s21811c1f17;
  void  mf21811c1(); // _ZN8S21811C19mf21811c1Ev
  virtual  ~S21811C1(); // _ZN8S21811C1D1Ev
  S21811C1(); // tgen
};
//SIG(1 S21811C1) C1{ vd m Fp[2] Fi[3] Fp FC2{ m Fp[2]} Fi FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fp Fi[2] FC6{ m}} FC7{ m Fp Fi[2] FC4} FC8{ m Fp Fi FC9{ m}} FC10{ Fi FL} Fi FC11{ FC8 FC12{ m Fp} FC8 FL} Fc[4] Fi Fc Fp[2] FC7 FC13{ m Fp Fi[2] FC6}}


void  S21811C1 ::mf21811c1(){}
 S21811C1 ::~S21811C1(){ note_dtor("S21811C1", this);}
S21811C1 ::S21811C1(){ note_ctor("S21811C1", this);} // tgen

static void Test_S21811C1()
{
  extern Class_Descriptor cd_S21811C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,52)];
    init_test(&cd_S21811C1, buf);
    S21811C1 *dp, &lv = *(dp=new (buf) S21811C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,204), "sizeof(S21811C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21811C1)");
    check_field_offset(lv, s21811c1f0, ABISELECT(8,4), "S21811C1.s21811c1f0");
    check_field_offset(lv, s21811c1f1, ABISELECT(24,12), "S21811C1.s21811c1f1");
    check_field_offset(lv, s21811c1f2, ABISELECT(40,24), "S21811C1.s21811c1f2");
    check_field_offset(lv, s21811c1f3, ABISELECT(48,28), "S21811C1.s21811c1f3");
    check_field_offset(lv, s21811c1f4, ABISELECT(64,36), "S21811C1.s21811c1f4");
    check_field_offset(lv, s21811c1f5, ABISELECT(72,40), "S21811C1.s21811c1f5");
    check_field_offset(lv, s21811c1f6, ABISELECT(96,56), "S21811C1.s21811c1f6");
    check_field_offset(lv, s21811c1f7, ABISELECT(120,72), "S21811C1.s21811c1f7");
    check_field_offset(lv, s21811c1f8, ABISELECT(144,88), "S21811C1.s21811c1f8");
    check_field_offset(lv, s21811c1f9, ABISELECT(160,100), "S21811C1.s21811c1f9");
    check_field_offset(lv, s21811c1f10, ABISELECT(176,112), "S21811C1.s21811c1f10");
    check_field_offset(lv, s21811c1f11, ABISELECT(184,116), "S21811C1.s21811c1f11");
    check_field_offset(lv, s21811c1f12, ABISELECT(232,152), "S21811C1.s21811c1f12");
    check_field_offset(lv, s21811c1f13, ABISELECT(236,156), "S21811C1.s21811c1f13");
    check_field_offset(lv, s21811c1f14, ABISELECT(240,160), "S21811C1.s21811c1f14");
    check_field_offset(lv, s21811c1f15, ABISELECT(248,164), "S21811C1.s21811c1f15");
    check_field_offset(lv, s21811c1f16, ABISELECT(264,172), "S21811C1.s21811c1f16");
    check_field_offset(lv, s21811c1f17, ABISELECT(288,188), "S21811C1.s21811c1f17");
    test_class_info(&lv, &cd_S21811C1);
    dp->~S21811C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21811C1(Test_S21811C1, "S21811C1", ABISELECT(312,204));

#else // __cplusplus

extern void _ZN8S21811C1C1Ev();
extern void _ZN8S21811C1D1Ev();
Name_Map name_map_S21811C1[] = {
  NSPAIR(_ZN8S21811C1C1Ev),
  NSPAIR(_ZN8S21811C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21811C1[];
extern void _ZN8S21811C1D1Ev();
extern void _ZN8S21811C1D0Ev();
static  VTBL_ENTRY vtc_S21811C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21811C1[0]),
  (VTBL_ENTRY)&_ZN8S21811C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21811C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21811C1[];
extern  VTBL_ENTRY _ZTV8S21811C1[];
Class_Descriptor cd_S21811C1 = {  "S21811C1", // class name
  0,0,//no base classes
  &(vtc_S21811C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,204), // object size
  NSPAIRA(_ZTI8S21811C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21811C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C3_nt  {
  long double s2514c3f0;
  void  mf2514c3(); // _ZN10S2514C3_nt8mf2514c3Ev
};
//SIG(-1 S2514C3_nt) C1{ m FD}


void  S2514C3_nt ::mf2514c3(){}

//skip512 S2514C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S2514C3_nt[];
VTBL_ENTRY *P__ZTI10S2514C3_nt = _ZTI10S2514C3_nt; 
Class_Descriptor cd_S2514C3_nt = {  "S2514C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S2514C3_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C4  {
  short  :0;
  short s2514c4f1;
  int s2514c4f2;
  __tsi64 s2514c4f3;
  int s2514c4f4;
  virtual void  v5(); // _ZN7S2514C42v5Ev
  ~S2514C4(); // tgen
  S2514C4(); // tgen
};
//SIG(-1 S2514C4) C1{ v1 Fs:0 Fs Fi FL Fi}


void  S2514C4 ::v5(){vfunc_called(this, "_ZN7S2514C42v5Ev");}
S2514C4 ::~S2514C4(){ note_dtor("S2514C4", this);} // tgen
S2514C4 ::S2514C4(){ note_ctor("S2514C4", this);} // tgen

static void Test_S2514C4()
{
  extern Class_Descriptor cd_S2514C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S2514C4, buf);
    S2514C4 *dp, &lv = *(dp=new (buf) S2514C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S2514C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2514C4)");
    check_field_offset(lv, s2514c4f1, ABISELECT(8,4), "S2514C4.s2514c4f1");
    check_field_offset(lv, s2514c4f2, ABISELECT(12,8), "S2514C4.s2514c4f2");
    check_field_offset(lv, s2514c4f3, ABISELECT(16,12), "S2514C4.s2514c4f3");
    check_field_offset(lv, s2514c4f4, ABISELECT(24,20), "S2514C4.s2514c4f4");
    test_class_info(&lv, &cd_S2514C4);
    dp->~S2514C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C4(Test_S2514C4, "S2514C4", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S2514C4C1Ev();
extern void _ZN7S2514C4D1Ev();
Name_Map name_map_S2514C4[] = {
  NSPAIR(_ZN7S2514C4C1Ev),
  NSPAIR(_ZN7S2514C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2514C4[];
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY vtc_S2514C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C4[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
Class_Descriptor cd_S2514C4 = {  "S2514C4", // class name
  0,0,//no base classes
  &(vtc_S2514C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S2514C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2514C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C2  : S2514C3_nt , S2514C4 {
  int s2514c2f0;
  ~S2514C2(); // tgen
  S2514C2(); // tgen
};
//SIG(-1 S2514C2) C1{ BC2{ m FD} BC3{ v1 Fs:0 Fs Fi FL Fi} Fi}


S2514C2 ::~S2514C2(){ note_dtor("S2514C2", this);} // tgen
S2514C2 ::S2514C2(){ note_ctor("S2514C2", this);} // tgen

static void Test_S2514C2()
{
  extern Class_Descriptor cd_S2514C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S2514C2, buf);
    S2514C2 *dp, &lv = *(dp=new (buf) S2514C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2514C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C2)");
    check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(32,24), "S2514C2");
    check_base_class_offset(lv, (S2514C4*), 0, "S2514C2");
    check_field_offset(lv, s2514c2f0, ABISELECT(48,36), "S2514C2.s2514c2f0");
    test_class_info(&lv, &cd_S2514C2);
    dp->~S2514C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C2(Test_S2514C2, "S2514C2", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S2514C2C1Ev();
extern void _ZN7S2514C2D1Ev();
Name_Map name_map_S2514C2[] = {
  NSPAIR(_ZN7S2514C2C1Ev),
  NSPAIR(_ZN7S2514C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
static Base_Class bases_S2514C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C4,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C2[];
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY vtc_S2514C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C2[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
Class_Descriptor cd_S2514C2 = {  "S2514C2", // class name
  bases_S2514C2, 2,
  &(vtc_S2514C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S2514C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2514C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C6  : S2514C2 {
  void *s2514c6f0;
  long double s2514c6f1;
  virtual void  v6(); // _ZN7S2514C62v6Ev
  virtual void  v7(); // _ZN7S2514C62v7Ev
  virtual void  v8(); // _ZN7S2514C62v8Ev
  ~S2514C6(); // tgen
  S2514C6(); // tgen
};
//SIG(-1 S2514C6) C1{ BC2{ BC3{ m FD} BC4{ v4 Fs:0 Fs Fi FL Fi} Fi} v1 v2 v3 Fp FD}


void  S2514C6 ::v6(){vfunc_called(this, "_ZN7S2514C62v6Ev");}
void  S2514C6 ::v7(){vfunc_called(this, "_ZN7S2514C62v7Ev");}
void  S2514C6 ::v8(){vfunc_called(this, "_ZN7S2514C62v8Ev");}
S2514C6 ::~S2514C6(){ note_dtor("S2514C6", this);} // tgen
S2514C6 ::S2514C6(){ note_ctor("S2514C6", this);} // tgen

static void Test_S2514C6()
{
  extern Class_Descriptor cd_S2514C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,15)];
    init_test(&cd_S2514C6, buf);
    S2514C6 *dp, &lv = *(dp=new (buf) S2514C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S2514C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C6)");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*), ABISELECT(32,24), "S2514C6");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*), 0, "S2514C6");
    check_base_class_offset(lv, (S2514C2*), 0, "S2514C6");
    check_field_offset(lv, s2514c6f0, ABISELECT(56,40), "S2514C6.s2514c6f0");
    check_field_offset(lv, s2514c6f1, ABISELECT(64,44), "S2514C6.s2514c6f1");
    test_class_info(&lv, &cd_S2514C6);
    dp->~S2514C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C6(Test_S2514C6, "S2514C6", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S2514C6C1Ev();
extern void _ZN7S2514C6D1Ev();
Name_Map name_map_S2514C6[] = {
  NSPAIR(_ZN7S2514C6C1Ev),
  NSPAIR(_ZN7S2514C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
static Base_Class bases_S2514C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C6[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY vtc_S2514C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C6[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
Class_Descriptor cd_S2514C6 = {  "S2514C6", // class name
  bases_S2514C6, 3,
  &(vtc_S2514C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S2514C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2514C6),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C5  : S2514C6 , virtual S2514C4 , virtual S2514C3_nt {
  void *s2514c5f0[8];
  long double s2514c5f1;
  ~S2514C5(); // tgen
  S2514C5(); // tgen
};
//SIG(-1 S2514C5) C1{ BC2{ BC3{ BC4{ m FD} BC5{ v1 Fs:0 Fs Fi FL Fi} Fi} v2 v3 v4 Fp FD} VBC5 VBC4 Fp[8] FD}


S2514C5 ::~S2514C5(){ note_dtor("S2514C5", this);} // tgen
S2514C5 ::S2514C5(){ note_ctor("S2514C5", this);} // tgen

static void Test_S2514C5()
{
  extern Class_Descriptor cd_S2514C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S2514C5, buf);
    S2514C5 *dp, &lv = *(dp=new (buf) S2514C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S2514C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C5)");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*), ABISELECT(32,24), "S2514C5");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*), 0, "S2514C5");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*), 0, "S2514C5");
    check_base_class_offset(lv, (S2514C6*), 0, "S2514C5");
    /*is_ambiguous_... S2514C5::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*), ABISELECT(160,100), "S2514C5");
    /*is_ambiguous_... S2514C5::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(192,124), "S2514C5");
    check_field_offset(lv, s2514c5f0, ABISELECT(80,56), "S2514C5.s2514c5f0");
    check_field_offset(lv, s2514c5f1, ABISELECT(144,88), "S2514C5.s2514c5f1");
    test_class_info(&lv, &cd_S2514C5);
    dp->~S2514C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C5(Test_S2514C5, "S2514C5", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN7S2514C5C1Ev();
extern void _ZN7S2514C5D1Ev();
Name_Map name_map_S2514C5[] = {
  NSPAIR(_ZN7S2514C5C1Ev),
  NSPAIR(_ZN7S2514C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
static Base_Class bases_S2514C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2514C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C4,    ABISELECT(160,100), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C5[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY vtc_S2514C5[] = {
  ABISELECT(192,124),
  ABISELECT(160,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  0,
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S2514C5[];
static  VTT_ENTRY vtt_S2514C5[] = {
  {&(_ZTV7S2514C5[4]),  4,12},
  {&(_ZTV7S2514C5[11]),  11,12},
};
extern VTBL_ENTRY _ZTI7S2514C5[];
extern  VTBL_ENTRY _ZTV7S2514C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C5[];
Class_Descriptor cd_S2514C5 = {  "S2514C5", // class name
  bases_S2514C5, 6,
  &(vtc_S2514C5[0]), // expected_vtbl_contents
  &(vtt_S2514C5[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI7S2514C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2514C5),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2514C5),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C7  : S2514C2 {
  __tsi64 s2514c7f0;
  ::S2514C3_nt s2514c7f1;
  void *s2514c7f2;
  int s2514c7f3;
  virtual void  v9(); // _ZN7S2514C72v9Ev
  ~S2514C7(); // tgen
  S2514C7(); // tgen
};
//SIG(-1 S2514C7) C1{ BC2{ BC3{ m FD} BC4{ v2 Fs:0 Fs Fi FL Fi} Fi} v1 FL FC3 Fp Fi}


void  S2514C7 ::v9(){vfunc_called(this, "_ZN7S2514C72v9Ev");}
S2514C7 ::~S2514C7(){ note_dtor("S2514C7", this);} // tgen
S2514C7 ::S2514C7(){ note_ctor("S2514C7", this);} // tgen

static void Test_S2514C7()
{
  extern Class_Descriptor cd_S2514C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,18)];
    init_test(&cd_S2514C7, buf);
    S2514C7 *dp, &lv = *(dp=new (buf) S2514C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S2514C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C7)");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*), ABISELECT(32,24), "S2514C7");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*), 0, "S2514C7");
    check_base_class_offset(lv, (S2514C2*), 0, "S2514C7");
    check_field_offset(lv, s2514c7f0, ABISELECT(56,40), "S2514C7.s2514c7f0");
    check_field_offset(lv, s2514c7f1, ABISELECT(64,48), "S2514C7.s2514c7f1");
    check_field_offset(lv, s2514c7f2, ABISELECT(80,60), "S2514C7.s2514c7f2");
    check_field_offset(lv, s2514c7f3, ABISELECT(88,64), "S2514C7.s2514c7f3");
    test_class_info(&lv, &cd_S2514C7);
    dp->~S2514C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C7(Test_S2514C7, "S2514C7", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S2514C7C1Ev();
extern void _ZN7S2514C7D1Ev();
Name_Map name_map_S2514C7[] = {
  NSPAIR(_ZN7S2514C7C1Ev),
  NSPAIR(_ZN7S2514C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
static Base_Class bases_S2514C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C7[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C72v9Ev();
static  VTBL_ENTRY vtc_S2514C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C7[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C72v9Ev,
};
extern VTBL_ENTRY _ZTI7S2514C7[];
extern  VTBL_ENTRY _ZTV7S2514C7[];
Class_Descriptor cd_S2514C7 = {  "S2514C7", // class name
  bases_S2514C7, 3,
  &(vtc_S2514C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S2514C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2514C7),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C9  : S2514C3_nt , S2514C6 , virtual S2514C4 {
  ::S2514C7 s2514c9f0;
  int s2514c9f1;
  ::S2514C2 s2514c9f2;
  virtual void  v10(); // _ZN7S2514C93v10Ev
  virtual void  v11(); // _ZN7S2514C93v11Ev
  ~S2514C9(); // tgen
  S2514C9(); // tgen
};
//SIG(-1 S2514C9) C1{ BC2{ m FD} BC3{ BC4{ BC2 BC5{ v3 Fs:0 Fs Fi FL Fi} Fi} v4 v5 v6 Fp FD} VBC5 v1 v2 FC6{ BC4 v7 FL FC2 Fp Fi} Fi FC4}


void  S2514C9 ::v10(){vfunc_called(this, "_ZN7S2514C93v10Ev");}
void  S2514C9 ::v11(){vfunc_called(this, "_ZN7S2514C93v11Ev");}
S2514C9 ::~S2514C9(){ note_dtor("S2514C9", this);} // tgen
S2514C9 ::S2514C9(){ note_ctor("S2514C9", this);} // tgen

static void Test_S2514C9()
{
  extern Class_Descriptor cd_S2514C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,52)];
    init_test(&cd_S2514C9, buf);
    S2514C9 *dp, &lv = *(dp=new (buf) S2514C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,204), "sizeof(S2514C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C9)");
    /*is_ambiguous_... S2514C9::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(80,56), "S2514C9");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*), ABISELECT(32,24), "S2514C9");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*), 0, "S2514C9");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*), 0, "S2514C9");
    check_base_class_offset(lv, (S2514C6*), 0, "S2514C9");
    /*is_ambiguous_... S2514C9::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*), ABISELECT(272,180), "S2514C9");
    check_field_offset(lv, s2514c9f0, ABISELECT(96,68), "S2514C9.s2514c9f0");
    check_field_offset(lv, s2514c9f1, ABISELECT(192,136), "S2514C9.s2514c9f1");
    check_field_offset(lv, s2514c9f2, ABISELECT(208,140), "S2514C9.s2514c9f2");
    test_class_info(&lv, &cd_S2514C9);
    dp->~S2514C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C9(Test_S2514C9, "S2514C9", ABISELECT(304,204));

#else // __cplusplus

extern void _ZN7S2514C9C1Ev();
extern void _ZN7S2514C9D1Ev();
Name_Map name_map_S2514C9[] = {
  NSPAIR(_ZN7S2514C9C1Ev),
  NSPAIR(_ZN7S2514C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
static Base_Class bases_S2514C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(80,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2514C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C4,    ABISELECT(272,180), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C9[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY vtc_S2514C9[] = {
  ABISELECT(272,180),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
  0,
  ABISELECT(-272,-180),
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S2514C9[];
static  VTT_ENTRY vtt_S2514C9[] = {
  {&(_ZTV7S2514C9[3]),  3,13},
  {&(_ZTV7S2514C9[12]),  12,13},
};
extern VTBL_ENTRY _ZTI7S2514C9[];
extern  VTBL_ENTRY _ZTV7S2514C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C9[];
Class_Descriptor cd_S2514C9 = {  "S2514C9", // class name
  bases_S2514C9, 6,
  &(vtc_S2514C9[0]), // expected_vtbl_contents
  &(vtt_S2514C9[0]), // expected_vtt_contents
  ABISELECT(304,204), // object size
  NSPAIRA(_ZTI7S2514C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2514C9),13, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2514C9),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S2514C10  {
  int s2514c10f0[4];
  char s2514c10f1;
  void *s2514c10f2[3];
  void  mf2514c10(); // _ZN8S2514C109mf2514c10Ev
};
//SIG(1 S2514C10) U1{ m Fi[4] Fc Fp[3]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S2514C8  : S2514C2 , virtual S2514C4 , virtual S2514C9 , virtual S2514C3_nt , virtual S2514C5 {
  ::S2514C10 s2514c8f0;
  ~S2514C8(); // tgen
  S2514C8(); // tgen
};
//SIG(-1 S2514C8) C1{ BC2{ BC3{ m FD} BC4{ v1 Fs:0 Fs Fi FL Fi} Fi} VBC4 VBC5{ BC3 BC6{ BC2 v2 v3 v4 Fp FD} VBC4 v5 v6 FC7{ BC2 v7 FL FC3 Fp Fi} Fi FC2} VBC3 VBC8{ BC6 VBC4 VBC3 Fp[8] FD} FU9{ m Fi[4] Fc Fp[3]}}


S2514C8 ::~S2514C8(){ note_dtor("S2514C8", this);} // tgen
S2514C8 ::S2514C8(){ note_ctor("S2514C8", this);} // tgen

static void Test_S2514C8()
{
  extern Class_Descriptor cd_S2514C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,94)];
    init_test(&cd_S2514C8, buf);
    S2514C8 *dp, &lv = *(dp=new (buf) S2514C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,372), "sizeof(S2514C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C8)");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*), ABISELECT(32,24), "S2514C8");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*), 0, "S2514C8");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C2*), 0, "S2514C8");
    /*is_ambiguous_... S2514C8::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*), ABISELECT(80,56), "S2514C8");
    /*is_ambiguous_... S2514C9::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C9*), ABISELECT(80,56), "S2514C8");
    /*is_ambiguous_... S2514C5::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C5*), ABISELECT(80,56), "S2514C8");
    /*is_ambiguous_... S2514C9::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C9*), ABISELECT(192,136), "S2514C8");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(144,104), "S2514C8");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(112,80), "S2514C8");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(112,80), "S2514C8");
    check_base_class_offset(lv, (S2514C6*)(S2514C9*), ABISELECT(112,80), "S2514C8");
    check_base_class_offset(lv, (S2514C9*), ABISELECT(112,80), "S2514C8");
    /*is_ambiguous_... S2514C8::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(384,260), "S2514C8");
    /*is_ambiguous_... S2514C5::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C5*), ABISELECT(384,260), "S2514C8");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(432,296), "S2514C8");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(400,272), "S2514C8");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(400,272), "S2514C8");
    check_base_class_offset(lv, (S2514C6*)(S2514C5*), ABISELECT(400,272), "S2514C8");
    check_base_class_offset(lv, (S2514C5*), ABISELECT(400,272), "S2514C8");
    check_field_offset(lv, s2514c8f0, ABISELECT(56,40), "S2514C8.s2514c8f0");
    test_class_info(&lv, &cd_S2514C8);
    dp->~S2514C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C8(Test_S2514C8, "S2514C8", ABISELECT(560,372));

#else // __cplusplus

extern void _ZN7S2514C8C1Ev();
extern void _ZN7S2514C8D1Ev();
Name_Map name_map_S2514C8[] = {
  NSPAIR(_ZN7S2514C8C1Ev),
  NSPAIR(_ZN7S2514C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C9;
extern VTBL_ENTRY _ZTI7S2514C9[];
extern  VTBL_ENTRY _ZTV7S2514C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C9[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C5;
extern VTBL_ENTRY _ZTI7S2514C5[];
extern  VTBL_ENTRY _ZTV7S2514C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C5[];
static Base_Class bases_S2514C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C4,    ABISELECT(80,56), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(192,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2514C3_nt,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(112,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2514C9,    ABISELECT(112,80), //bcp->offset
    11, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(384,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(432,296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(400,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(400,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(400,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2514C5,    ABISELECT(400,272), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C8[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY vtc_S2514C8[] = {
  ABISELECT(400,272),
  ABISELECT(384,260),
  ABISELECT(112,80),
  ABISELECT(80,56),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  0,
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-320,-216),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern VTBL_ENTRY _ZTV7S2514C8[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C9__7S2514C8[] = {
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C9__7S2514C8[] = {
  0,
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C5__7S2514C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-320,-216),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C5__7S2514C8[] = {
  0,
  ABISELECT(320,216),
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
static  VTT_ENTRY vtt_S2514C8[] = {
  {&(_ZTV7S2514C8[6]),  6,38},
  {&(_ZTV7S2514C8[10]),  10,38},
  {&(_ZTV7S2514C8[20]),  20,38},
  {&(_ZTV7S2514C8[34]),  34,38},
  {&(_tg__ZTV7S2514C9__7S2514C8[3]),  3,9},
  {&(_tg__ZTV7S2514C4__A1__7S2514C9__7S2514C8[3]),  3,4},
  {&(_tg__ZTV7S2514C5__7S2514C8[4]),  4,8},
  {&(_tg__ZTV7S2514C4__A1__7S2514C5__7S2514C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2514C8[];
extern  VTBL_ENTRY _ZTV7S2514C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C8[];
Class_Descriptor cd_S2514C8 = {  "S2514C8", // class name
  bases_S2514C8, 16,
  &(vtc_S2514C8[0]), // expected_vtbl_contents
  &(vtt_S2514C8[0]), // expected_vtt_contents
  ABISELECT(560,372), // object size
  NSPAIRA(_ZTI7S2514C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2514C8),38, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2514C8),8, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2514C1  : S2514C2 , virtual S2514C4 , S2514C5 , S2514C7 , S2514C8 {
  __tsi64 s2514c1f0;
  __tsi64 s2514c1f1[2];
  int s2514c1f2;
  virtual  ~S2514C1(); // _ZN7S2514C1D2Ev
  virtual void  v1(); // _ZN7S2514C12v1Ev
  virtual void  v2(); // _ZN7S2514C12v2Ev
  virtual void  v3(); // _ZN7S2514C12v3Ev
  virtual void  v4(); // _ZN7S2514C12v4Ev
  S2514C1(); // tgen
};
//SIG(1 S2514C1) C1{ BC2{ BC3{ m FD} BC4{ v5 Fs:0 Fs Fi FL Fi} Fi} VBC4 BC5{ BC6{ BC2 v6 v7 v8 Fp FD} VBC4 VBC3 Fp[8] FD} BC7{ BC2 v9 FL FC3 Fp Fi} BC8{ BC2 VBC4 VBC9{ BC3 BC6 VBC4 v10 v11 FC7 Fi FC2} VBC3 VBC5 FU10{ m Fi[4] Fc Fp[3]}} vd v1 v2 v3 v4 FL FL[2] Fi}


 S2514C1 ::~S2514C1(){ note_dtor("S2514C1", this);}
void  S2514C1 ::v1(){vfunc_called(this, "_ZN7S2514C12v1Ev");}
void  S2514C1 ::v2(){vfunc_called(this, "_ZN7S2514C12v2Ev");}
void  S2514C1 ::v3(){vfunc_called(this, "_ZN7S2514C12v3Ev");}
void  S2514C1 ::v4(){vfunc_called(this, "_ZN7S2514C12v4Ev");}
S2514C1 ::S2514C1(){ note_ctor("S2514C1", this);} // tgen

static void Test_S2514C1()
{
  extern Class_Descriptor cd_S2514C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(58,153)];
    init_test(&cd_S2514C1, buf);
    S2514C1 *dp, &lv = *(dp=new (buf) S2514C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(912,608), "sizeof(S2514C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2514C1)");
    /*is_ambiguous_... S2514C1::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*), ABISELECT(32,24), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*), 0, "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C2*), 0, "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C5*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C8*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C9::S2514C4 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C9*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C5*), ABISELECT(432,292), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(96,64), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(64,40), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(64,40), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C6*)(S2514C5*), ABISELECT(64,40), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C5*), ABISELECT(464,316), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C8*), ABISELECT(464,316), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C5*), ABISELECT(464,316), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C5*), ABISELECT(64,40), "S2514C1");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C7*), ABISELECT(256,164), "S2514C1");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C7*), ABISELECT(224,140), "S2514C1");
    check_base_class_offset(lv, (S2514C2*)(S2514C7*), ABISELECT(224,140), "S2514C1");
    check_base_class_offset(lv, (S2514C7*), ABISELECT(224,140), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C8*), ABISELECT(352,232), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C8*), ABISELECT(320,208), "S2514C1");
    /*is_ambiguous_... S2514C8::S2514C2 */ AMB_check_base_class_offset(lv, (S2514C2*)(S2514C8*), ABISELECT(320,208), "S2514C1");
    /*is_ambiguous_... S2514C9::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C9*), ABISELECT(560,384), "S2514C1");
    check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(512,352), "S2514C1");
    check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(480,328), "S2514C1");
    check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C9*), ABISELECT(480,328), "S2514C1");
    check_base_class_offset(lv, (S2514C6*)(S2514C9*), ABISELECT(480,328), "S2514C1");
    check_base_class_offset(lv, (S2514C9*)(S2514C8*), ABISELECT(480,328), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(784,532), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C4*)(S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(752,508), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C2*)(S2514C6*)(S2514C5*), ABISELECT(752,508), "S2514C1");
    /*is_ambiguous_... S2514C1::S2514C5 */ AMB_check_base_class_offset(lv, (S2514C6*)(S2514C5*), ABISELECT(752,508), "S2514C1");
    check_base_class_offset(lv, (S2514C5*)(S2514C8*), ABISELECT(752,508), "S2514C1");
    check_base_class_offset(lv, (S2514C8*), ABISELECT(320,208), "S2514C1");
    check_field_offset(lv, s2514c1f0, ABISELECT(400,264), "S2514C1.s2514c1f0");
    check_field_offset(lv, s2514c1f1, ABISELECT(408,272), "S2514C1.s2514c1f1");
    check_field_offset(lv, s2514c1f2, ABISELECT(424,288), "S2514C1.s2514c1f2");
    test_class_info(&lv, &cd_S2514C1);
    dp->~S2514C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2514C1(Test_S2514C1, "S2514C1", ABISELECT(912,608));

#else // __cplusplus

extern void _ZN7S2514C1C1Ev();
extern void _ZN7S2514C1D2Ev();
Name_Map name_map_S2514C1[] = {
  NSPAIR(_ZN7S2514C1C1Ev),
  NSPAIR(_ZN7S2514C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C5;
extern VTBL_ENTRY _ZTI7S2514C5[];
extern  VTBL_ENTRY _ZTV7S2514C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C5[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C7;
extern VTBL_ENTRY _ZTI7S2514C7[];
extern  VTBL_ENTRY _ZTV7S2514C7[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C9;
extern VTBL_ENTRY _ZTI7S2514C9[];
extern  VTBL_ENTRY _ZTV7S2514C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C9[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S2514C4;
extern VTBL_ENTRY _ZTI7S2514C4[];
extern  VTBL_ENTRY _ZTV7S2514C4[];
extern Class_Descriptor cd_S2514C2;
extern VTBL_ENTRY _ZTI7S2514C2[];
extern  VTBL_ENTRY _ZTV7S2514C2[];
extern Class_Descriptor cd_S2514C6;
extern VTBL_ENTRY _ZTI7S2514C6[];
extern  VTBL_ENTRY _ZTV7S2514C6[];
extern Class_Descriptor cd_S2514C5;
extern VTBL_ENTRY _ZTI7S2514C5[];
extern  VTBL_ENTRY _ZTV7S2514C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C5[];
extern Class_Descriptor cd_S2514C8;
extern VTBL_ENTRY _ZTI7S2514C8[];
extern  VTBL_ENTRY _ZTV7S2514C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C8[];
static Base_Class bases_S2514C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2514C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C4,    ABISELECT(432,292), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(96,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2514C3_nt,    ABISELECT(464,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2514C5,    ABISELECT(64,40), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C3_nt,    ABISELECT(256,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2514C7,    ABISELECT(224,140), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2514C3_nt,    ABISELECT(352,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(320,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(320,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2514C3_nt,    ABISELECT(560,384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2514C3_nt,    ABISELECT(512,352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(480,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(480,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(480,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2514C9,    ABISELECT(480,328), //bcp->offset
    36, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2514C3_nt,    ABISELECT(784,532), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2514C4,    ABISELECT(752,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2514C2,    ABISELECT(752,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2514C6,    ABISELECT(752,508), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2514C5,    ABISELECT(752,508), //bcp->offset
    51, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2514C8,    ABISELECT(320,208), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2514C1[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C1D1Ev();
extern void _ZN7S2514C1D0Ev();
extern void _ZN7S2514C12v1Ev();
extern void _ZN7S2514C12v2Ev();
extern void _ZN7S2514C12v3Ev();
extern void _ZN7S2514C12v4Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C72v9Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY vtc_S2514C1[] = {
  ABISELECT(752,508),
  ABISELECT(480,328),
  ABISELECT(464,316),
  ABISELECT(432,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2514C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2514C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2514C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2514C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2514C12v4Ev,
  ABISELECT(400,276),
  ABISELECT(368,252),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C72v9Ev,
  ABISELECT(432,300),
  ABISELECT(144,108),
  ABISELECT(160,120),
  ABISELECT(112,84),
  ABISELECT(-320,-208),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  0,
  ABISELECT(-432,-292),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-36),
  ABISELECT(-480,-328),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-288,-192),
  ABISELECT(-320,-216),
  ABISELECT(-752,-508),
  (VTBL_ENTRY)&(_ZTI7S2514C1[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern VTBL_ENTRY _ZTV7S2514C1[];
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C5__A__7S2514C1[] = {
  ABISELECT(400,276),
  ABISELECT(368,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C5__A__7S2514C1[] = {
  0,
  ABISELECT(-368,-252),
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C8__7S2514C1[] = {
  ABISELECT(432,300),
  ABISELECT(144,108),
  ABISELECT(160,120),
  ABISELECT(112,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C8__7S2514C1[] = {
  0,
  ABISELECT(-112,-84),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C9__7S2514C8__7S2514C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-36),
  ABISELECT(-160,-120),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C5__7S2514C8__7S2514C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-288,-192),
  ABISELECT(-320,-216),
  ABISELECT(-432,-300),
  (VTBL_ENTRY)&(_ZTI7S2514C8[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
extern void _ZN7S2514C93v10Ev();
extern void _ZN7S2514C93v11Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C9__7S2514C1[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v10Ev,
  (VTBL_ENTRY)&_ZN7S2514C93v11Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C9__7S2514C1[] = {
  0,
  ABISELECT(48,36),
  (VTBL_ENTRY)&(_ZTI7S2514C9[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
extern void _ZN7S2514C42v5Ev();
extern void _ZN7S2514C62v6Ev();
extern void _ZN7S2514C62v7Ev();
extern void _ZN7S2514C62v8Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C5__A1__7S2514C1[] = {
  ABISELECT(-288,-192),
  ABISELECT(-320,-216),
  0,
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v6Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v7Ev,
  (VTBL_ENTRY)&_ZN7S2514C62v8Ev,
};
extern void _ZN7S2514C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S2514C4__A1__7S2514C5__A1__7S2514C1[] = {
  0,
  ABISELECT(320,216),
  (VTBL_ENTRY)&(_ZTI7S2514C5[0]),
  (VTBL_ENTRY)&_ZN7S2514C42v5Ev,
};
static  VTT_ENTRY vtt_S2514C1[] = {
  {&(_ZTV7S2514C1[6]),  6,63},
  {&(_tg__ZTV7S2514C5__A__7S2514C1[4]),  4,8},
  {&(_tg__ZTV7S2514C4__A1__7S2514C5__A__7S2514C1[3]),  3,4},
  {&(_tg__ZTV7S2514C8__7S2514C1[6]),  6,7},
  {&(_tg__ZTV7S2514C4__A1__7S2514C8__7S2514C1[3]),  3,4},
  {&(_tg__ZTV7S2514C9__7S2514C8__7S2514C1[9]),  9,15},
  {&(_tg__ZTV7S2514C5__7S2514C8__7S2514C1[8]),  8,12},
  {&(_ZTV7S2514C1[35]),  35,63},
  {&(_ZTV7S2514C1[17]),  17,63},
  {&(_ZTV7S2514C1[31]),  31,63},
  {&(_ZTV7S2514C1[45]),  45,63},
  {&(_ZTV7S2514C1[59]),  59,63},
  {&(_tg__ZTV7S2514C9__7S2514C1[3]),  3,9},
  {&(_tg__ZTV7S2514C4__A1__7S2514C9__7S2514C1[3]),  3,4},
  {&(_tg__ZTV7S2514C5__A1__7S2514C1[4]),  4,8},
  {&(_tg__ZTV7S2514C4__A1__7S2514C5__A1__7S2514C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2514C1[];
extern  VTBL_ENTRY _ZTV7S2514C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2514C1[];
Class_Descriptor cd_S2514C1 = {  "S2514C1", // class name
  bases_S2514C1, 29,
  &(vtc_S2514C1[0]), // expected_vtbl_contents
  &(vtt_S2514C1[0]), // expected_vtt_contents
  ABISELECT(912,608), // object size
  NSPAIRA(_ZTI7S2514C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2514C1),63, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2514C1),16, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C5_nt  {
};
//SIG(-1 S15319C5_nt) C1{}



//skip512 S15319C5_nt

#else // __cplusplus

Class_Descriptor cd_S15319C5_nt = {  "S15319C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C4_nt  : S15319C5_nt {
};
//SIG(-1 S15319C4_nt) C1{ BC2{}}



//skip512 S15319C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S15319C5_nt;
static Base_Class bases_S15319C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15319C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S15319C4_nt = {  "S15319C4_nt", // class name
  bases_S15319C4_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C7  {
};
//SIG(-1 S15319C7) C1{}



static void Test_S15319C7()
{
  {
    init_simple_test("S15319C7");
    S15319C7 lv;
    check2(sizeof(lv), 1, "sizeof(S15319C7)");
    check2(__alignof__(lv), 1, "__alignof__(S15319C7)");
  }
}
static Arrange_To_Call_Me vS15319C7(Test_S15319C7, "S15319C7", 1);

#else // __cplusplus

Class_Descriptor cd_S15319C7 = {  "S15319C7", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C6  : S15319C7 {
};
//SIG(-1 S15319C6) C1{ BC2{}}



static void Test_S15319C6()
{
  extern Class_Descriptor cd_S15319C6;
  void *lvp;
  {
    char buf[1];
    init_test(&cd_S15319C6, buf);
    S15319C6 &lv = *(new (buf) S15319C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 1, "sizeof(S15319C6)");
    check2(__alignof__(lv), 1, "__alignof__(S15319C6)");
    check_base_class_offset(lv, (S15319C7*), 0, "S15319C6");
    test_class_info(&lv, &cd_S15319C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15319C6(Test_S15319C6, "S15319C6", 1);

#else // __cplusplus

extern Class_Descriptor cd_S15319C7;
static Base_Class bases_S15319C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15319C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S15319C6 = {  "S15319C6", // class name
  bases_S15319C6, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C3_nt  : S15319C4_nt {
  ::S15319C6 s15319c3f0;
};
//SIG(-1 S15319C3_nt) C1{ BC2{ BC3{}} FC4{ BC5{}}}



//skip512 S15319C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S15319C5_nt;
extern Class_Descriptor cd_S15319C4_nt;
static Base_Class bases_S15319C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15319C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S15319C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S15319C3_nt = {  "S15319C3_nt", // class name
  bases_S15319C3_nt, 2,
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S15319C8_nt  {
  char s15319c8f0[16];
  void *s15319c8f1;
};
//SIG(1 S15319C8_nt) U1{ Fc[16] Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S15319C2_nt  : S15319C3_nt {
  ::S15319C8_nt s15319c2f0;
  int s15319c2f1;
  int s15319c2f2;
};
//SIG(-1 S15319C2_nt) C1{ BC2{ BC3{ BC4{}} FC5{ BC6{}}} FU7{ Fc[16] Fp} Fi Fi}



//skip512 S15319C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S15319C5_nt;
extern Class_Descriptor cd_S15319C4_nt;
extern Class_Descriptor cd_S15319C3_nt;
static Base_Class bases_S15319C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S15319C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S15319C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S15319C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C9_nt  {
  int s15319c9f0;
  int s15319c9f1;
};
//SIG(-1 S15319C9_nt) C1{ Fi[2]}



//skip512 S15319C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C10_nt  {
  char s15319c10f0;
  char s15319c10f1;
  char s15319c10f2;
  char s15319c10f3;
  char s15319c10f4;
  char s15319c10f5;
  char s15319c10f6;
  char s15319c10f7;
  char s15319c10f8;
  int s15319c10f9;
  char s15319c10f10;
  char s15319c10f11;
  char s15319c10f12;
  char s15319c10f13;
  void  mf15319c10(); // _ZN12S15319C10_nt10mf15319c10Ev
};
//SIG(-1 S15319C10_nt) C1{ m Fc[9] Fi Fc[4]}


void  S15319C10_nt ::mf15319c10(){}

//skip512 S15319C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15319C1  {
  ::S15319C2_nt s15319c1f0;
  int s15319c1f1;
  ::S15319C9_nt s15319c1f2;
  char s15319c1f3;
  char s15319c1f4;
  ::S15319C9_nt s15319c1f5;
  char s15319c1f6;
  char s15319c1f7;
  char s15319c1f8;
  char s15319c1f9;
  char s15319c1f10;
  char s15319c1f11;
  char s15319c1f12;
  char s15319c1f13;
  char s15319c1f14;
  char s15319c1f15;
  int s15319c1f16;
  int s15319c1f17;
  int s15319c1f18;
  void *s15319c1f19;
  ::S15319C10_nt s15319c1f20;
  int s15319c1f21;
  void *s15319c1f22[32];
  int s15319c1f23;
  void *s15319c1f24[32];
  int s15319c1f25;
  void *s15319c1f26[8];
  int s15319c1f27;
  void *s15319c1f28[8];
  int s15319c1f29;
  void *s15319c1f30;
  int s15319c1f31;
  int s15319c1f32;
  int s15319c1f33;
  char s15319c1f34;
  void  mf15319c1(); // _ZN8S15319C19mf15319c1Ev
};
//SIG(1 S15319C1) C1{ m FC2{ BC3{ BC4{ BC5{}} FC6{ BC7{}}} FU8{ Fc[16] Fp} Fi Fi} Fi FC9{ Fi Fi} Fc Fc FC9 Fc Fc Fc Fc Fc Fc Fc Fc Fc Fc Fi Fi Fi Fp FC10{ m Fc Fc Fc Fc Fc Fc Fc Fc Fc Fi Fc Fc Fc Fc} Fi Fp[32] Fi Fp[32] Fi Fp[8] Fi Fp[8] Fi Fp Fi Fi Fi Fc}


void  S15319C1 ::mf15319c1(){}

static void Test_S15319C1()
{
  {
    init_simple_test("S15319C1");
    S15319C1 lv;
    check2(sizeof(lv), ABISELECT(808,460), "sizeof(S15319C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15319C1)");
    check_field_offset(lv, s15319c1f0, 0, "S15319C1.s15319c1f0");
    check_field_offset(lv, s15319c1f1, ABISELECT(32,28), "S15319C1.s15319c1f1");
    check_field_offset(lv, s15319c1f2, ABISELECT(36,32), "S15319C1.s15319c1f2");
    check_field_offset(lv, s15319c1f3, ABISELECT(44,40), "S15319C1.s15319c1f3");
    check_field_offset(lv, s15319c1f4, ABISELECT(45,41), "S15319C1.s15319c1f4");
    check_field_offset(lv, s15319c1f5, ABISELECT(48,44), "S15319C1.s15319c1f5");
    check_field_offset(lv, s15319c1f6, ABISELECT(56,52), "S15319C1.s15319c1f6");
    check_field_offset(lv, s15319c1f7, ABISELECT(57,53), "S15319C1.s15319c1f7");
    check_field_offset(lv, s15319c1f8, ABISELECT(58,54), "S15319C1.s15319c1f8");
    check_field_offset(lv, s15319c1f9, ABISELECT(59,55), "S15319C1.s15319c1f9");
    check_field_offset(lv, s15319c1f10, ABISELECT(60,56), "S15319C1.s15319c1f10");
    check_field_offset(lv, s15319c1f11, ABISELECT(61,57), "S15319C1.s15319c1f11");
    check_field_offset(lv, s15319c1f12, ABISELECT(62,58), "S15319C1.s15319c1f12");
    check_field_offset(lv, s15319c1f13, ABISELECT(63,59), "S15319C1.s15319c1f13");
    check_field_offset(lv, s15319c1f14, ABISELECT(64,60), "S15319C1.s15319c1f14");
    check_field_offset(lv, s15319c1f15, ABISELECT(65,61), "S15319C1.s15319c1f15");
    check_field_offset(lv, s15319c1f16, ABISELECT(68,64), "S15319C1.s15319c1f16");
    check_field_offset(lv, s15319c1f17, ABISELECT(72,68), "S15319C1.s15319c1f17");
    check_field_offset(lv, s15319c1f18, ABISELECT(76,72), "S15319C1.s15319c1f18");
    check_field_offset(lv, s15319c1f19, ABISELECT(80,76), "S15319C1.s15319c1f19");
    check_field_offset(lv, s15319c1f20, ABISELECT(88,80), "S15319C1.s15319c1f20");
    check_field_offset(lv, s15319c1f21, ABISELECT(108,100), "S15319C1.s15319c1f21");
    check_field_offset(lv, s15319c1f22, ABISELECT(112,104), "S15319C1.s15319c1f22");
    check_field_offset(lv, s15319c1f23, ABISELECT(368,232), "S15319C1.s15319c1f23");
    check_field_offset(lv, s15319c1f24, ABISELECT(376,236), "S15319C1.s15319c1f24");
    check_field_offset(lv, s15319c1f25, ABISELECT(632,364), "S15319C1.s15319c1f25");
    check_field_offset(lv, s15319c1f26, ABISELECT(640,368), "S15319C1.s15319c1f26");
    check_field_offset(lv, s15319c1f27, ABISELECT(704,400), "S15319C1.s15319c1f27");
    check_field_offset(lv, s15319c1f28, ABISELECT(712,404), "S15319C1.s15319c1f28");
    check_field_offset(lv, s15319c1f29, ABISELECT(776,436), "S15319C1.s15319c1f29");
    check_field_offset(lv, s15319c1f30, ABISELECT(784,440), "S15319C1.s15319c1f30");
    check_field_offset(lv, s15319c1f31, ABISELECT(792,444), "S15319C1.s15319c1f31");
    check_field_offset(lv, s15319c1f32, ABISELECT(796,448), "S15319C1.s15319c1f32");
    check_field_offset(lv, s15319c1f33, ABISELECT(800,452), "S15319C1.s15319c1f33");
    check_field_offset(lv, s15319c1f34, ABISELECT(804,456), "S15319C1.s15319c1f34");
  }
}
static Arrange_To_Call_Me vS15319C1(Test_S15319C1, "S15319C1", ABISELECT(808,460));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C8_nt  {
  virtual void  v1(); // _ZN10S6282C8_nt2v1Ev
  ~S6282C8_nt(); // tgen
  S6282C8_nt(); // tgen
};
//SIG(-1 S6282C8_nt) C1{ v1}


void  S6282C8_nt ::v1(){vfunc_called(this, "_ZN10S6282C8_nt2v1Ev");}
S6282C8_nt ::~S6282C8_nt(){ note_dtor("S6282C8_nt", this);} // tgen
S6282C8_nt ::S6282C8_nt(){ note_ctor("S6282C8_nt", this);} // tgen

//skip512 S6282C8_nt

#else // __cplusplus

extern void _ZN10S6282C8_ntC1Ev();
extern void _ZN10S6282C8_ntD1Ev();
Name_Map name_map_S6282C8_nt[] = {
  NSPAIR(_ZN10S6282C8_ntC1Ev),
  NSPAIR(_ZN10S6282C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6282C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
VTBL_ENTRY *P__ZTI10S6282C8_nt = _ZTI10S6282C8_nt; 
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
Class_Descriptor cd_S6282C8_nt = {  "S6282C8_nt", // class name
  0,0,//no base classes
  &(vtc_S6282C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S6282C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6282C8_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C7  : virtual S2121C28 , S6282C8_nt , virtual S2121C38 {
  ~S6282C7(); // tgen
  S6282C7(); // tgen
};
//SIG(-1 S6282C7) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S6282C7 ::~S6282C7(){ note_dtor("S6282C7", this);} // tgen
S6282C7 ::S6282C7(){ note_ctor("S6282C7", this);} // tgen

static void Test_S6282C7()
{
  extern Class_Descriptor cd_S6282C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6282C7, buf);
    S6282C7 *dp, &lv = *(dp=new (buf) S6282C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6282C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C7)");
    check_base_class_offset(lv, (S2121C28*), 0, "S6282C7");
    check_base_class_offset(lv, (S6282C8_nt*), 0, "S6282C7");
    check_base_class_offset(lv, (S2121C38*), 0, "S6282C7");
    test_class_info(&lv, &cd_S6282C7);
    dp->~S6282C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C7(Test_S6282C7, "S6282C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6282C7C1Ev();
extern void _ZN7S6282C7D1Ev();
Name_Map name_map_S6282C7[] = {
  NSPAIR(_ZN7S6282C7C1Ev),
  NSPAIR(_ZN7S6282C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S6282C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C7[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C7[];
static  VTT_ENTRY vtt_S6282C7[] = {
  {&(_ZTV7S6282C7[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
Class_Descriptor cd_S6282C7 = {  "S6282C7", // class name
  bases_S6282C7, 3,
  &(vtc_S6282C7[0]), // expected_vtbl_contents
  &(vtt_S6282C7[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6282C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6282C7),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C7),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C6  : S6282C7 , S6282C8_nt {
  ~S6282C6(); // tgen
  S6282C6(); // tgen
};
//SIG(-1 S6282C6) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S6282C6 ::~S6282C6(){ note_dtor("S6282C6", this);} // tgen
S6282C6 ::S6282C6(){ note_ctor("S6282C6", this);} // tgen

static void Test_S6282C6()
{
  extern Class_Descriptor cd_S6282C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6282C6, buf);
    S6282C6 *dp, &lv = *(dp=new (buf) S6282C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6282C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C6)");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*), 0, "S6282C6");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*), 0, "S6282C6");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*), 0, "S6282C6");
    check_base_class_offset(lv, (S6282C7*), 0, "S6282C6");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*), ABISELECT(8,4), "S6282C6");
    test_class_info(&lv, &cd_S6282C6);
    dp->~S6282C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C6(Test_S6282C6, "S6282C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6282C6C1Ev();
extern void _ZN7S6282C6D1Ev();
Name_Map name_map_S6282C6[] = {
  NSPAIR(_ZN7S6282C6C1Ev),
  NSPAIR(_ZN7S6282C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
static Base_Class bases_S6282C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6282C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C8_nt,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C6[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C6[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__7S6282C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C6[] = {
  {&(_ZTV7S6282C6[4]),  4,8},
  {&(_tg__ZTV7S6282C7__7S6282C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
Class_Descriptor cd_S6282C6 = {  "S6282C6", // class name
  bases_S6282C6, 5,
  &(vtc_S6282C6[0]), // expected_vtbl_contents
  &(vtt_S6282C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6282C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6282C6),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C6),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C9  : S2121C28 , S6282C7 {
  virtual void  v2(); // _ZN7S6282C92v2Ev
  ~S6282C9(); // tgen
  S6282C9(); // tgen
};
//SIG(-1 S6282C9) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S6282C9 ::v2(){vfunc_called(this, "_ZN7S6282C92v2Ev");}
S6282C9 ::~S6282C9(){ note_dtor("S6282C9", this);} // tgen
S6282C9 ::S6282C9(){ note_ctor("S6282C9", this);} // tgen

static void Test_S6282C9()
{
  extern Class_Descriptor cd_S6282C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6282C9, buf);
    S6282C9 *dp, &lv = *(dp=new (buf) S6282C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6282C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C9)");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S6282C9");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*), ABISELECT(8,4), "S6282C9");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*), 0, "S6282C9");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*), 0, "S6282C9");
    check_base_class_offset(lv, (S6282C7*), 0, "S6282C9");
    test_class_info(&lv, &cd_S6282C9);
    dp->~S6282C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C9(Test_S6282C9, "S6282C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6282C9C1Ev();
extern void _ZN7S6282C9D1Ev();
Name_Map name_map_S6282C9[] = {
  NSPAIR(_ZN7S6282C9C1Ev),
  NSPAIR(_ZN7S6282C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
static Base_Class bases_S6282C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C9[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY vtc_S6282C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S6282C9[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__7S6282C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C9[] = {
  {&(_ZTV7S6282C9[4]),  4,6},
  {&(_tg__ZTV7S6282C7__7S6282C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
Class_Descriptor cd_S6282C9 = {  "S6282C9", // class name
  bases_S6282C9, 5,
  &(vtc_S6282C9[0]), // expected_vtbl_contents
  &(vtt_S6282C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6282C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6282C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C10  : S6282C8_nt , S2121C38 , virtual S2121C28 {
  ~S6282C10(); // tgen
  S6282C10(); // tgen
};
//SIG(-1 S6282C10) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S6282C10 ::~S6282C10(){ note_dtor("S6282C10", this);} // tgen
S6282C10 ::S6282C10(){ note_ctor("S6282C10", this);} // tgen

static void Test_S6282C10()
{
  extern Class_Descriptor cd_S6282C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6282C10, buf);
    S6282C10 *dp, &lv = *(dp=new (buf) S6282C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6282C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C10)");
    check_base_class_offset(lv, (S6282C8_nt*), 0, "S6282C10");
    check_base_class_offset(lv, (S2121C38*), 0, "S6282C10");
    check_base_class_offset(lv, (S2121C28*), 0, "S6282C10");
    test_class_info(&lv, &cd_S6282C10);
    dp->~S6282C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C10(Test_S6282C10, "S6282C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S6282C10C1Ev();
extern void _ZN8S6282C10D1Ev();
Name_Map name_map_S6282C10[] = {
  NSPAIR(_ZN8S6282C10C1Ev),
  NSPAIR(_ZN8S6282C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S6282C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C10[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S6282C10[];
static  VTT_ENTRY vtt_S6282C10[] = {
  {&(_ZTV8S6282C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
Class_Descriptor cd_S6282C10 = {  "S6282C10", // class name
  bases_S6282C10, 3,
  &(vtc_S6282C10[0]), // expected_vtbl_contents
  &(vtt_S6282C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6282C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6282C10),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C10),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C4  : virtual S2121C28 , virtual S6282C6 , virtual S6282C9 , virtual S6282C10 , S6282C8_nt {
  ~S6282C4(); // tgen
  S6282C4(); // tgen
};
//SIG(-1 S6282C4) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S6282C4 ::~S6282C4(){ note_dtor("S6282C4", this);} // tgen
S6282C4 ::S6282C4(){ note_ctor("S6282C4", this);} // tgen

static void Test_S6282C4()
{
  extern Class_Descriptor cd_S6282C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6282C4, buf);
    S6282C4 *dp, &lv = *(dp=new (buf) S6282C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6282C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C4)");
    /*is_ambiguous_... S6282C4::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S6282C4");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C4");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C4");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C4");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(8,4), "S6282C4");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), 0, "S6282C4");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C4");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(8,4), "S6282C4");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(16,8), "S6282C4");
    check_base_class_offset(lv, (S6282C6*), ABISELECT(8,4), "S6282C4");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(24,12), "S6282C4");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(24,12), "S6282C4");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(24,12), "S6282C4");
    check_base_class_offset(lv, (S6282C9*), ABISELECT(24,12), "S6282C4");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(32,16), "S6282C4");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(32,16), "S6282C4");
    check_base_class_offset(lv, (S6282C10*), ABISELECT(32,16), "S6282C4");
    /*is_ambiguous_... S6282C4::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*), 0, "S6282C4");
    test_class_info(&lv, &cd_S6282C4);
    dp->~S6282C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C4(Test_S6282C4, "S6282C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6282C4C1Ev();
extern void _ZN7S6282C4D1Ev();
Name_Map name_map_S6282C4[] = {
  NSPAIR(_ZN7S6282C4C1Ev),
  NSPAIR(_ZN7S6282C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
static Base_Class bases_S6282C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6282C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C28,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C4[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C4[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C4[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__7S6282C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__7S6282C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C4[] = {
  {&(_ZTV7S6282C4[7]),  7,30},
  {&(_ZTV7S6282C4[13]),  13,30},
  {&(_ZTV7S6282C4[16]),  16,30},
  {&(_ZTV7S6282C4[23]),  23,30},
  {&(_ZTV7S6282C4[29]),  29,30},
  {&(_tg__ZTV7S6282C6__7S6282C4[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__7S6282C4[4]),  4,5},
  {&(_tg__ZTV7S6282C9__7S6282C4[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__7S6282C4[4]),  4,5},
  {&(_tg__ZTV8S6282C10__7S6282C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
Class_Descriptor cd_S6282C4 = {  "S6282C4", // class name
  bases_S6282C4, 14,
  &(vtc_S6282C4[0]), // expected_vtbl_contents
  &(vtt_S6282C4[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6282C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6282C4),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C4),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C11  : virtual S2121C28 , virtual S6282C9 , S6282C8_nt {
  int s6282c11f0;
  void *s6282c11f1;
  ~S6282C11(); // tgen
  S6282C11(); // tgen
};
//SIG(-1 S6282C11) C1{ VBC2{ m} VBC3{ BC2 BC4{ VBC2 BC5{ v1} VBC6{ m}} v2} BC5 Fi Fp}


S6282C11 ::~S6282C11(){ note_dtor("S6282C11", this);} // tgen
S6282C11 ::S6282C11(){ note_ctor("S6282C11", this);} // tgen

static void Test_S6282C11()
{
  extern Class_Descriptor cd_S6282C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S6282C11, buf);
    S6282C11 *dp, &lv = *(dp=new (buf) S6282C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6282C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C11)");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S6282C11");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C11");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(24,12), "S6282C11");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(24,12), "S6282C11");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C11");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(24,12), "S6282C11");
    check_base_class_offset(lv, (S6282C9*), ABISELECT(24,12), "S6282C11");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*), 0, "S6282C11");
    check_field_offset(lv, s6282c11f0, ABISELECT(8,4), "S6282C11.s6282c11f0");
    check_field_offset(lv, s6282c11f1, ABISELECT(16,8), "S6282C11.s6282c11f1");
    test_class_info(&lv, &cd_S6282C11);
    dp->~S6282C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C11(Test_S6282C11, "S6282C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S6282C11C1Ev();
extern void _ZN8S6282C11D1Ev();
Name_Map name_map_S6282C11[] = {
  NSPAIR(_ZN8S6282C11C1Ev),
  NSPAIR(_ZN8S6282C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
static Base_Class bases_S6282C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C28,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C11[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY vtc_S6282C11[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S6282C11[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__8S6282C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C11[] = {
  {&(_ZTV8S6282C11[5]),  5,14},
  {&(_ZTV8S6282C11[12]),  12,14},
  {&(_tg__ZTV7S6282C9__8S6282C11[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__8S6282C11[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
Class_Descriptor cd_S6282C11 = {  "S6282C11", // class name
  bases_S6282C11, 7,
  &(vtc_S6282C11[0]), // expected_vtbl_contents
  &(vtt_S6282C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S6282C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6282C11),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C11),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C3  : virtual S6282C4 , virtual S6282C11 {
  int s6282c3f0:32;
  ~S6282C3(); // tgen
  S6282C3(); // tgen
};
//SIG(-1 S6282C3) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ VBC3 VBC8 BC6 Fi Fp} Fi:32}


S6282C3 ::~S6282C3(){ note_dtor("S6282C3", this);} // tgen
S6282C3 ::S6282C3(){ note_ctor("S6282C3", this);} // tgen

static void Test_S6282C3()
{
  extern Class_Descriptor cd_S6282C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S6282C3, buf);
    S6282C3 *dp, &lv = *(dp=new (buf) S6282C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S6282C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C3)");
    /*is_ambiguous_... S6282C4::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C3");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C3");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C3");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C3");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C11*), 0, "S6282C3");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(16,8), "S6282C3");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), 0, "S6282C3");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C3");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(16,8), "S6282C3");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(24,12), "S6282C3");
    check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(16,8), "S6282C3");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C9*)(S6282C11*), ABISELECT(32,16), "S6282C3");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(40,20), "S6282C3");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(40,20), "S6282C3");
    check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(40,20), "S6282C3");
    /*is_ambiguous_... S6282C4::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), 0, "S6282C3");
    check_base_class_offset(lv, (S6282C4*), 0, "S6282C3");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C11*), ABISELECT(48,24), "S6282C3");
    check_base_class_offset(lv, (S6282C11*), ABISELECT(48,24), "S6282C3");
    set_bf_and_test(lv, s6282c3f0, ABISELECT(8,4), 0, 32, 1, "S6282C3");
    set_bf_and_test(lv, s6282c3f0, ABISELECT(8,4), 0, 32, hide_sll(1LL<<31), "S6282C3");
    test_class_info(&lv, &cd_S6282C3);
    dp->~S6282C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C3(Test_S6282C3, "S6282C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S6282C3C1Ev();
extern void _ZN7S6282C3D1Ev();
Name_Map name_map_S6282C3[] = {
  NSPAIR(_ZN7S6282C3C1Ev),
  NSPAIR(_ZN7S6282C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C11;
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
static Base_Class bases_S6282C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6282C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(32,16), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(40,20), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S6282C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S6282C11,    ABISELECT(48,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C3[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C3[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C3[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__7S6282C3[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__7S6282C3[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__7S6282C3[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__7S6282C3[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__7S6282C3[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__7S6282C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C3[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__7S6282C3[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C3[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C3[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11__7S6282C3[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
static  VTT_ENTRY vtt_S6282C3[] = {
  {&(_ZTV7S6282C3[10]),  10,40},
  {&(_ZTV7S6282C3[10]),  10,40},
  {&(_ZTV7S6282C3[16]),  16,40},
  {&(_ZTV7S6282C3[19]),  19,40},
  {&(_ZTV7S6282C3[26]),  26,40},
  {&(_ZTV7S6282C3[32]),  32,40},
  {&(_ZTV7S6282C3[39]),  39,40},
  {&(_tg__ZTV7S6282C4__7S6282C3[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__7S6282C3[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__7S6282C3[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__7S6282C3[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__7S6282C3[4]),  4,5},
  {&(_tg__ZTV7S6282C6__7S6282C3[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__7S6282C3[4]),  4,5},
  {&(_tg__ZTV7S6282C9__7S6282C3[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__7S6282C3[4]),  4,5},
  {&(_tg__ZTV8S6282C10__7S6282C3[3]),  3,4},
  {&(_tg__ZTV8S6282C11__7S6282C3[5]),  5,6},
  {&(_tg__ZTV7S6282C9__8S6282C11__7S6282C3[6]),  6,8},
};
extern VTBL_ENTRY _ZTI7S6282C3[];
extern  VTBL_ENTRY _ZTV7S6282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C3[];
Class_Descriptor cd_S6282C3 = {  "S6282C3", // class name
  bases_S6282C3, 17,
  &(vtc_S6282C3[0]), // expected_vtbl_contents
  &(vtt_S6282C3[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S6282C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6282C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C3),19, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C14_nt  {
  int s6282c14f0;
  void  mf6282c14(); // _ZN11S6282C14_nt9mf6282c14Ev
  virtual  ~S6282C14_nt(); // _ZN11S6282C14_ntD1Ev
  S6282C14_nt(); // tgen
};
//SIG(-1 S6282C14_nt) C1{ vd m Fi}


void  S6282C14_nt ::mf6282c14(){}
 S6282C14_nt ::~S6282C14_nt(){ note_dtor("S6282C14_nt", this);}
S6282C14_nt ::S6282C14_nt(){ note_ctor("S6282C14_nt", this);} // tgen

//skip512 S6282C14_nt

#else // __cplusplus

extern void _ZN11S6282C14_ntC1Ev();
extern void _ZN11S6282C14_ntD1Ev();
Name_Map name_map_S6282C14_nt[] = {
  NSPAIR(_ZN11S6282C14_ntC1Ev),
  NSPAIR(_ZN11S6282C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern void _ZN11S6282C14_ntD1Ev();
extern void _ZN11S6282C14_ntD0Ev();
static  VTBL_ENTRY vtc_S6282C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S6282C14_nt[0]),
  (VTBL_ENTRY)&_ZN11S6282C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S6282C14_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
VTBL_ENTRY *P__ZTI11S6282C14_nt = _ZTI11S6282C14_nt; 
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
Class_Descriptor cd_S6282C14_nt = {  "S6282C14_nt", // class name
  0,0,//no base classes
  &(vtc_S6282C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S6282C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S6282C14_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C16  : virtual S6282C9 {
  int s6282c16f0;
  ~S6282C16(); // tgen
  S6282C16(); // tgen
};
//SIG(-1 S6282C16) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S6282C16 ::~S6282C16(){ note_dtor("S6282C16", this);} // tgen
S6282C16 ::S6282C16(){ note_ctor("S6282C16", this);} // tgen

static void Test_S6282C16()
{
  extern Class_Descriptor cd_S6282C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6282C16, buf);
    S6282C16 *dp, &lv = *(dp=new (buf) S6282C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6282C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C16)");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), 0, "S6282C16");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), ABISELECT(12,8), "S6282C16");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), 0, "S6282C16");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C16");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), 0, "S6282C16");
    check_base_class_offset(lv, (S6282C9*), 0, "S6282C16");
    check_field_offset(lv, s6282c16f0, ABISELECT(8,4), "S6282C16.s6282c16f0");
    test_class_info(&lv, &cd_S6282C16);
    dp->~S6282C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C16(Test_S6282C16, "S6282C16", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S6282C16C1Ev();
extern void _ZN8S6282C16D1Ev();
Name_Map name_map_S6282C16[] = {
  NSPAIR(_ZN8S6282C16C1Ev),
  NSPAIR(_ZN8S6282C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
static Base_Class bases_S6282C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C16[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY vtc_S6282C16[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S6282C16[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C16[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__8S6282C16[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C16[] = {
  {&(_ZTV8S6282C16[7]),  7,9},
  {&(_ZTV8S6282C16[7]),  7,9},
  {&(_tg__ZTV7S6282C9__8S6282C16[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__8S6282C16[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
Class_Descriptor cd_S6282C16 = {  "S6282C16", // class name
  bases_S6282C16, 6,
  &(vtc_S6282C16[0]), // expected_vtbl_contents
  &(vtt_S6282C16[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S6282C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S6282C16),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C16),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C15  : S6282C16 , virtual S6282C8_nt {
  __tsu64 s6282c15f0:1;
  ~S6282C15(); // tgen
  S6282C15(); // tgen
};
//SIG(-1 S6282C15) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S6282C15 ::~S6282C15(){ note_dtor("S6282C15", this);} // tgen
S6282C15 ::S6282C15(){ note_ctor("S6282C15", this);} // tgen

static void Test_S6282C15()
{
  extern Class_Descriptor cd_S6282C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6282C15, buf);
    S6282C15 *dp, &lv = *(dp=new (buf) S6282C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6282C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C15)");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), 0, "S6282C15");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), ABISELECT(13,9), "S6282C15");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), 0, "S6282C15");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C15");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), 0, "S6282C15");
    check_base_class_offset(lv, (S6282C9*)(S6282C16*), 0, "S6282C15");
    check_base_class_offset(lv, (S6282C16*), 0, "S6282C15");
    /*is_ambiguous_... S6282C15::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*), ABISELECT(16,12), "S6282C15");
    set_bf_and_test(lv, s6282c15f0, ABISELECT(12,8), 0, 1, 1, "S6282C15");
    test_class_info(&lv, &cd_S6282C15);
    dp->~S6282C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C15(Test_S6282C15, "S6282C15", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S6282C15C1Ev();
extern void _ZN8S6282C15D1Ev();
Name_Map name_map_S6282C15[] = {
  NSPAIR(_ZN8S6282C15C1Ev),
  NSPAIR(_ZN8S6282C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
static Base_Class bases_S6282C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6282C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6282C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C8_nt,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C15[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C15[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S6282C15[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C16__8S6282C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C15[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__8S6282C15[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C15[] = {
  {&(_ZTV8S6282C15[8]),  8,14},
  {&(_tg__ZTV8S6282C16__8S6282C15[7]),  7,9},
  {&(_tg__ZTV8S6282C16__8S6282C15[7]),  7,9},
  {&(_ZTV8S6282C15[8]),  8,14},
  {&(_ZTV8S6282C15[13]),  13,14},
  {&(_tg__ZTV7S6282C9__8S6282C15[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__8S6282C15[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S6282C15[];
extern  VTBL_ENTRY _ZTV8S6282C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C15[];
Class_Descriptor cd_S6282C15 = {  "S6282C15", // class name
  bases_S6282C15, 8,
  &(vtc_S6282C15[0]), // expected_vtbl_contents
  &(vtt_S6282C15[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S6282C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6282C15),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C15),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C13  : S6282C14_nt , virtual S6282C3 , virtual S6282C15 , S6282C7 {
  ~S6282C13(); // tgen
  S6282C13(); // tgen
};
//SIG(-1 S6282C13) C1{ BC2{ vd m Fi} VBC3{ VBC4{ VBC5{ m} VBC6{ BC7{ VBC5 BC8{ v1} VBC9{ m}} BC8} VBC10{ BC5 BC7 v2} VBC11{ BC8 BC9 VBC5} BC8} VBC12{ VBC5 VBC10 BC8 Fi Fp} Fi:32} VBC13{ BC14{ VBC10 Fi} VBC8 FL:1} BC7}


S6282C13 ::~S6282C13(){ note_dtor("S6282C13", this);} // tgen
S6282C13 ::S6282C13(){ note_ctor("S6282C13", this);} // tgen

static void Test_S6282C13()
{
  extern Class_Descriptor cd_S6282C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,16)];
    init_test(&cd_S6282C13, buf);
    S6282C13 *dp, &lv = *(dp=new (buf) S6282C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S6282C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C13)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S6282C13");
    /*is_ambiguous_... S6282C4::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C13");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C13");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C13");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C13");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C11*), 0, "S6282C13");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C7*), 0, "S6282C13");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(40,20), "S6282C13");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), 0, "S6282C13");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C13");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C38*)(S6282C7*), 0, "S6282C13");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(40,20), "S6282C13");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(48,24), "S6282C13");
    check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(40,20), "S6282C13");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C9*)(S6282C11*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C9*)(S6282C16*)(S6282C15*), ABISELECT(88,44), "S6282C13");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(56,28), "S6282C13");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(56,28), "S6282C13");
    check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(56,28), "S6282C13");
    /*is_ambiguous_... S6282C4::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), ABISELECT(24,12), "S6282C13");
    check_base_class_offset(lv, (S6282C4*)(S6282C3*), ABISELECT(24,12), "S6282C13");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C11*), ABISELECT(64,32), "S6282C13");
    check_base_class_offset(lv, (S6282C11*)(S6282C3*), ABISELECT(64,32), "S6282C13");
    check_base_class_offset(lv, (S6282C3*), ABISELECT(24,12), "S6282C13");
    check_base_class_offset(lv, (S6282C16*)(S6282C15*), ABISELECT(88,44), "S6282C13");
    /*is_ambiguous_... S6282C15::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C15*), ABISELECT(104,56), "S6282C13");
    check_base_class_offset(lv, (S6282C15*), ABISELECT(88,44), "S6282C13");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*), ABISELECT(16,8), "S6282C13");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C7*), ABISELECT(16,8), "S6282C13");
    test_class_info(&lv, &cd_S6282C13);
    dp->~S6282C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C13(Test_S6282C13, "S6282C13", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN8S6282C13C1Ev();
extern void _ZN8S6282C13D1Ev();
Name_Map name_map_S6282C13[] = {
  NSPAIR(_ZN8S6282C13C1Ev),
  NSPAIR(_ZN8S6282C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C11;
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
extern Class_Descriptor cd_S6282C3;
extern VTBL_ENTRY _ZTI7S6282C3[];
extern  VTBL_ENTRY _ZTV7S6282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C3[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C15;
extern VTBL_ENTRY _ZTI8S6282C15[];
extern  VTBL_ENTRY _ZTV8S6282C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C15[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
static Base_Class bases_S6282C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(48,24), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2121C28,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(56,28), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6282C11,    ABISELECT(64,32), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C3,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C16,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(104,56), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6282C15,    ABISELECT(88,44), //bcp->offset
    51, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C8_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C13[];
extern void _ZN8S6282C13D1Ev();
extern void _ZN8S6282C13D0Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C13[] = {
  ABISELECT(104,56),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(88,44),
  0,
  ABISELECT(40,20),
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN8S6282C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C13D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S6282C13[];
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__A2__8S6282C13[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C13[] = {
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C3__8S6282C13[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__8S6282C13[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C3__8S6282C13[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C3__8S6282C13[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C3__8S6282C13[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__8S6282C13[] = {
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__8S6282C13[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__8S6282C13[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__8S6282C13[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__8S6282C13[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C13[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__8S6282C13[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C13[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__8S6282C13[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C13[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C13[] = {
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11__8S6282C13[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C13[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C168S6282C15__8S6282C13[] = {
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A1__8S6282C15__8S6282C13[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C13[] = {
  {&(_ZTV8S6282C13[12]),  12,65},
  {&(_tg__ZTV7S6282C7__A2__8S6282C13[4]),  4,5},
  {&(_ZTV8S6282C13[29]),  29,65},
  {&(_ZTV8S6282C13[29]),  29,65},
  {&(_ZTV8S6282C13[35]),  35,65},
  {&(_ZTV8S6282C13[38]),  38,65},
  {&(_ZTV8S6282C13[59]),  59,65},
  {&(_ZTV8S6282C13[43]),  43,65},
  {&(_ZTV8S6282C13[50]),  50,65},
  {&(_ZTV8S6282C13[59]),  59,65},
  {&(_ZTV8S6282C13[64]),  64,65},
  {&(_ZTV8S6282C13[18]),  18,65},
  {&(_tg__ZTV7S6282C3__8S6282C13[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C13[10]),  10,11},
  {&(_tg__ZTV7S6282C6__7S6282C3__8S6282C13[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__8S6282C13[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C3__8S6282C13[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C3__8S6282C13[4]),  4,5},
  {&(_tg__ZTV8S6282C11__7S6282C3__8S6282C13[6]),  6,7},
  {&(_tg__ZTV7S6282C4__8S6282C13[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__8S6282C13[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__8S6282C13[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__8S6282C13[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__8S6282C13[4]),  4,5},
  {&(_tg__ZTV7S6282C6__8S6282C13[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__8S6282C13[4]),  4,5},
  {&(_tg__ZTV7S6282C9__8S6282C13[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__8S6282C13[4]),  4,5},
  {&(_tg__ZTV8S6282C10__8S6282C13[3]),  3,4},
  {&(_tg__ZTV8S6282C11__8S6282C13[5]),  5,6},
  {&(_tg__ZTV7S6282C9__8S6282C11__8S6282C13[6]),  6,8},
  {&(_tg__ZTV8S6282C15__8S6282C13[8]),  8,10},
  {&(_tg__ZTV8S6282C168S6282C15__8S6282C13[7]),  7,9},
  {&(_tg__ZTV8S6282C168S6282C15__8S6282C13[7]),  7,9},
  {&(_tg__ZTV8S6282C15__8S6282C13[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A1__8S6282C15__8S6282C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6282C13[];
extern  VTBL_ENTRY _ZTV8S6282C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C13[];
Class_Descriptor cd_S6282C13 = {  "S6282C13", // class name
  bases_S6282C13, 24,
  &(vtc_S6282C13[0]), // expected_vtbl_contents
  &(vtt_S6282C13[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S6282C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6282C13),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C13),36, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C17_nt  : virtual S2121C28 {
  ~S6282C17_nt(); // tgen
  S6282C17_nt(); // tgen
};
//SIG(-1 S6282C17_nt) C1{ VBC2{ m}}


S6282C17_nt ::~S6282C17_nt(){ note_dtor("S6282C17_nt", this);} // tgen
S6282C17_nt ::S6282C17_nt(){ note_ctor("S6282C17_nt", this);} // tgen

//skip512 S6282C17_nt

#else // __cplusplus

extern void _ZN11S6282C17_ntC1Ev();
extern void _ZN11S6282C17_ntD1Ev();
Name_Map name_map_S6282C17_nt[] = {
  NSPAIR(_ZN11S6282C17_ntC1Ev),
  NSPAIR(_ZN11S6282C17_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S6282C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI11S6282C17_nt[];
static  VTBL_ENTRY vtc_S6282C17_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S6282C17_nt[0]),
};
extern VTBL_ENTRY _ZTV11S6282C17_nt[];
static  VTT_ENTRY vtt_S6282C17_nt[] = {
  {&(_ZTV11S6282C17_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S6282C17_nt[];
VTBL_ENTRY *P__ZTI11S6282C17_nt = _ZTI11S6282C17_nt; 
extern  VTBL_ENTRY _ZTV11S6282C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S6282C17_nt[];
Class_Descriptor cd_S6282C17_nt = {  "S6282C17_nt", // class name
  bases_S6282C17_nt, 1,
  &(vtc_S6282C17_nt[0]), // expected_vtbl_contents
  &(vtt_S6282C17_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S6282C17_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S6282C17_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S6282C17_nt),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C12  : S6282C13 , S6282C17_nt , S6282C4 {
  virtual  ~S6282C12(); // _ZN8S6282C12D2Ev
  S6282C12(); // tgen
};
//SIG(-1 S6282C12) C1{ BC2{ BC3{ vd m Fi} VBC4{ VBC5{ VBC6{ m} VBC7{ BC8{ VBC6 BC9{ v1} VBC10{ m}} BC9} VBC11{ BC6 BC8 v2} VBC12{ BC9 BC10 VBC6} BC9} VBC13{ VBC6 VBC11 BC9 Fi Fp} Fi:32} VBC14{ BC15{ VBC11 Fi} VBC9 FL:1} BC8} BC16{ VBC6} BC5 vd}


 S6282C12 ::~S6282C12(){ note_dtor("S6282C12", this);}
S6282C12 ::S6282C12(){ note_ctor("S6282C12", this);} // tgen

static void Test_S6282C12()
{
  extern Class_Descriptor cd_S6282C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,18)];
    init_test(&cd_S6282C12, buf);
    S6282C12 *dp, &lv = *(dp=new (buf) S6282C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S6282C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C12)");
    check_base_class_offset(lv, (S6282C14_nt*)(S6282C13*), 0, "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C12");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C11*), 0, "S6282C12");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C13*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C28*)(S6282C17_nt*), 0, "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C12");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(56,28), "S6282C12");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), 0, "S6282C12");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), 0, "S6282C12");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C13*), 0, "S6282C12");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(56,28), "S6282C12");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(64,32), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(56,28), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(56,28), "S6282C12");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(104,52), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C9*)(S6282C11*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C9*)(S6282C16*)(S6282C15*), ABISELECT(104,52), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(104,52), "S6282C12");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(72,36), "S6282C12");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(72,36), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(72,36), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(72,36), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), ABISELECT(40,20), "S6282C12");
    check_base_class_offset(lv, (S6282C4*)(S6282C3*), ABISELECT(40,20), "S6282C12");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C11*), ABISELECT(80,40), "S6282C12");
    check_base_class_offset(lv, (S6282C11*)(S6282C3*), ABISELECT(80,40), "S6282C12");
    check_base_class_offset(lv, (S6282C3*)(S6282C13*), ABISELECT(40,20), "S6282C12");
    check_base_class_offset(lv, (S6282C16*)(S6282C15*), ABISELECT(104,52), "S6282C12");
    /*is_ambiguous_... S6282C15::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C15*), ABISELECT(120,64), "S6282C12");
    check_base_class_offset(lv, (S6282C15*)(S6282C13*), ABISELECT(104,52), "S6282C12");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C13*), ABISELECT(16,8), "S6282C12");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C7*)(S6282C13*), ABISELECT(16,8), "S6282C12");
    check_base_class_offset(lv, (S6282C13*), 0, "S6282C12");
    check_base_class_offset(lv, (S6282C17_nt*), ABISELECT(24,12), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), ABISELECT(32,16), "S6282C12");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C4*), ABISELECT(32,16), "S6282C12");
    test_class_info(&lv, &cd_S6282C12);
    dp->~S6282C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C12(Test_S6282C12, "S6282C12", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S6282C12C1Ev();
extern void _ZN8S6282C12D2Ev();
Name_Map name_map_S6282C12[] = {
  NSPAIR(_ZN8S6282C12C1Ev),
  NSPAIR(_ZN8S6282C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C11;
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
extern Class_Descriptor cd_S6282C3;
extern VTBL_ENTRY _ZTI7S6282C3[];
extern  VTBL_ENTRY _ZTV7S6282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C3[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C15;
extern VTBL_ENTRY _ZTI8S6282C15[];
extern  VTBL_ENTRY _ZTV8S6282C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C15[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C13;
extern VTBL_ENTRY _ZTI8S6282C13[];
extern  VTBL_ENTRY _ZTV8S6282C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C13[];
extern Class_Descriptor cd_S6282C17_nt;
extern VTBL_ENTRY _ZTI11S6282C17_nt[];
extern  VTBL_ENTRY _ZTV11S6282C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S6282C17_nt[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
static Base_Class bases_S6282C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C7,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(64,32), //bcp->offset
    47, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(56,28), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2121C28,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(72,36), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6282C11,    ABISELECT(80,40), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C3,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S6282C16,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(120,64), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6282C15,    ABISELECT(104,52), //bcp->offset
    62, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6282C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C17_nt,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C8_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6282C12[];
extern void _ZN8S6282C12D1Ev();
extern void _ZN8S6282C12D0Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C12[] = {
  ABISELECT(120,64),
  ABISELECT(104,52),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(104,52),
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN8S6282C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C12D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-80,-40),
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV8S6282C12[];
extern void _ZN8S6282C13D1Ev();
extern void _ZN8S6282C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C13__8S6282C12[] = {
  ABISELECT(120,64),
  ABISELECT(104,52),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(104,52),
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN8S6282C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C13D0Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C78S6282C13__A2__8S6282C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C13__8S6282C12[] = {
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C13__8S6282C12[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C13__8S6282C12[] = {
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C13__8S6282C12[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C13__8S6282C12[] = {
  0,
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C13__8S6282C12[] = {
  0,
  ABISELECT(-80,-40),
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A6__8S6282C13__8S6282C12[] = {
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__A2__8S6282C13__8S6282C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV11S6282C17_nt__8S6282C12[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI11S6282C17_nt[0]),
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__A__8S6282C12[] = {
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__A__8S6282C12[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__A__8S6282C12[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__A__8S6282C12[] = {
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__A__8S6282C12[] = {
  0,
  ABISELECT(-72,-36),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C12[] = {
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C3__8S6282C12[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__8S6282C12[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C3__8S6282C12[] = {
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C3__8S6282C12[] = {
  0,
  ABISELECT(-72,-36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C3__8S6282C12[] = {
  0,
  ABISELECT(-80,-40),
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__8S6282C12[] = {
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__8S6282C12[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__8S6282C12[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__8S6282C12[] = {
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__8S6282C12[] = {
  0,
  ABISELECT(-72,-36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C12[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__8S6282C12[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C12[] = {
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__8S6282C12[] = {
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C12[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C12[] = {
  ABISELECT(-80,-40),
  ABISELECT(24,12),
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11__8S6282C12[] = {
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C12[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C168S6282C15__8S6282C12[] = {
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A1__8S6282C15__8S6282C12[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C12[] = {
  {&(_ZTV8S6282C12[12]),  12,76},
  {&(_tg__ZTV8S6282C13__8S6282C12[12]),  12,14},
  {&(_tg__ZTV7S6282C78S6282C13__A2__8S6282C12[4]),  4,5},
  {&(_tg__ZTV7S6282C3__8S6282C13__8S6282C12[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C13__8S6282C12[10]),  10,11},
  {&(_tg__ZTV7S6282C6__8S6282C13__8S6282C12[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C13__8S6282C12[2]),  2,3},
  {&(_tg__ZTV8S6282C15__8S6282C13__8S6282C12[8]),  8,10},
  {&(_tg__ZTV8S6282C10__8S6282C13__8S6282C12[4]),  4,5},
  {&(_tg__ZTV8S6282C11__8S6282C13__8S6282C12[6]),  6,7},
  {&(_tg__ZTV8S6282C15__8S6282C13__8S6282C12[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A6__8S6282C13__8S6282C12[3]),  3,4},
  {&(_tg__ZTV7S6282C7__A2__8S6282C13__8S6282C12[4]),  4,5},
  {&(_tg__ZTV11S6282C17_nt__8S6282C12[3]),  3,3},
  {&(_tg__ZTV7S6282C4__A__8S6282C12[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__A__8S6282C12[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__A__8S6282C12[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__A__8S6282C12[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__A__8S6282C12[4]),  4,5},
  {&(_ZTV8S6282C12[40]),  40,76},
  {&(_ZTV8S6282C12[40]),  40,76},
  {&(_ZTV8S6282C12[46]),  46,76},
  {&(_ZTV8S6282C12[49]),  49,76},
  {&(_ZTV8S6282C12[70]),  70,76},
  {&(_ZTV8S6282C12[54]),  54,76},
  {&(_ZTV8S6282C12[61]),  61,76},
  {&(_ZTV8S6282C12[70]),  70,76},
  {&(_ZTV8S6282C12[75]),  75,76},
  {&(_ZTV8S6282C12[18]),  18,76},
  {&(_ZTV8S6282C12[22]),  22,76},
  {&(_ZTV8S6282C12[29]),  29,76},
  {&(_tg__ZTV7S6282C3__8S6282C12[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C12[10]),  10,11},
  {&(_tg__ZTV7S6282C6__7S6282C3__8S6282C12[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__8S6282C12[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C3__8S6282C12[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C3__8S6282C12[4]),  4,5},
  {&(_tg__ZTV8S6282C11__7S6282C3__8S6282C12[6]),  6,7},
  {&(_tg__ZTV7S6282C4__8S6282C12[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__8S6282C12[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__8S6282C12[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__8S6282C12[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__8S6282C12[4]),  4,5},
  {&(_tg__ZTV7S6282C6__8S6282C12[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__8S6282C12[4]),  4,5},
  {&(_tg__ZTV7S6282C9__8S6282C12[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__8S6282C12[4]),  4,5},
  {&(_tg__ZTV8S6282C10__8S6282C12[3]),  3,4},
  {&(_tg__ZTV8S6282C11__8S6282C12[5]),  5,6},
  {&(_tg__ZTV7S6282C9__8S6282C11__8S6282C12[6]),  6,8},
  {&(_tg__ZTV8S6282C15__8S6282C12[8]),  8,10},
  {&(_tg__ZTV8S6282C168S6282C15__8S6282C12[7]),  7,9},
  {&(_tg__ZTV8S6282C168S6282C15__8S6282C12[7]),  7,9},
  {&(_tg__ZTV8S6282C15__8S6282C12[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A1__8S6282C15__8S6282C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6282C12[];
extern  VTBL_ENTRY _ZTV8S6282C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C12[];
Class_Descriptor cd_S6282C12 = {  "S6282C12", // class name
  bases_S6282C12, 28,
  &(vtc_S6282C12[0]), // expected_vtbl_contents
  &(vtt_S6282C12[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S6282C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6282C12),76, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6282C12),55, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6282C1  : S2121C38 , virtual S6282C3 , virtual S6282C12 , S6282C16 {
  void *s6282c1f0;
  virtual  ~S6282C1(); // _ZN7S6282C1D2Ev
  S6282C1(); // tgen
};
//SIG(1 S6282C1) C1{ BC2{ m} VBC3{ VBC4{ VBC5{ m} VBC6{ BC7{ VBC5 BC8{ v1} VBC2} BC8} VBC9{ BC5 BC7 v2} VBC10{ BC8 BC2 VBC5} BC8} VBC11{ VBC5 VBC9 BC8 Fi Fp} Fi:32} VBC12{ BC13{ BC14{ vd m Fi} VBC3 VBC15{ BC16{ VBC9 Fi} VBC8 FL:1} BC7} BC17{ VBC5} BC4 vd} BC16 vd Fp}


 S6282C1 ::~S6282C1(){ note_dtor("S6282C1", this);}
S6282C1 ::S6282C1(){ note_ctor("S6282C1", this);} // tgen

static void Test_S6282C1()
{
  extern Class_Descriptor cd_S6282C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,22)];
    init_test(&cd_S6282C1, buf);
    S6282C1 *dp, &lv = *(dp=new (buf) S6282C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S6282C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6282C1)");
    /*is_ambiguous_... S6282C1::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*), 0, "S6282C1");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C6*), 0, "S6282C1");
    check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C9*), 0, "S6282C1");
    check_base_class_offset(lv, (S2121C28*)(S6282C10*), 0, "S6282C1");
    /*is_ambiguous_... S6282C11::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C11*), 0, "S6282C1");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C7*)(S6282C13*)(S6282C12*), 0, "S6282C1");
    check_base_class_offset(lv, (S2121C28*)(S6282C17_nt*)(S6282C12*), 0, "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C4*)(S6282C12*), 0, "S6282C1");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C6*), ABISELECT(40,20), "S6282C1");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C6*), ABISELECT(56,28), "S6282C1");
    check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C9*), ABISELECT(56,28), "S6282C1");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S2121C38*)(S6282C7*)(S6282C13*)(S6282C12*), ABISELECT(56,28), "S6282C1");
    check_base_class_offset(lv, (S6282C7*)(S6282C6*), ABISELECT(40,20), "S6282C1");
    /*is_ambiguous_... S6282C6::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C6*), ABISELECT(48,24), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C6*)(S6282C4*), ABISELECT(40,20), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C6*)(S6282C4*)(S6282C12*), ABISELECT(40,20), "S6282C1");
    /*is_ambiguous_... S6282C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S6282C9*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C9*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C7*)(S6282C9*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C4*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C9*)(S6282C11*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C9*)(S6282C16*)(S6282C15*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C4*)(S6282C12*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C16 */ AMB_check_base_class_offset(lv, (S6282C9*)(S6282C16*), ABISELECT(136,68), "S6282C1");
    check_base_class_offset(lv, (S6282C8_nt*)(S6282C10*), ABISELECT(64,32), "S6282C1");
    check_base_class_offset(lv, (S2121C38*)(S6282C10*), ABISELECT(64,32), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C10*)(S6282C4*), ABISELECT(64,32), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C10*)(S6282C4*)(S6282C12*), ABISELECT(64,32), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*), ABISELECT(24,12), "S6282C1");
    check_base_class_offset(lv, (S6282C4*)(S6282C3*), ABISELECT(24,12), "S6282C1");
    /*is_ambiguous_... S6282C11::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C11*), ABISELECT(72,36), "S6282C1");
    check_base_class_offset(lv, (S6282C11*)(S6282C3*), ABISELECT(72,36), "S6282C1");
    check_base_class_offset(lv, (S6282C3*), ABISELECT(24,12), "S6282C1");
    check_base_class_offset(lv, (S6282C3*)(S6282C13*)(S6282C12*), ABISELECT(24,12), "S6282C1");
    check_base_class_offset(lv, (S6282C14_nt*)(S6282C13*)(S6282C12*), ABISELECT(96,48), "S6282C1");
    check_base_class_offset(lv, (S6282C16*)(S6282C15*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C15::S6282C8_nt */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C15*), ABISELECT(152,80), "S6282C1");
    check_base_class_offset(lv, (S6282C15*)(S6282C13*)(S6282C12*), ABISELECT(136,68), "S6282C1");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C7*)(S6282C13*)(S6282C12*), ABISELECT(112,56), "S6282C1");
    /*is_ambiguous_... S6282C13::S6282C7 */ AMB_check_base_class_offset(lv, (S6282C7*)(S6282C13*)(S6282C12*), ABISELECT(112,56), "S6282C1");
    check_base_class_offset(lv, (S6282C13*)(S6282C12*), ABISELECT(96,48), "S6282C1");
    check_base_class_offset(lv, (S6282C17_nt*)(S6282C12*), ABISELECT(120,60), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C8_nt*)(S6282C4*)(S6282C12*), ABISELECT(128,64), "S6282C1");
    /*is_ambiguous_... S6282C12::S6282C4 */ AMB_check_base_class_offset(lv, (S6282C4*)(S6282C12*), ABISELECT(128,64), "S6282C1");
    check_base_class_offset(lv, (S6282C12*), ABISELECT(96,48), "S6282C1");
    /*is_ambiguous_... S6282C1::S6282C16 */ AMB_check_base_class_offset(lv, (S6282C16*), 0, "S6282C1");
    check_field_offset(lv, s6282c1f0, ABISELECT(16,8), "S6282C1.s6282c1f0");
    test_class_info(&lv, &cd_S6282C1);
    dp->~S6282C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6282C1(Test_S6282C1, "S6282C1", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S6282C1C1Ev();
extern void _ZN7S6282C1D2Ev();
Name_Map name_map_S6282C1[] = {
  NSPAIR(_ZN7S6282C1C1Ev),
  NSPAIR(_ZN7S6282C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C6;
extern VTBL_ENTRY _ZTI7S6282C6[];
extern  VTBL_ENTRY _ZTV7S6282C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C9;
extern VTBL_ENTRY _ZTI7S6282C9[];
extern  VTBL_ENTRY _ZTV7S6282C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C9[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S6282C10;
extern VTBL_ENTRY _ZTI8S6282C10[];
extern  VTBL_ENTRY _ZTV8S6282C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C10[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C11;
extern VTBL_ENTRY _ZTI8S6282C11[];
extern  VTBL_ENTRY _ZTV8S6282C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C11[];
extern Class_Descriptor cd_S6282C3;
extern VTBL_ENTRY _ZTI7S6282C3[];
extern  VTBL_ENTRY _ZTV7S6282C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C3[];
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C15;
extern VTBL_ENTRY _ZTI8S6282C15[];
extern  VTBL_ENTRY _ZTV8S6282C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C15[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C7;
extern VTBL_ENTRY _ZTI7S6282C7[];
extern  VTBL_ENTRY _ZTV7S6282C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C7[];
extern Class_Descriptor cd_S6282C13;
extern VTBL_ENTRY _ZTI8S6282C13[];
extern  VTBL_ENTRY _ZTV8S6282C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C13[];
extern Class_Descriptor cd_S6282C17_nt;
extern VTBL_ENTRY _ZTI11S6282C17_nt[];
extern  VTBL_ENTRY _ZTV11S6282C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S6282C17_nt[];
extern Class_Descriptor cd_S6282C8_nt;
extern VTBL_ENTRY _ZTI10S6282C8_nt[];
extern  VTBL_ENTRY _ZTV10S6282C8_nt[];
extern Class_Descriptor cd_S6282C4;
extern VTBL_ENTRY _ZTI7S6282C4[];
extern  VTBL_ENTRY _ZTV7S6282C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C4[];
extern Class_Descriptor cd_S6282C12;
extern VTBL_ENTRY _ZTI8S6282C12[];
extern  VTBL_ENTRY _ZTV8S6282C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C12[];
extern Class_Descriptor cd_S6282C16;
extern VTBL_ENTRY _ZTI8S6282C16[];
extern  VTBL_ENTRY _ZTV8S6282C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6282C16[];
static Base_Class bases_S6282C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6282C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(48,24), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6282C6,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2121C28,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6282C9,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6282C10,    ABISELECT(64,32), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6282C11,    ABISELECT(72,36), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S6282C3,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C14_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6282C16,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(152,80), //bcp->offset
    93, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S6282C15,    ABISELECT(136,68), //bcp->offset
    83, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S6282C8_nt,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6282C7,    ABISELECT(112,56), //bcp->offset
    67, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S6282C13,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6282C17_nt,    ABISELECT(120,60), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6282C8_nt,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S6282C4,    ABISELECT(128,64), //bcp->offset
    75, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6282C12,    ABISELECT(96,48), //bcp->offset
    51, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6282C1[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN7S6282C1D1Ev();
extern void _ZN7S6282C1D0Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void ABISELECT(_ZTv0_n104_N7S6282C1D1Ev,_ZTv0_n52_N7S6282C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S6282C1D1Ev,_ZThn48_N7S6282C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S6282C1D0Ev,_ZTv0_n52_N7S6282C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S6282C1D0Ev,_ZThn48_N7S6282C1D0Ev)() __attribute__((weak));
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY vtc_S6282C1[] = {
  ABISELECT(152,80),
  ABISELECT(136,68),
  ABISELECT(96,48),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(136,68),
  ABISELECT(136,68),
  ABISELECT(136,68),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  (VTBL_ENTRY)&_ZN7S6282C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6282C1D0Ev,
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(16,8),
  ABISELECT(-96,-48),
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-96,-48),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6282C1D1Ev,_ZTv0_n52_N7S6282C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6282C1D0Ev,_ZTv0_n52_N7S6282C1D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(-120,-60),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-128,-64),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
  0,
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI7S6282C1[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV7S6282C1[];
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C16__A1__7S6282C1[] = {
  ABISELECT(136,68),
  ABISELECT(136,68),
  ABISELECT(136,68),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C16__A1__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__7S6282C1[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C3__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__7S6282C1[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C3__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C3__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C3__7S6282C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S6282C3[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__7S6282C1[] = {
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C4__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__7S6282C1[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C4__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C4__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C6[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C6__7S6282C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C9[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C77S6282C9__A1__7S6282C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C10[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__7S6282C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__8S6282C11__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C11[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN8S6282C12D1Ev();
extern void _ZN8S6282C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C12__7S6282C1[] = {
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-96,-48),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN8S6282C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C12D0Ev,
};
extern void _ZN8S6282C13D1Ev();
extern void _ZN8S6282C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(56,32),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-40,-20),
  ABISELECT(-56,-28),
  ABISELECT(-96,-48),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN8S6282C13D1Ev,
  (VTBL_ENTRY)&_ZN8S6282C13D0Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C78S6282C138S6282C12__A2__7S6282C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C7[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C138S6282C12__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C138S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C138S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A6__8S6282C138S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C7__A2__8S6282C138S6282C12__7S6282C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C13[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV11S6282C17_nt8S6282C12__7S6282C1[] = {
  ABISELECT(-120,-60),
  0,
  (VTBL_ENTRY)&(_ZTI11S6282C17_nt[0]),
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C48S6282C12__A1__7S6282C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__7S6282C48S6282C12__A1__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C48S6282C12__A1__7S6282C1[] = {
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C9__7S6282C48S6282C12__A1__7S6282C1[] = {
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__7S6282C48S6282C12__A1__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI7S6282C4[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C3__8S6282C12__7S6282C1[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(112,56),
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C6__8S6282C12__7S6282C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C12__7S6282C1[] = {
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__8S6282C12__7S6282C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C10__8S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C11__8S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(64,32),
  ABISELECT(-72,-36),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A6__8S6282C12__7S6282C1[] = {
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C78S6282C13__A2__8S6282C12__7S6282C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-112,-56),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV11S6282C17_nt__8S6282C12__7S6282C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6282C4__A__8S6282C12__7S6282C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-128,-64),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S6282C12[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C15__7S6282C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
extern void _ZN7S6282C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S6282C168S6282C15__7S6282C1[] = {
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-136,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S6282C16[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
  (VTBL_ENTRY)&_ZN7S6282C92v2Ev,
};
extern void _ZN10S6282C8_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV10S6282C8_nt__A1__8S6282C15__7S6282C1[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S6282C15[0]),
  (VTBL_ENTRY)&_ZN10S6282C8_nt2v1Ev,
};
static  VTT_ENTRY vtt_S6282C1[] = {
  {&(_ZTV7S6282C1[15]),  15,97},
  {&(_tg__ZTV8S6282C16__A1__7S6282C1[7]),  7,9},
  {&(_tg__ZTV7S6282C9__8S6282C16__A1__7S6282C1[6]),  6,8},
  {&(_ZTV7S6282C1[29]),  29,97},
  {&(_ZTV7S6282C1[29]),  29,97},
  {&(_ZTV7S6282C1[35]),  35,97},
  {&(_ZTV7S6282C1[38]),  38,97},
  {&(_ZTV7S6282C1[91]),  91,97},
  {&(_ZTV7S6282C1[43]),  43,97},
  {&(_ZTV7S6282C1[50]),  50,97},
  {&(_ZTV7S6282C1[65]),  65,97},
  {&(_ZTV7S6282C1[91]),  91,97},
  {&(_ZTV7S6282C1[96]),  96,97},
  {&(_ZTV7S6282C1[71]),  71,97},
  {&(_ZTV7S6282C1[75]),  75,97},
  {&(_ZTV7S6282C1[82]),  82,97},
  {&(_tg__ZTV7S6282C3__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C3__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C6__7S6282C3__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C3__7S6282C1[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C3__7S6282C1[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C3__7S6282C1[4]),  4,5},
  {&(_tg__ZTV8S6282C11__7S6282C3__7S6282C1[6]),  6,7},
  {&(_tg__ZTV7S6282C4__7S6282C1[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C4__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C4__7S6282C1[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C4__7S6282C1[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C4__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C6__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C77S6282C6__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C9__7S6282C1[4]),  4,6},
  {&(_tg__ZTV7S6282C77S6282C9__A1__7S6282C1[4]),  4,5},
  {&(_tg__ZTV8S6282C10__7S6282C1[3]),  3,4},
  {&(_tg__ZTV8S6282C11__7S6282C1[5]),  5,6},
  {&(_tg__ZTV7S6282C9__8S6282C11__7S6282C1[6]),  6,8},
  {&(_tg__ZTV8S6282C12__7S6282C1[12]),  12,14},
  {&(_tg__ZTV8S6282C138S6282C12__7S6282C1[12]),  12,14},
  {&(_tg__ZTV7S6282C78S6282C138S6282C12__A2__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C3__8S6282C138S6282C12__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C138S6282C12__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C6__8S6282C138S6282C12__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C138S6282C12__7S6282C1[2]),  2,3},
  {&(_tg__ZTV8S6282C15__8S6282C138S6282C12__7S6282C1[8]),  8,10},
  {&(_tg__ZTV8S6282C10__8S6282C138S6282C12__7S6282C1[4]),  4,5},
  {&(_tg__ZTV8S6282C11__8S6282C138S6282C12__7S6282C1[6]),  6,7},
  {&(_tg__ZTV8S6282C15__8S6282C138S6282C12__7S6282C1[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A6__8S6282C138S6282C12__7S6282C1[3]),  3,4},
  {&(_tg__ZTV7S6282C7__A2__8S6282C138S6282C12__7S6282C1[4]),  4,5},
  {&(_tg__ZTV11S6282C17_nt8S6282C12__7S6282C1[3]),  3,3},
  {&(_tg__ZTV7S6282C48S6282C12__A1__7S6282C1[7]),  7,8},
  {&(_tg__ZTV7S6282C6__7S6282C48S6282C12__A1__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__7S6282C48S6282C12__A1__7S6282C1[2]),  2,3},
  {&(_tg__ZTV7S6282C9__7S6282C48S6282C12__A1__7S6282C1[6]),  6,8},
  {&(_tg__ZTV8S6282C10__7S6282C48S6282C12__A1__7S6282C1[4]),  4,5},
  {&(_tg__ZTV7S6282C3__8S6282C12__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C3__8S6282C12__7S6282C1[10]),  10,11},
  {&(_tg__ZTV7S6282C6__8S6282C12__7S6282C1[5]),  5,6},
  {&(_tg__ZTV10S6282C8_nt7S6282C6__A1__8S6282C12__7S6282C1[2]),  2,3},
  {&(_tg__ZTV8S6282C15__8S6282C12__7S6282C1[8]),  8,10},
  {&(_tg__ZTV8S6282C10__8S6282C12__7S6282C1[4]),  4,5},
  {&(_tg__ZTV8S6282C11__8S6282C12__7S6282C1[6]),  6,7},
  {&(_tg__ZTV8S6282C15__8S6282C12__7S6282C1[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A6__8S6282C12__7S6282C1[3]),  3,4},
  {&(_tg__ZTV7S6282C78S6282C13__A2__8S6282C12__7S6282C1[4]),  4,5},
  {&(_tg__ZTV11S6282C17_nt__8S6282C12__7S6282C1[3]),  3,3},
  {&(_tg__ZTV7S6282C4__A__8S6282C12__7S6282C1[7]),  7,8},
  {&(_tg__ZTV8S6282C15__7S6282C1[8]),  8,10},
  {&(_tg__ZTV8S6282C168S6282C15__7S6282C1[7]),  7,9},
  {&(_tg__ZTV8S6282C168S6282C15__7S6282C1[7]),  7,9},
  {&(_tg__ZTV8S6282C15__7S6282C1[8]),  8,10},
  {&(_tg__ZTV10S6282C8_nt__A1__8S6282C15__7S6282C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6282C1[];
extern  VTBL_ENTRY _ZTV7S6282C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6282C1[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6282C1D0Ev,_ZTv0_n52_N7S6282C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6282C1D0Ev,_ZThn48_N7S6282C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6282C1D1Ev,_ZTv0_n52_N7S6282C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S6282C1D1Ev,_ZThn48_N7S6282C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6282C1 = {  "S6282C1", // class name
  bases_S6282C1, 31,
  &(vtc_S6282C1[0]), // expected_vtbl_contents
  &(vtt_S6282C1[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S6282C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6282C1),97, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6282C1),71, //virtual table table var
  26, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C4_nt  {
  ::S2121C20_nt s2185c4f0;
  int s2185c4f1[2];
  char s2185c4f2;
  virtual  ~S2185C4_nt(); // _ZN10S2185C4_ntD1Ev
  virtual void  v3(); // _ZN10S2185C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2185C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2185C4_nt2v5Ev
  S2185C4_nt(); // tgen
};
//SIG(-1 S2185C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2185C4_nt ::~S2185C4_nt(){ note_dtor("S2185C4_nt", this);}
void  S2185C4_nt ::v3(){vfunc_called(this, "_ZN10S2185C4_nt2v3Ev");}
void  S2185C4_nt ::v4(){vfunc_called(this, "_ZN10S2185C4_nt2v4Ev");}
void  S2185C4_nt ::v5(){vfunc_called(this, "_ZN10S2185C4_nt2v5Ev");}
S2185C4_nt ::S2185C4_nt(){ note_ctor("S2185C4_nt", this);} // tgen

//skip512 S2185C4_nt

#else // __cplusplus

extern void _ZN10S2185C4_ntC1Ev();
extern void _ZN10S2185C4_ntD1Ev();
Name_Map name_map_S2185C4_nt[] = {
  NSPAIR(_ZN10S2185C4_ntC1Ev),
  NSPAIR(_ZN10S2185C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
extern void _ZN10S2185C4_ntD1Ev();
extern void _ZN10S2185C4_ntD0Ev();
extern void _ZN10S2185C4_nt2v3Ev();
extern void _ZN10S2185C4_nt2v4Ev();
extern void _ZN10S2185C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S2185C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2185C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2185C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
VTBL_ENTRY *P__ZTI10S2185C4_nt = _ZTI10S2185C4_nt; 
extern  VTBL_ENTRY _ZTV10S2185C4_nt[];
Class_Descriptor cd_S2185C4_nt = {  "S2185C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2185C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2185C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2185C4_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C8_nt  {
  int s2185c8f0;
  void *s2185c8f1[7];
  short s2185c8f2;
  char s2185c8f3[10];
};
//SIG(-1 S2185C8_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S2185C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C10_nt  {
  void *s2185c10f0;
  int s2185c10f1;
  ::S2121C38 s2185c10f2;
  void  mf2185c10(); // _ZN11S2185C10_nt9mf2185c10Ev
};
//SIG(-1 S2185C10_nt) C1{ m Fp Fi FC2{ m}}


void  S2185C10_nt ::mf2185c10(){}

//skip512 S2185C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C9_nt  {
  ::S2121C20_nt s2185c9f0;
  ::S2185C10_nt s2185c9f1;
  void  mf2185c9(); // _ZN10S2185C9_nt8mf2185c9Ev
};
//SIG(-1 S2185C9_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m}}}


void  S2185C9_nt ::mf2185c9(){}

//skip512 S2185C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C7_nt  {
  ::S2185C8_nt s2185c7f0;
  void *s2185c7f1;
  char s2185c7f2[2];
  ::S2185C9_nt s2185c7f3;
  void  mf2185c7(); // _ZN10S2185C7_nt8mf2185c7Ev
  virtual  ~S2185C7_nt(); // _ZN10S2185C7_ntD1Ev
  S2185C7_nt(); // tgen
};
//SIG(-1 S2185C7_nt) C1{ vd m FC2{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC3{ m FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi FC7{ m}}}}


void  S2185C7_nt ::mf2185c7(){}
 S2185C7_nt ::~S2185C7_nt(){ note_dtor("S2185C7_nt", this);}
S2185C7_nt ::S2185C7_nt(){ note_ctor("S2185C7_nt", this);} // tgen

//skip512 S2185C7_nt

#else // __cplusplus

extern void _ZN10S2185C7_ntC1Ev();
extern void _ZN10S2185C7_ntD1Ev();
Name_Map name_map_S2185C7_nt[] = {
  NSPAIR(_ZN10S2185C7_ntC1Ev),
  NSPAIR(_ZN10S2185C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2185C7_nt[];
extern void _ZN10S2185C7_ntD1Ev();
extern void _ZN10S2185C7_ntD0Ev();
static  VTBL_ENTRY vtc_S2185C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2185C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S2185C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2185C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S2185C7_nt[];
VTBL_ENTRY *P__ZTI10S2185C7_nt = _ZTI10S2185C7_nt; 
extern  VTBL_ENTRY _ZTV10S2185C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C3  : S2185C4_nt {
  void *s2185c3f0;
  ::S2185C7_nt s2185c3f1;
  int s2185c3f2[2];
  void *s2185c3f3;
  int s2185c3f4;
  ::S21811C2_nt s2185c3f5;
  int s2185c3f6;
  virtual  ~S2185C3(); // _ZN7S2185C3D1Ev
  virtual void  v6(); // _ZN7S2185C32v6Ev
  virtual void  v7(); // _ZN7S2185C32v7Ev
  virtual void  v8(); // _ZN7S2185C32v8Ev
  virtual void  v9(); // _ZN7S2185C32v9Ev
  S2185C3(); // tgen
};
//SIG(-1 S2185C3) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp FC5{ vd m FC6{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC7{ m FC3 FC8{ m Fp Fi FC9{ m}}}} Fi[2] Fp Fi FC10{ m Fp[2]} Fi}


 S2185C3 ::~S2185C3(){ note_dtor("S2185C3", this);}
void  S2185C3 ::v6(){vfunc_called(this, "_ZN7S2185C32v6Ev");}
void  S2185C3 ::v7(){vfunc_called(this, "_ZN7S2185C32v7Ev");}
void  S2185C3 ::v8(){vfunc_called(this, "_ZN7S2185C32v8Ev");}
void  S2185C3 ::v9(){vfunc_called(this, "_ZN7S2185C32v9Ev");}
S2185C3 ::S2185C3(){ note_ctor("S2185C3", this);} // tgen

static void Test_S2185C3()
{
  extern Class_Descriptor cd_S2185C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S2185C3, buf);
    S2185C3 *dp, &lv = *(dp=new (buf) S2185C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S2185C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2185C3)");
    check_base_class_offset(lv, (S2185C4_nt*), 0, "S2185C3");
    check_field_offset(lv, s2185c3f0, ABISELECT(40,28), "S2185C3.s2185c3f0");
    check_field_offset(lv, s2185c3f1, ABISELECT(48,32), "S2185C3.s2185c3f1");
    check_field_offset(lv, s2185c3f2, ABISELECT(184,112), "S2185C3.s2185c3f2");
    check_field_offset(lv, s2185c3f3, ABISELECT(192,120), "S2185C3.s2185c3f3");
    check_field_offset(lv, s2185c3f4, ABISELECT(200,124), "S2185C3.s2185c3f4");
    check_field_offset(lv, s2185c3f5, ABISELECT(208,128), "S2185C3.s2185c3f5");
    check_field_offset(lv, s2185c3f6, ABISELECT(224,136), "S2185C3.s2185c3f6");
    test_class_info(&lv, &cd_S2185C3);
    dp->~S2185C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2185C3(Test_S2185C3, "S2185C3", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S2185C3C1Ev();
extern void _ZN7S2185C3D1Ev();
Name_Map name_map_S2185C3[] = {
  NSPAIR(_ZN7S2185C3C1Ev),
  NSPAIR(_ZN7S2185C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2185C4_nt;
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
extern  VTBL_ENTRY _ZTV10S2185C4_nt[];
static Base_Class bases_S2185C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2185C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2185C3[];
extern void _ZN7S2185C3D1Ev();
extern void _ZN7S2185C3D0Ev();
extern void _ZN10S2185C4_nt2v3Ev();
extern void _ZN10S2185C4_nt2v4Ev();
extern void _ZN10S2185C4_nt2v5Ev();
extern void _ZN7S2185C32v6Ev();
extern void _ZN7S2185C32v7Ev();
extern void _ZN7S2185C32v8Ev();
extern void _ZN7S2185C32v9Ev();
static  VTBL_ENTRY vtc_S2185C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2185C3[0]),
  (VTBL_ENTRY)&_ZN7S2185C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2185C3D0Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2185C3[];
extern  VTBL_ENTRY _ZTV7S2185C3[];
Class_Descriptor cd_S2185C3 = {  "S2185C3", // class name
  bases_S2185C3, 1,
  &(vtc_S2185C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S2185C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2185C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C2  : S2185C3 {
  void *s2185c2f0;
  virtual  ~S2185C2(); // _ZN7S2185C2D1Ev
  virtual void  v10(); // _ZN7S2185C23v10Ev
  virtual void  v11(); // _ZN7S2185C23v11Ev
  virtual void  v12(); // _ZN7S2185C23v12Ev
  S2185C2(); // tgen
};
//SIG(-1 S2185C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 Fp FC6{ vd m FC7{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC8{ m FC4 FC9{ m Fp Fi FC10{ m}}}} Fi[2] Fp Fi FC11{ m Fp[2]} Fi} vd v1 v2 v3 Fp}


 S2185C2 ::~S2185C2(){ note_dtor("S2185C2", this);}
void  S2185C2 ::v10(){vfunc_called(this, "_ZN7S2185C23v10Ev");}
void  S2185C2 ::v11(){vfunc_called(this, "_ZN7S2185C23v11Ev");}
void  S2185C2 ::v12(){vfunc_called(this, "_ZN7S2185C23v12Ev");}
S2185C2 ::S2185C2(){ note_ctor("S2185C2", this);} // tgen

static void Test_S2185C2()
{
  extern Class_Descriptor cd_S2185C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S2185C2, buf);
    S2185C2 *dp, &lv = *(dp=new (buf) S2185C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S2185C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2185C2)");
    check_base_class_offset(lv, (S2185C4_nt*)(S2185C3*), 0, "S2185C2");
    check_base_class_offset(lv, (S2185C3*), 0, "S2185C2");
    check_field_offset(lv, s2185c2f0, ABISELECT(232,140), "S2185C2.s2185c2f0");
    test_class_info(&lv, &cd_S2185C2);
    dp->~S2185C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2185C2(Test_S2185C2, "S2185C2", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S2185C2C1Ev();
extern void _ZN7S2185C2D1Ev();
Name_Map name_map_S2185C2[] = {
  NSPAIR(_ZN7S2185C2C1Ev),
  NSPAIR(_ZN7S2185C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2185C4_nt;
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
extern  VTBL_ENTRY _ZTV10S2185C4_nt[];
extern Class_Descriptor cd_S2185C3;
extern VTBL_ENTRY _ZTI7S2185C3[];
extern  VTBL_ENTRY _ZTV7S2185C3[];
static Base_Class bases_S2185C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2185C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2185C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2185C2[];
extern void _ZN7S2185C2D1Ev();
extern void _ZN7S2185C2D0Ev();
extern void _ZN10S2185C4_nt2v3Ev();
extern void _ZN10S2185C4_nt2v4Ev();
extern void _ZN10S2185C4_nt2v5Ev();
extern void _ZN7S2185C32v6Ev();
extern void _ZN7S2185C32v7Ev();
extern void _ZN7S2185C32v8Ev();
extern void _ZN7S2185C32v9Ev();
extern void _ZN7S2185C23v10Ev();
extern void _ZN7S2185C23v11Ev();
extern void _ZN7S2185C23v12Ev();
static  VTBL_ENTRY vtc_S2185C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2185C2[0]),
  (VTBL_ENTRY)&_ZN7S2185C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2185C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S2185C2[];
extern  VTBL_ENTRY _ZTV7S2185C2[];
Class_Descriptor cd_S2185C2 = {  "S2185C2", // class name
  bases_S2185C2, 2,
  &(vtc_S2185C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S2185C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2185C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2185C1  : S2185C2 {
  ::S2121C20_nt s2185c1f0;
  ::S2121C20_nt s2185c1f1;
  void *s2185c1f2;
  virtual  ~S2185C1(); // _ZN7S2185C1D1Ev
  virtual void  v1(); // _ZN7S2185C12v1Ev
  virtual void  v2(); // _ZN7S2185C12v2Ev
  S2185C1(); // tgen
};
//SIG(1 S2185C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp FC7{ vd m FC8{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC9{ m FC5 FC10{ m Fp Fi FC11{ m}}}} Fi[2] Fp Fi FC12{ m Fp[2]} Fi} vd v10 v11 v12 Fp} vd v1 v2 FC5 FC5 Fp}


 S2185C1 ::~S2185C1(){ note_dtor("S2185C1", this);}
void  S2185C1 ::v1(){vfunc_called(this, "_ZN7S2185C12v1Ev");}
void  S2185C1 ::v2(){vfunc_called(this, "_ZN7S2185C12v2Ev");}
S2185C1 ::S2185C1(){ note_ctor("S2185C1", this);} // tgen

static void Test_S2185C1()
{
  extern Class_Descriptor cd_S2185C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,44)];
    init_test(&cd_S2185C1, buf);
    S2185C1 *dp, &lv = *(dp=new (buf) S2185C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,172), "sizeof(S2185C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2185C1)");
    check_base_class_offset(lv, (S2185C4_nt*)(S2185C3*)(S2185C2*), 0, "S2185C1");
    check_base_class_offset(lv, (S2185C3*)(S2185C2*), 0, "S2185C1");
    check_base_class_offset(lv, (S2185C2*), 0, "S2185C1");
    check_field_offset(lv, s2185c1f0, ABISELECT(240,144), "S2185C1.s2185c1f0");
    check_field_offset(lv, s2185c1f1, ABISELECT(256,156), "S2185C1.s2185c1f1");
    check_field_offset(lv, s2185c1f2, ABISELECT(272,168), "S2185C1.s2185c1f2");
    test_class_info(&lv, &cd_S2185C1);
    dp->~S2185C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2185C1(Test_S2185C1, "S2185C1", ABISELECT(280,172));

#else // __cplusplus

extern void _ZN7S2185C1C1Ev();
extern void _ZN7S2185C1D1Ev();
Name_Map name_map_S2185C1[] = {
  NSPAIR(_ZN7S2185C1C1Ev),
  NSPAIR(_ZN7S2185C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2185C4_nt;
extern VTBL_ENTRY _ZTI10S2185C4_nt[];
extern  VTBL_ENTRY _ZTV10S2185C4_nt[];
extern Class_Descriptor cd_S2185C3;
extern VTBL_ENTRY _ZTI7S2185C3[];
extern  VTBL_ENTRY _ZTV7S2185C3[];
extern Class_Descriptor cd_S2185C2;
extern VTBL_ENTRY _ZTI7S2185C2[];
extern  VTBL_ENTRY _ZTV7S2185C2[];
static Base_Class bases_S2185C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2185C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2185C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2185C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2185C1[];
extern void _ZN7S2185C1D1Ev();
extern void _ZN7S2185C1D0Ev();
extern void _ZN10S2185C4_nt2v3Ev();
extern void _ZN10S2185C4_nt2v4Ev();
extern void _ZN10S2185C4_nt2v5Ev();
extern void _ZN7S2185C32v6Ev();
extern void _ZN7S2185C32v7Ev();
extern void _ZN7S2185C32v8Ev();
extern void _ZN7S2185C32v9Ev();
extern void _ZN7S2185C23v10Ev();
extern void _ZN7S2185C23v11Ev();
extern void _ZN7S2185C23v12Ev();
extern void _ZN7S2185C12v1Ev();
extern void _ZN7S2185C12v2Ev();
static  VTBL_ENTRY vtc_S2185C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2185C1[0]),
  (VTBL_ENTRY)&_ZN7S2185C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2185C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2185C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2185C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2185C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2185C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2185C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2185C1[];
extern  VTBL_ENTRY _ZTV7S2185C1[];
Class_Descriptor cd_S2185C1 = {  "S2185C1", // class name
  bases_S2185C1, 3,
  &(vtc_S2185C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,172), // object size
  NSPAIRA(_ZTI7S2185C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2185C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4840C3  {
  ::S2185C10_nt s4840c3f0;
  int s4840c3f1[2];
  char s4840c3f2;
  virtual  ~S4840C3(); // _ZN7S4840C3D1Ev
  virtual void  v3(); // _ZN7S4840C32v3Ev
  virtual void  v4(); // _ZN7S4840C32v4Ev
  virtual void  v5(); // _ZN7S4840C32v5Ev
  S4840C3(); // tgen
};
//SIG(-1 S4840C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4840C3 ::~S4840C3(){ note_dtor("S4840C3", this);}
void  S4840C3 ::v3(){vfunc_called(this, "_ZN7S4840C32v3Ev");}
void  S4840C3 ::v4(){vfunc_called(this, "_ZN7S4840C32v4Ev");}
void  S4840C3 ::v5(){vfunc_called(this, "_ZN7S4840C32v5Ev");}
S4840C3 ::S4840C3(){ note_ctor("S4840C3", this);} // tgen

static void Test_S4840C3()
{
  extern Class_Descriptor cd_S4840C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4840C3, buf);
    S4840C3 *dp, &lv = *(dp=new (buf) S4840C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4840C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4840C3)");
    check_field_offset(lv, s4840c3f0, ABISELECT(8,4), "S4840C3.s4840c3f0");
    check_field_offset(lv, s4840c3f1, ABISELECT(24,16), "S4840C3.s4840c3f1");
    check_field_offset(lv, s4840c3f2, ABISELECT(32,24), "S4840C3.s4840c3f2");
    test_class_info(&lv, &cd_S4840C3);
    dp->~S4840C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4840C3(Test_S4840C3, "S4840C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4840C3C1Ev();
extern void _ZN7S4840C3D1Ev();
Name_Map name_map_S4840C3[] = {
  NSPAIR(_ZN7S4840C3C1Ev),
  NSPAIR(_ZN7S4840C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4840C3[];
extern void _ZN7S4840C3D1Ev();
extern void _ZN7S4840C3D0Ev();
extern void _ZN7S4840C32v3Ev();
extern void _ZN7S4840C32v4Ev();
extern void _ZN7S4840C32v5Ev();
static  VTBL_ENTRY vtc_S4840C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4840C3[0]),
  (VTBL_ENTRY)&_ZN7S4840C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4840C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4840C3[];
extern  VTBL_ENTRY _ZTV7S4840C3[];
Class_Descriptor cd_S4840C3 = {  "S4840C3", // class name
  0,0,//no base classes
  &(vtc_S4840C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4840C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4840C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4840C2  : S4840C3 {
  void *s4840c2f0;
  ::S2185C7_nt s4840c2f1;
  int s4840c2f2[2];
  void *s4840c2f3;
  int s4840c2f4;
  ::S21811C2_nt s4840c2f5;
  int s4840c2f6;
  virtual  ~S4840C2(); // _ZN7S4840C2D1Ev
  virtual void  v6(); // _ZN7S4840C22v6Ev
  virtual void  v7(); // _ZN7S4840C22v7Ev
  virtual void  v8(); // _ZN7S4840C22v8Ev
  virtual void  v9(); // _ZN7S4840C22v9Ev
  S4840C2(); // tgen
};
//SIG(-1 S4840C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp FC5{ vd m FC6{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC7{ m FC8{ m Fp Fi FC9{ m}} FC3}} Fi[2] Fp Fi FC10{ m Fp[2]} Fi}


 S4840C2 ::~S4840C2(){ note_dtor("S4840C2", this);}
void  S4840C2 ::v6(){vfunc_called(this, "_ZN7S4840C22v6Ev");}
void  S4840C2 ::v7(){vfunc_called(this, "_ZN7S4840C22v7Ev");}
void  S4840C2 ::v8(){vfunc_called(this, "_ZN7S4840C22v8Ev");}
void  S4840C2 ::v9(){vfunc_called(this, "_ZN7S4840C22v9Ev");}
S4840C2 ::S4840C2(){ note_ctor("S4840C2", this);} // tgen

static void Test_S4840C2()
{
  extern Class_Descriptor cd_S4840C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S4840C2, buf);
    S4840C2 *dp, &lv = *(dp=new (buf) S4840C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S4840C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4840C2)");
    check_base_class_offset(lv, (S4840C3*), 0, "S4840C2");
    check_field_offset(lv, s4840c2f0, ABISELECT(40,28), "S4840C2.s4840c2f0");
    check_field_offset(lv, s4840c2f1, ABISELECT(48,32), "S4840C2.s4840c2f1");
    check_field_offset(lv, s4840c2f2, ABISELECT(184,112), "S4840C2.s4840c2f2");
    check_field_offset(lv, s4840c2f3, ABISELECT(192,120), "S4840C2.s4840c2f3");
    check_field_offset(lv, s4840c2f4, ABISELECT(200,124), "S4840C2.s4840c2f4");
    check_field_offset(lv, s4840c2f5, ABISELECT(208,128), "S4840C2.s4840c2f5");
    check_field_offset(lv, s4840c2f6, ABISELECT(224,136), "S4840C2.s4840c2f6");
    test_class_info(&lv, &cd_S4840C2);
    dp->~S4840C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4840C2(Test_S4840C2, "S4840C2", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S4840C2C1Ev();
extern void _ZN7S4840C2D1Ev();
Name_Map name_map_S4840C2[] = {
  NSPAIR(_ZN7S4840C2C1Ev),
  NSPAIR(_ZN7S4840C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4840C3;
extern VTBL_ENTRY _ZTI7S4840C3[];
extern  VTBL_ENTRY _ZTV7S4840C3[];
static Base_Class bases_S4840C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4840C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4840C2[];
extern void _ZN7S4840C2D1Ev();
extern void _ZN7S4840C2D0Ev();
extern void _ZN7S4840C32v3Ev();
extern void _ZN7S4840C32v4Ev();
extern void _ZN7S4840C32v5Ev();
extern void _ZN7S4840C22v6Ev();
extern void _ZN7S4840C22v7Ev();
extern void _ZN7S4840C22v8Ev();
extern void _ZN7S4840C22v9Ev();
static  VTBL_ENTRY vtc_S4840C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4840C2[0]),
  (VTBL_ENTRY)&_ZN7S4840C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4840C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4840C2[];
extern  VTBL_ENTRY _ZTV7S4840C2[];
Class_Descriptor cd_S4840C2 = {  "S4840C2", // class name
  bases_S4840C2, 1,
  &(vtc_S4840C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S4840C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4840C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4840C1  : S4840C2 {
  void *s4840c1f0;
  ::S3350C4_nt s4840c1f1;
  void *s4840c1f2[2];
  ::S21811C13_nt s4840c1f3;
  virtual  ~S4840C1(); // _ZN7S4840C1D1Ev
  virtual void  v1(); // _ZN7S4840C12v1Ev
  virtual void  v2(); // _ZN7S4840C12v2Ev
  S4840C1(); // tgen
};
//SIG(1 S4840C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp FC6{ vd m FC7{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC8{ m FC9{ m Fp Fi FC10{ m}} FC4}} Fi[2] Fp Fi FC11{ m Fp[2]} Fi} vd v1 v2 Fp FC12{ m Fi[2]} Fp[2] FC13{ m Fp}}


 S4840C1 ::~S4840C1(){ note_dtor("S4840C1", this);}
void  S4840C1 ::v1(){vfunc_called(this, "_ZN7S4840C12v1Ev");}
void  S4840C1 ::v2(){vfunc_called(this, "_ZN7S4840C12v2Ev");}
S4840C1 ::S4840C1(){ note_ctor("S4840C1", this);} // tgen

static void Test_S4840C1()
{
  extern Class_Descriptor cd_S4840C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,42)];
    init_test(&cd_S4840C1, buf);
    S4840C1 *dp, &lv = *(dp=new (buf) S4840C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,164), "sizeof(S4840C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4840C1)");
    check_base_class_offset(lv, (S4840C3*)(S4840C2*), 0, "S4840C1");
    check_base_class_offset(lv, (S4840C2*), 0, "S4840C1");
    check_field_offset(lv, s4840c1f0, ABISELECT(232,140), "S4840C1.s4840c1f0");
    check_field_offset(lv, s4840c1f1, ABISELECT(240,144), "S4840C1.s4840c1f1");
    check_field_offset(lv, s4840c1f2, ABISELECT(248,152), "S4840C1.s4840c1f2");
    check_field_offset(lv, s4840c1f3, ABISELECT(264,160), "S4840C1.s4840c1f3");
    test_class_info(&lv, &cd_S4840C1);
    dp->~S4840C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4840C1(Test_S4840C1, "S4840C1", ABISELECT(272,164));

#else // __cplusplus

extern void _ZN7S4840C1C1Ev();
extern void _ZN7S4840C1D1Ev();
Name_Map name_map_S4840C1[] = {
  NSPAIR(_ZN7S4840C1C1Ev),
  NSPAIR(_ZN7S4840C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4840C3;
extern VTBL_ENTRY _ZTI7S4840C3[];
extern  VTBL_ENTRY _ZTV7S4840C3[];
extern Class_Descriptor cd_S4840C2;
extern VTBL_ENTRY _ZTI7S4840C2[];
extern  VTBL_ENTRY _ZTV7S4840C2[];
static Base_Class bases_S4840C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4840C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4840C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4840C1[];
extern void _ZN7S4840C1D1Ev();
extern void _ZN7S4840C1D0Ev();
extern void _ZN7S4840C32v3Ev();
extern void _ZN7S4840C32v4Ev();
extern void _ZN7S4840C32v5Ev();
extern void _ZN7S4840C22v6Ev();
extern void _ZN7S4840C22v7Ev();
extern void _ZN7S4840C22v8Ev();
extern void _ZN7S4840C22v9Ev();
extern void _ZN7S4840C12v1Ev();
extern void _ZN7S4840C12v2Ev();
static  VTBL_ENTRY vtc_S4840C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4840C1[0]),
  (VTBL_ENTRY)&_ZN7S4840C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4840C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4840C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4840C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4840C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4840C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4840C1[];
extern  VTBL_ENTRY _ZTV7S4840C1[];
Class_Descriptor cd_S4840C1 = {  "S4840C1", // class name
  bases_S4840C1, 2,
  &(vtc_S4840C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,164), // object size
  NSPAIRA(_ZTI7S4840C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4840C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2186C4  {
  ::S2185C10_nt s2186c4f0;
  int s2186c4f1[2];
  char s2186c4f2;
  virtual  ~S2186C4(); // _ZN7S2186C4D1Ev
  virtual void  v3(); // _ZN7S2186C42v3Ev
  virtual void  v4(); // _ZN7S2186C42v4Ev
  virtual void  v5(); // _ZN7S2186C42v5Ev
  S2186C4(); // tgen
};
//SIG(-1 S2186C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2186C4 ::~S2186C4(){ note_dtor("S2186C4", this);}
void  S2186C4 ::v3(){vfunc_called(this, "_ZN7S2186C42v3Ev");}
void  S2186C4 ::v4(){vfunc_called(this, "_ZN7S2186C42v4Ev");}
void  S2186C4 ::v5(){vfunc_called(this, "_ZN7S2186C42v5Ev");}
S2186C4 ::S2186C4(){ note_ctor("S2186C4", this);} // tgen

static void Test_S2186C4()
{
  extern Class_Descriptor cd_S2186C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2186C4, buf);
    S2186C4 *dp, &lv = *(dp=new (buf) S2186C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2186C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2186C4)");
    check_field_offset(lv, s2186c4f0, ABISELECT(8,4), "S2186C4.s2186c4f0");
    check_field_offset(lv, s2186c4f1, ABISELECT(24,16), "S2186C4.s2186c4f1");
    check_field_offset(lv, s2186c4f2, ABISELECT(32,24), "S2186C4.s2186c4f2");
    test_class_info(&lv, &cd_S2186C4);
    dp->~S2186C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2186C4(Test_S2186C4, "S2186C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2186C4C1Ev();
extern void _ZN7S2186C4D1Ev();
Name_Map name_map_S2186C4[] = {
  NSPAIR(_ZN7S2186C4C1Ev),
  NSPAIR(_ZN7S2186C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2186C4[];
extern void _ZN7S2186C4D1Ev();
extern void _ZN7S2186C4D0Ev();
extern void _ZN7S2186C42v3Ev();
extern void _ZN7S2186C42v4Ev();
extern void _ZN7S2186C42v5Ev();
static  VTBL_ENTRY vtc_S2186C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2186C4[0]),
  (VTBL_ENTRY)&_ZN7S2186C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2186C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2186C4[];
extern  VTBL_ENTRY _ZTV7S2186C4[];
Class_Descriptor cd_S2186C4 = {  "S2186C4", // class name
  0,0,//no base classes
  &(vtc_S2186C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2186C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2186C4),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2186C3  : S2186C4 {
  void *s2186c3f0;
  ::S2185C7_nt s2186c3f1;
  int s2186c3f2[2];
  void *s2186c3f3;
  int s2186c3f4;
  ::S21811C2_nt s2186c3f5;
  int s2186c3f6;
  virtual  ~S2186C3(); // _ZN7S2186C3D1Ev
  virtual void  v6(); // _ZN7S2186C32v6Ev
  virtual void  v7(); // _ZN7S2186C32v7Ev
  virtual void  v8(); // _ZN7S2186C32v8Ev
  virtual void  v9(); // _ZN7S2186C32v9Ev
  S2186C3(); // tgen
};
//SIG(-1 S2186C3) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp FC5{ vd m FC6{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC7{ m FC8{ m Fp Fi FC9{ m}} FC3}} Fi[2] Fp Fi FC10{ m Fp[2]} Fi}


 S2186C3 ::~S2186C3(){ note_dtor("S2186C3", this);}
void  S2186C3 ::v6(){vfunc_called(this, "_ZN7S2186C32v6Ev");}
void  S2186C3 ::v7(){vfunc_called(this, "_ZN7S2186C32v7Ev");}
void  S2186C3 ::v8(){vfunc_called(this, "_ZN7S2186C32v8Ev");}
void  S2186C3 ::v9(){vfunc_called(this, "_ZN7S2186C32v9Ev");}
S2186C3 ::S2186C3(){ note_ctor("S2186C3", this);} // tgen

static void Test_S2186C3()
{
  extern Class_Descriptor cd_S2186C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S2186C3, buf);
    S2186C3 *dp, &lv = *(dp=new (buf) S2186C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S2186C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2186C3)");
    check_base_class_offset(lv, (S2186C4*), 0, "S2186C3");
    check_field_offset(lv, s2186c3f0, ABISELECT(40,28), "S2186C3.s2186c3f0");
    check_field_offset(lv, s2186c3f1, ABISELECT(48,32), "S2186C3.s2186c3f1");
    check_field_offset(lv, s2186c3f2, ABISELECT(184,112), "S2186C3.s2186c3f2");
    check_field_offset(lv, s2186c3f3, ABISELECT(192,120), "S2186C3.s2186c3f3");
    check_field_offset(lv, s2186c3f4, ABISELECT(200,124), "S2186C3.s2186c3f4");
    check_field_offset(lv, s2186c3f5, ABISELECT(208,128), "S2186C3.s2186c3f5");
    check_field_offset(lv, s2186c3f6, ABISELECT(224,136), "S2186C3.s2186c3f6");
    test_class_info(&lv, &cd_S2186C3);
    dp->~S2186C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2186C3(Test_S2186C3, "S2186C3", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S2186C3C1Ev();
extern void _ZN7S2186C3D1Ev();
Name_Map name_map_S2186C3[] = {
  NSPAIR(_ZN7S2186C3C1Ev),
  NSPAIR(_ZN7S2186C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2186C4;
extern VTBL_ENTRY _ZTI7S2186C4[];
extern  VTBL_ENTRY _ZTV7S2186C4[];
static Base_Class bases_S2186C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2186C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2186C3[];
extern void _ZN7S2186C3D1Ev();
extern void _ZN7S2186C3D0Ev();
extern void _ZN7S2186C42v3Ev();
extern void _ZN7S2186C42v4Ev();
extern void _ZN7S2186C42v5Ev();
extern void _ZN7S2186C32v6Ev();
extern void _ZN7S2186C32v7Ev();
extern void _ZN7S2186C32v8Ev();
extern void _ZN7S2186C32v9Ev();
static  VTBL_ENTRY vtc_S2186C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2186C3[0]),
  (VTBL_ENTRY)&_ZN7S2186C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2186C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S2186C3[];
extern  VTBL_ENTRY _ZTV7S2186C3[];
Class_Descriptor cd_S2186C3 = {  "S2186C3", // class name
  bases_S2186C3, 1,
  &(vtc_S2186C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S2186C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2186C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2186C2  : S2186C3 {
  void *s2186c2f0;
  virtual  ~S2186C2(); // _ZN7S2186C2D1Ev
  virtual void  v10(); // _ZN7S2186C23v10Ev
  virtual void  v11(); // _ZN7S2186C23v11Ev
  virtual void  v12(); // _ZN7S2186C23v12Ev
  S2186C2(); // tgen
};
//SIG(-1 S2186C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 Fp FC6{ vd m FC7{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC8{ m FC9{ m Fp Fi FC10{ m}} FC4}} Fi[2] Fp Fi FC11{ m Fp[2]} Fi} vd v1 v2 v3 Fp}


 S2186C2 ::~S2186C2(){ note_dtor("S2186C2", this);}
void  S2186C2 ::v10(){vfunc_called(this, "_ZN7S2186C23v10Ev");}
void  S2186C2 ::v11(){vfunc_called(this, "_ZN7S2186C23v11Ev");}
void  S2186C2 ::v12(){vfunc_called(this, "_ZN7S2186C23v12Ev");}
S2186C2 ::S2186C2(){ note_ctor("S2186C2", this);} // tgen

static void Test_S2186C2()
{
  extern Class_Descriptor cd_S2186C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S2186C2, buf);
    S2186C2 *dp, &lv = *(dp=new (buf) S2186C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S2186C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2186C2)");
    check_base_class_offset(lv, (S2186C4*)(S2186C3*), 0, "S2186C2");
    check_base_class_offset(lv, (S2186C3*), 0, "S2186C2");
    check_field_offset(lv, s2186c2f0, ABISELECT(232,140), "S2186C2.s2186c2f0");
    test_class_info(&lv, &cd_S2186C2);
    dp->~S2186C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2186C2(Test_S2186C2, "S2186C2", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S2186C2C1Ev();
extern void _ZN7S2186C2D1Ev();
Name_Map name_map_S2186C2[] = {
  NSPAIR(_ZN7S2186C2C1Ev),
  NSPAIR(_ZN7S2186C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2186C4;
extern VTBL_ENTRY _ZTI7S2186C4[];
extern  VTBL_ENTRY _ZTV7S2186C4[];
extern Class_Descriptor cd_S2186C3;
extern VTBL_ENTRY _ZTI7S2186C3[];
extern  VTBL_ENTRY _ZTV7S2186C3[];
static Base_Class bases_S2186C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2186C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2186C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2186C2[];
extern void _ZN7S2186C2D1Ev();
extern void _ZN7S2186C2D0Ev();
extern void _ZN7S2186C42v3Ev();
extern void _ZN7S2186C42v4Ev();
extern void _ZN7S2186C42v5Ev();
extern void _ZN7S2186C32v6Ev();
extern void _ZN7S2186C32v7Ev();
extern void _ZN7S2186C32v8Ev();
extern void _ZN7S2186C32v9Ev();
extern void _ZN7S2186C23v10Ev();
extern void _ZN7S2186C23v11Ev();
extern void _ZN7S2186C23v12Ev();
static  VTBL_ENTRY vtc_S2186C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2186C2[0]),
  (VTBL_ENTRY)&_ZN7S2186C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2186C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S2186C2[];
extern  VTBL_ENTRY _ZTV7S2186C2[];
Class_Descriptor cd_S2186C2 = {  "S2186C2", // class name
  bases_S2186C2, 2,
  &(vtc_S2186C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S2186C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2186C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2186C1  : S2186C2 {
  void *s2186c1f0;
  virtual  ~S2186C1(); // _ZN7S2186C1D1Ev
  virtual void  v1(); // _ZN7S2186C12v1Ev
  virtual void  v2(); // _ZN7S2186C12v2Ev
  S2186C1(); // tgen
};
//SIG(1 S2186C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp FC7{ vd m FC8{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC9{ m FC10{ m Fp Fi FC11{ m}} FC5}} Fi[2] Fp Fi FC12{ m Fp[2]} Fi} vd v10 v11 v12 Fp} vd v1 v2 Fp}


 S2186C1 ::~S2186C1(){ note_dtor("S2186C1", this);}
void  S2186C1 ::v1(){vfunc_called(this, "_ZN7S2186C12v1Ev");}
void  S2186C1 ::v2(){vfunc_called(this, "_ZN7S2186C12v2Ev");}
S2186C1 ::S2186C1(){ note_ctor("S2186C1", this);} // tgen

static void Test_S2186C1()
{
  extern Class_Descriptor cd_S2186C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,38)];
    init_test(&cd_S2186C1, buf);
    S2186C1 *dp, &lv = *(dp=new (buf) S2186C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,148), "sizeof(S2186C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2186C1)");
    check_base_class_offset(lv, (S2186C4*)(S2186C3*)(S2186C2*), 0, "S2186C1");
    check_base_class_offset(lv, (S2186C3*)(S2186C2*), 0, "S2186C1");
    check_base_class_offset(lv, (S2186C2*), 0, "S2186C1");
    check_field_offset(lv, s2186c1f0, ABISELECT(240,144), "S2186C1.s2186c1f0");
    test_class_info(&lv, &cd_S2186C1);
    dp->~S2186C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2186C1(Test_S2186C1, "S2186C1", ABISELECT(248,148));

#else // __cplusplus

extern void _ZN7S2186C1C1Ev();
extern void _ZN7S2186C1D1Ev();
Name_Map name_map_S2186C1[] = {
  NSPAIR(_ZN7S2186C1C1Ev),
  NSPAIR(_ZN7S2186C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2186C4;
extern VTBL_ENTRY _ZTI7S2186C4[];
extern  VTBL_ENTRY _ZTV7S2186C4[];
extern Class_Descriptor cd_S2186C3;
extern VTBL_ENTRY _ZTI7S2186C3[];
extern  VTBL_ENTRY _ZTV7S2186C3[];
extern Class_Descriptor cd_S2186C2;
extern VTBL_ENTRY _ZTI7S2186C2[];
extern  VTBL_ENTRY _ZTV7S2186C2[];
static Base_Class bases_S2186C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2186C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2186C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2186C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2186C1[];
extern void _ZN7S2186C1D1Ev();
extern void _ZN7S2186C1D0Ev();
extern void _ZN7S2186C42v3Ev();
extern void _ZN7S2186C42v4Ev();
extern void _ZN7S2186C42v5Ev();
extern void _ZN7S2186C32v6Ev();
extern void _ZN7S2186C32v7Ev();
extern void _ZN7S2186C32v8Ev();
extern void _ZN7S2186C32v9Ev();
extern void _ZN7S2186C23v10Ev();
extern void _ZN7S2186C23v11Ev();
extern void _ZN7S2186C23v12Ev();
extern void _ZN7S2186C12v1Ev();
extern void _ZN7S2186C12v2Ev();
static  VTBL_ENTRY vtc_S2186C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2186C1[0]),
  (VTBL_ENTRY)&_ZN7S2186C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2186C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2186C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2186C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2186C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2186C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2186C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2186C1[];
extern  VTBL_ENTRY _ZTV7S2186C1[];
Class_Descriptor cd_S2186C1 = {  "S2186C1", // class name
  bases_S2186C1, 3,
  &(vtc_S2186C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,148), // object size
  NSPAIRA(_ZTI7S2186C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2186C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C3  {
  void *s20683c3f0[7];
  void  mf20683c3(); // _ZN8S20683C39mf20683c3Ev
};
//SIG(-1 S20683C3) C1{ m Fp[7]}


void  S20683C3 ::mf20683c3(){}

static void Test_S20683C3()
{
  {
    init_simple_test("S20683C3");
    S20683C3 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20683C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20683C3)");
    check_field_offset(lv, s20683c3f0, 0, "S20683C3.s20683c3f0");
  }
}
static Arrange_To_Call_Me vS20683C3(Test_S20683C3, "S20683C3", ABISELECT(56,28));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20683C3[];
VTBL_ENTRY *P__ZTI8S20683C3 = _ZTI8S20683C3; 
Class_Descriptor cd_S20683C3 = {  "S20683C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S20683C3),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S20683C5_nt  {
  void *s20683c5f0;
  void  mf20683c5(); // _ZN11S20683C5_nt9mf20683c5Ev
};
//SIG(1 S20683C5_nt) U1{ m Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20683C4  : virtual S20683C3 {
  ::S20683C5_nt s20683c4f0;
  long double s20683c4f1;
  virtual  ~S20683C4(); // _ZN8S20683C4D2Ev
  S20683C4(); // tgen
};
//SIG(-1 S20683C4) C1{ VBC2{ m Fp[7]} vd FU3{ m Fp} FD}


 S20683C4 ::~S20683C4(){ note_dtor("S20683C4", this);}
S20683C4 ::S20683C4(){ note_ctor("S20683C4", this);} // tgen

static void Test_S20683C4()
{
  extern Class_Descriptor cd_S20683C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20683C4, buf);
    S20683C4 *dp, &lv = *(dp=new (buf) S20683C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20683C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C4)");
    check_base_class_offset(lv, (S20683C3*), ABISELECT(32,20), "S20683C4");
    check_field_offset(lv, s20683c4f0, ABISELECT(8,4), "S20683C4.s20683c4f0");
    check_field_offset(lv, s20683c4f1, ABISELECT(16,8), "S20683C4.s20683c4f1");
    test_class_info(&lv, &cd_S20683C4);
    dp->~S20683C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C4(Test_S20683C4, "S20683C4", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20683C4C1Ev();
extern void _ZN8S20683C4D2Ev();
Name_Map name_map_S20683C4[] = {
  NSPAIR(_ZN8S20683C4C1Ev),
  NSPAIR(_ZN8S20683C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
static Base_Class bases_S20683C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C4[];
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY vtc_S20683C4[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern VTBL_ENTRY _ZTV8S20683C4[];
static  VTT_ENTRY vtt_S20683C4[] = {
  {&(_ZTV8S20683C4[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
Class_Descriptor cd_S20683C4 = {  "S20683C4", // class name
  bases_S20683C4, 1,
  &(vtc_S20683C4[0]), // expected_vtbl_contents
  &(vtt_S20683C4[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20683C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20683C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C2  : virtual S20683C3 , S20683C4 {
  void *s20683c2f0;
  virtual  ~S20683C2(); // _ZN8S20683C2D2Ev
  S20683C2(); // tgen
};
//SIG(-1 S20683C2) C1{ VBC2{ m Fp[7]} BC3{ VBC2 vd FU4{ m Fp} FD} vd Fp}


 S20683C2 ::~S20683C2(){ note_dtor("S20683C2", this);}
S20683C2 ::S20683C2(){ note_ctor("S20683C2", this);} // tgen

static void Test_S20683C2()
{
  extern Class_Descriptor cd_S20683C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S20683C2, buf);
    S20683C2 *dp, &lv = *(dp=new (buf) S20683C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20683C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C2)");
    check_base_class_offset(lv, (S20683C3*), ABISELECT(40,24), "S20683C2");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(40,24), "S20683C2");
    check_base_class_offset(lv, (S20683C4*), 0, "S20683C2");
    check_field_offset(lv, s20683c2f0, ABISELECT(32,20), "S20683C2.s20683c2f0");
    test_class_info(&lv, &cd_S20683C2);
    dp->~S20683C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C2(Test_S20683C2, "S20683C2", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20683C2C1Ev();
extern void _ZN8S20683C2D2Ev();
Name_Map name_map_S20683C2[] = {
  NSPAIR(_ZN8S20683C2C1Ev),
  NSPAIR(_ZN8S20683C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
static Base_Class bases_S20683C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C2[];
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY vtc_S20683C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern VTBL_ENTRY _ZTV8S20683C2[];
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__8S20683C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTT_ENTRY vtt_S20683C2[] = {
  {&(_ZTV8S20683C2[3]),  3,5},
  {&(_tg__ZTV8S20683C4__8S20683C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
Class_Descriptor cd_S20683C2 = {  "S20683C2", // class name
  bases_S20683C2, 2,
  &(vtc_S20683C2[0]), // expected_vtbl_contents
  &(vtt_S20683C2[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20683C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20683C2),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C9  : S20683C2 , S20683C3 , virtual S20683C4 {
  __tsi64 s20683c9f0:7;
  void *s20683c9f1;
  virtual  ~S20683C9(); // _ZN8S20683C9D2Ev
  S20683C9(); // tgen
};
//SIG(-1 S20683C9) C1{ BC2{ VBC3{ m Fp[7]} BC4{ VBC3 vd FU5{ m Fp} FD} vd Fp} BC3 VBC4 vd FL:7 Fp}


 S20683C9 ::~S20683C9(){ note_dtor("S20683C9", this);}
S20683C9 ::S20683C9(){ note_ctor("S20683C9", this);} // tgen

static void Test_S20683C9()
{
  extern Class_Descriptor cd_S20683C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,28)];
    init_test(&cd_S20683C9, buf);
    S20683C9 *dp, &lv = *(dp=new (buf) S20683C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,108), "sizeof(S20683C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C9)");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*), ABISELECT(112,60), "S20683C9");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*), ABISELECT(112,60), "S20683C9");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(112,60), "S20683C9");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*), 0, "S20683C9");
    check_base_class_offset(lv, (S20683C2*), 0, "S20683C9");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*), ABISELECT(40,24), "S20683C9");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*), ABISELECT(176,88), "S20683C9");
    set_bf_and_test(lv, s20683c9f0, ABISELECT(96,52), 0, 7, 1, "S20683C9");
    set_bf_and_test(lv, s20683c9f0, ABISELECT(96,52), 0, 7, hide_sll(1LL<<6), "S20683C9");
    check_field_offset(lv, s20683c9f1, ABISELECT(104,56), "S20683C9.s20683c9f1");
    test_class_info(&lv, &cd_S20683C9);
    dp->~S20683C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C9(Test_S20683C9, "S20683C9", ABISELECT(208,108));

#else // __cplusplus

extern void _ZN8S20683C9C1Ev();
extern void _ZN8S20683C9D2Ev();
Name_Map name_map_S20683C9[] = {
  NSPAIR(_ZN8S20683C9C1Ev),
  NSPAIR(_ZN8S20683C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
static Base_Class bases_S20683C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20683C3,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20683C4,    ABISELECT(176,88), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C9[];
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C9[] = {
  ABISELECT(176,88),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
  ABISELECT(-176,-88),
  ABISELECT(-64,-28),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20683C9[];
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C2__8S20683C9[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C2__8S20683C9[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTT_ENTRY vtt_S20683C9[] = {
  {&(_ZTV8S20683C9[4]),  4,12},
  {&(_tg__ZTV8S20683C2__8S20683C9[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C2__8S20683C9[3]),  3,5},
  {&(_ZTV8S20683C9[10]),  10,12},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C9 = {  "S20683C9", // class name
  bases_S20683C9, 5,
  &(vtc_S20683C9[0]), // expected_vtbl_contents
  &(vtt_S20683C9[0]), // expected_vtt_contents
  ABISELECT(208,108), // object size
  NSPAIRA(_ZTI8S20683C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20683C9),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C9),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C10  : virtual S20683C9 {
  virtual  ~S20683C10(); // _ZN9S20683C10D2Ev
  S20683C10(); // tgen
};
//SIG(-1 S20683C10) C1{ VBC2{ BC3{ VBC4{ m Fp[7]} BC5{ VBC4 vd FU6{ m Fp} FD} vd Fp} BC4 VBC5 vd FL:7 Fp} vd}


 S20683C10 ::~S20683C10(){ note_dtor("S20683C10", this);}
S20683C10 ::S20683C10(){ note_ctor("S20683C10", this);} // tgen

static void Test_S20683C10()
{
  extern Class_Descriptor cd_S20683C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,29)];
    init_test(&cd_S20683C10, buf);
    S20683C10 *dp, &lv = *(dp=new (buf) S20683C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S20683C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C10)");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(128,64), "S20683C10");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(128,64), "S20683C10");
    /*is_ambiguous_... S20683C10::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(128,64), "S20683C10");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(16,4), "S20683C10");
    check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(16,4), "S20683C10");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(56,28), "S20683C10");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(192,92), "S20683C10");
    check_base_class_offset(lv, (S20683C9*), ABISELECT(16,4), "S20683C10");
    test_class_info(&lv, &cd_S20683C10);
    dp->~S20683C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C10(Test_S20683C10, "S20683C10", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN9S20683C10C1Ev();
extern void _ZN9S20683C10D2Ev();
Name_Map name_map_S20683C10[] = {
  NSPAIR(_ZN9S20683C10C1Ev),
  NSPAIR(_ZN9S20683C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
static Base_Class bases_S20683C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(128,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(192,92), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(16,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20683C10[];
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20683C10D1Ev,_ZThn4_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S20683C10D0Ev,_ZThn4_N9S20683C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn192_N9S20683C10D1Ev,_ZThn92_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn192_N9S20683C10D0Ev,_ZThn92_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C10[] = {
  ABISELECT(192,92),
  ABISELECT(128,64),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
  ABISELECT(-16,-4),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
  ABISELECT(-192,-92),
  ABISELECT(-64,-28),
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S20683C10[];
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10[] = {
  ABISELECT(176,88),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__9S20683C10[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__9S20683C10[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__9S20683C10[] = {
  ABISELECT(-176,-88),
  ABISELECT(-64,-28),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTT_ENTRY vtt_S20683C10[] = {
  {&(_ZTV9S20683C10[5]),  5,20},
  {&(_ZTV9S20683C10[12]),  12,20},
  {&(_ZTV9S20683C10[18]),  18,20},
  {&(_tg__ZTV8S20683C9__9S20683C10[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__9S20683C10[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__9S20683C10[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__9S20683C10[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20683C10D0Ev,_ZThn92_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20683C10D1Ev,_ZThn92_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20683C10D0Ev,_ZThn4_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20683C10D1Ev,_ZThn4_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C10 = {  "S20683C10", // class name
  bases_S20683C10, 6,
  &(vtc_S20683C10[0]), // expected_vtbl_contents
  &(vtt_S20683C10[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI9S20683C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20683C10),20, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20683C10),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C8  : virtual S20683C9 , virtual S20683C10 , S20683C3 {
  virtual  ~S20683C8(); // _ZN8S20683C8D2Ev
  S20683C8(); // tgen
};
//SIG(-1 S20683C8) C1{ VBC2{ BC3{ VBC4{ m Fp[7]} BC5{ VBC4 vd FU6{ m Fp} FD} vd Fp} BC4 VBC5 vd FL:7 Fp} VBC7{ VBC2 vd} BC4 vd}


 S20683C8 ::~S20683C8(){ note_dtor("S20683C8", this);}
S20683C8 ::S20683C8(){ note_ctor("S20683C8", this);} // tgen

static void Test_S20683C8()
{
  extern Class_Descriptor cd_S20683C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,36)];
    init_test(&cd_S20683C8, buf);
    S20683C8 *dp, &lv = *(dp=new (buf) S20683C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,140), "sizeof(S20683C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C8)");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(176,92), "S20683C8");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(176,92), "S20683C8");
    /*is_ambiguous_... S20683C8::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(176,92), "S20683C8");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(64,32), "S20683C8");
    check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(64,32), "S20683C8");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(104,56), "S20683C8");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(240,120), "S20683C8");
    check_base_class_offset(lv, (S20683C9*), ABISELECT(64,32), "S20683C8");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*), ABISELECT(64,32), "S20683C8");
    check_base_class_offset(lv, (S20683C10*), 0, "S20683C8");
    /*is_ambiguous_... S20683C8::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*), ABISELECT(8,4), "S20683C8");
    test_class_info(&lv, &cd_S20683C8);
    dp->~S20683C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C8(Test_S20683C8, "S20683C8", ABISELECT(272,140));

#else // __cplusplus

extern void _ZN8S20683C8C1Ev();
extern void _ZN8S20683C8D2Ev();
Name_Map name_map_S20683C8[] = {
  NSPAIR(_ZN8S20683C8C1Ev),
  NSPAIR(_ZN8S20683C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
static Base_Class bases_S20683C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(240,120), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(64,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C8[];
extern void _ZN8S20683C8D1Ev();
extern void _ZN8S20683C8D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S20683C8D1Ev,_ZThn120_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S20683C8D0Ev,_ZThn120_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C8[] = {
  0,
  0,
  ABISELECT(240,120),
  ABISELECT(176,92),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&_ZN8S20683C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C8D0Ev,
  ABISELECT(-64,-32),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev),
  ABISELECT(-240,-120),
  ABISELECT(-64,-28),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S20683C8[];
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C8[] = {
  ABISELECT(176,88),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__8S20683C8[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__8S20683C8[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__8S20683C8[] = {
  ABISELECT(-176,-88),
  ABISELECT(-64,-28),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C8[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C10__8S20683C8[] = {
  ABISELECT(240,120),
  ABISELECT(176,92),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10__8S20683C8[] = {
  ABISELECT(-64,-32),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn240_N9S20683C10D1Ev,_ZThn120_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn240_N9S20683C10D0Ev,_ZThn120_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10__8S20683C8[] = {
  ABISELECT(-240,-120),
  ABISELECT(-64,-28),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
static  VTT_ENTRY vtt_S20683C8[] = {
  {&(_ZTV8S20683C8[7]),  7,22},
  {&(_ZTV8S20683C8[14]),  14,22},
  {&(_ZTV8S20683C8[20]),  20,22},
  {&(_ZTV8S20683C8[7]),  7,22},
  {&(_tg__ZTV8S20683C9__8S20683C8[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__8S20683C8[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__8S20683C8[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__8S20683C8[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A1__8S20683C8[3]),  3,5},
  {&(_tg__ZTV9S20683C10__8S20683C8[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C10__8S20683C8[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10__8S20683C8[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20683C8[];
extern  VTBL_ENTRY _ZTV8S20683C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C8[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20683C10D0Ev,_ZThn120_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N9S20683C10D1Ev,_ZThn120_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20683C8D0Ev,_ZThn120_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S20683C8D1Ev,_ZThn120_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C8 = {  "S20683C8", // class name
  bases_S20683C8, 8,
  &(vtc_S20683C8[0]), // expected_vtbl_contents
  &(vtt_S20683C8[0]), // expected_vtt_contents
  ABISELECT(272,140), // object size
  NSPAIRA(_ZTI8S20683C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20683C8),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C8),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C11  : virtual S20683C3 {
  ~S20683C11(); // tgen
  S20683C11(); // tgen
};
//SIG(-1 S20683C11) C1{ VBC2{ m Fp[7]}}


S20683C11 ::~S20683C11(){ note_dtor("S20683C11", this);} // tgen
S20683C11 ::S20683C11(){ note_ctor("S20683C11", this);} // tgen

static void Test_S20683C11()
{
  extern Class_Descriptor cd_S20683C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20683C11, buf);
    S20683C11 *dp, &lv = *(dp=new (buf) S20683C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20683C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20683C11)");
    check_base_class_offset(lv, (S20683C3*), ABISELECT(8,4), "S20683C11");
    test_class_info(&lv, &cd_S20683C11);
    dp->~S20683C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C11(Test_S20683C11, "S20683C11", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20683C11C1Ev();
extern void _ZN9S20683C11D1Ev();
Name_Map name_map_S20683C11[] = {
  NSPAIR(_ZN9S20683C11C1Ev),
  NSPAIR(_ZN9S20683C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
static Base_Class bases_S20683C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20683C11[];
static  VTBL_ENTRY vtc_S20683C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern VTBL_ENTRY _ZTV9S20683C11[];
static  VTT_ENTRY vtt_S20683C11[] = {
  {&(_ZTV9S20683C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
Class_Descriptor cd_S20683C11 = {  "S20683C11", // class name
  bases_S20683C11, 1,
  &(vtc_S20683C11[0]), // expected_vtbl_contents
  &(vtt_S20683C11[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20683C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20683C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20683C11),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C13  : virtual S20683C4 , S20683C3 , virtual S20683C11 , virtual S20683C9 , S20683C10 {
  ::S20683C5_nt s20683c13f0;
  ~S20683C13(); // tgen
  S20683C13(); // tgen
};
//SIG(-1 S20683C13) C1{ VBC2{ VBC3{ m Fp[7]} vd FU4{ m Fp} FD} BC3 VBC5{ VBC3} VBC6{ BC7{ VBC3 BC2 vd Fp} BC3 VBC2 vd FL:7 Fp} BC8{ VBC6 vd} FU4}


S20683C13 ::~S20683C13(){ note_dtor("S20683C13", this);} // tgen
S20683C13 ::S20683C13(){ note_ctor("S20683C13", this);} // tgen

static void Test_S20683C13()
{
  extern Class_Descriptor cd_S20683C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,38)];
    init_test(&cd_S20683C13, buf);
    S20683C13 *dp, &lv = *(dp=new (buf) S20683C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,148), "sizeof(S20683C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C13)");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(112,56), "S20683C13");
    check_base_class_offset(lv, (S20683C3*)(S20683C11*), ABISELECT(112,56), "S20683C13");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(112,56), "S20683C13");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(112,56), "S20683C13");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*), ABISELECT(80,36), "S20683C13");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(80,36), "S20683C13");
    /*is_ambiguous_... S20683C13::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*), ABISELECT(8,4), "S20683C13");
    check_base_class_offset(lv, (S20683C11*), ABISELECT(168,84), "S20683C13");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(176,88), "S20683C13");
    check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(176,88), "S20683C13");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(216,112), "S20683C13");
    check_base_class_offset(lv, (S20683C9*), ABISELECT(176,88), "S20683C13");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*), ABISELECT(176,88), "S20683C13");
    check_base_class_offset(lv, (S20683C10*), 0, "S20683C13");
    check_field_offset(lv, s20683c13f0, ABISELECT(64,32), "S20683C13.s20683c13f0");
    test_class_info(&lv, &cd_S20683C13);
    dp->~S20683C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C13(Test_S20683C13, "S20683C13", ABISELECT(288,148));

#else // __cplusplus

extern void _ZN9S20683C13C1Ev();
extern void _ZN9S20683C13D1Ev();
Name_Map name_map_S20683C13[] = {
  NSPAIR(_ZN9S20683C13C1Ev),
  NSPAIR(_ZN9S20683C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C11;
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
static Base_Class bases_S20683C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(80,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20683C11,    ABISELECT(168,84), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    ABISELECT(176,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(176,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(216,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20683C9,    ABISELECT(176,88), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20683C13[];
extern void _ZN9S20683C13D1Ev();
extern void _ZN9S20683C13D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S20683C13D1Ev,_ZThn36_N9S20683C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S20683C13D0Ev,_ZThn36_N9S20683C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev)();
extern void ABISELECT(_ZThn176_N9S20683C13D1Ev,_ZThn88_N9S20683C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev)();
extern void ABISELECT(_ZThn176_N9S20683C13D0Ev,_ZThn88_N9S20683C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C13[] = {
  ABISELECT(168,84),
  ABISELECT(80,36),
  ABISELECT(112,56),
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&_ZN9S20683C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C13D0Ev,
  ABISELECT(-80,-36),
  ABISELECT(32,20),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  ABISELECT(-176,-88),
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20683C13[];
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C10__9S20683C13[] = {
  ABISELECT(80,36),
  ABISELECT(112,56),
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn176_N9S20683C10D1Ev,_ZThn88_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn176_N9S20683C10D0Ev,_ZThn88_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10__9S20683C13[] = {
  ABISELECT(-176,-88),
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn80_N9S20683C10D1Ev,_ZThn36_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn80_N9S20683C10D0Ev,_ZThn36_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10__9S20683C13[] = {
  ABISELECT(-80,-36),
  ABISELECT(32,20),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__9S20683C13[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C13[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C13[] = {
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__9S20683C13[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__A1__9S20683C13[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__9S20683C13[] = {
  ABISELECT(96,52),
  ABISELECT(32,20),
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
static  VTT_ENTRY vtt_S20683C13[] = {
  {&(_ZTV9S20683C13[6]),  6,24},
  {&(_tg__ZTV9S20683C10__9S20683C13[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C10__9S20683C13[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10__9S20683C13[4]),  4,6},
  {&(_ZTV9S20683C13[12]),  12,24},
  {&(_ZTV9S20683C13[17]),  17,24},
  {&(_ZTV9S20683C13[22]),  22,24},
  {&(_tg__ZTV8S20683C4__9S20683C13[3]),  3,5},
  {&(_tg__ZTV9S20683C11__9S20683C13[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C13[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__9S20683C13[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__A1__9S20683C13[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__9S20683C13[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20683C13[];
extern  VTBL_ENTRY _ZTV9S20683C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C13[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20683C10D0Ev,_ZThn36_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20683C10D1Ev,_ZThn36_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C10D0Ev,_ZThn88_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C10D1Ev,_ZThn88_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C13D0Ev,_ZThn88_N9S20683C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C13D1Ev,_ZThn88_N9S20683C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20683C13D0Ev,_ZThn36_N9S20683C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20683C13D1Ev,_ZThn36_N9S20683C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C13 = {  "S20683C13", // class name
  bases_S20683C13, 9,
  &(vtc_S20683C13[0]), // expected_vtbl_contents
  &(vtt_S20683C13[0]), // expected_vtt_contents
  ABISELECT(288,148), // object size
  NSPAIRA(_ZTI9S20683C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20683C13),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20683C13),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C12  : virtual S20683C11 , virtual S20683C9 , S20683C13 {
  ::S20683C5_nt s20683c12f0;
  ~S20683C12(); // tgen
  S20683C12(); // tgen
};
//SIG(-1 S20683C12) C1{ VBC2{ VBC3{ m Fp[7]}} VBC4{ BC5{ VBC3 BC6{ VBC3 vd FU7{ m Fp} FD} vd Fp} BC3 VBC6 vd FL:7 Fp} BC8{ VBC6 BC3 VBC2 VBC4 BC9{ VBC4 vd} FU7} FU7}


S20683C12 ::~S20683C12(){ note_dtor("S20683C12", this);} // tgen
S20683C12 ::S20683C12(){ note_ctor("S20683C12", this);} // tgen

static void Test_S20683C12()
{
  extern Class_Descriptor cd_S20683C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(19,39)];
    init_test(&cd_S20683C12, buf);
    S20683C12 *dp, &lv = *(dp=new (buf) S20683C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,152), "sizeof(S20683C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C12)");
    check_base_class_offset(lv, (S20683C3*)(S20683C11*), ABISELECT(88,44), "S20683C12");
    check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(88,44), "S20683C12");
    check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(88,44), "S20683C12");
    /*is_ambiguous_... S20683C12::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(88,44), "S20683C12");
    check_base_class_offset(lv, (S20683C11*), ABISELECT(80,40), "S20683C12");
    check_base_class_offset(lv, (S20683C11*)(S20683C13*), ABISELECT(80,40), "S20683C12");
    check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(144,72), "S20683C12");
    check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(144,72), "S20683C12");
    /*is_ambiguous_... S20683C9::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(184,96), "S20683C12");
    /*is_ambiguous_... S20683C9::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(256,132), "S20683C12");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C13*), ABISELECT(256,132), "S20683C12");
    check_base_class_offset(lv, (S20683C9*), ABISELECT(144,72), "S20683C12");
    check_base_class_offset(lv, (S20683C9*)(S20683C13*), ABISELECT(144,72), "S20683C12");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*)(S20683C13*), ABISELECT(144,72), "S20683C12");
    /*is_ambiguous_... S20683C13::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C13*), ABISELECT(8,4), "S20683C12");
    check_base_class_offset(lv, (S20683C10*)(S20683C13*), 0, "S20683C12");
    check_base_class_offset(lv, (S20683C13*), 0, "S20683C12");
    check_field_offset(lv, s20683c12f0, ABISELECT(72,36), "S20683C12.s20683c12f0");
    test_class_info(&lv, &cd_S20683C12);
    dp->~S20683C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C12(Test_S20683C12, "S20683C12", ABISELECT(288,152));

#else // __cplusplus

extern void _ZN9S20683C12C1Ev();
extern void _ZN9S20683C12D1Ev();
Name_Map name_map_S20683C12[] = {
  NSPAIR(_ZN9S20683C12C1Ev),
  NSPAIR(_ZN9S20683C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C11;
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C13;
extern VTBL_ENTRY _ZTI9S20683C13[];
extern  VTBL_ENTRY _ZTV9S20683C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C13[];
static Base_Class bases_S20683C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20683C11,    ABISELECT(80,40), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(184,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(256,132), //bcp->offset
    18, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(144,72), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C3,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20683C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20683C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20683C12[];
extern void _ZN9S20683C12D1Ev();
extern void _ZN9S20683C12D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev)();
extern void ABISELECT(_ZThn144_N9S20683C12D1Ev,_ZThn72_N9S20683C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev)();
extern void ABISELECT(_ZThn144_N9S20683C12D0Ev,_ZThn72_N9S20683C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev)();
extern void ABISELECT(_ZThn256_N9S20683C12D1Ev,_ZThn132_N9S20683C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev)();
extern void ABISELECT(_ZThn256_N9S20683C12D0Ev,_ZThn132_N9S20683C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C12[] = {
  ABISELECT(80,40),
  ABISELECT(256,132),
  ABISELECT(88,44),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&_ZN9S20683C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C12D0Ev,
  ABISELECT(8,4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  ABISELECT(-144,-72),
  ABISELECT(112,60),
  ABISELECT(-56,-28),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev),
  ABISELECT(-256,-132),
  ABISELECT(-168,-88),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S20683C12[];
extern void _ZN9S20683C13D1Ev();
extern void _ZN9S20683C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C13__9S20683C12[] = {
  ABISELECT(80,40),
  ABISELECT(256,132),
  ABISELECT(88,44),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&_ZN9S20683C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C13D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C109S20683C13__9S20683C12[] = {
  ABISELECT(256,132),
  ABISELECT(88,44),
  ABISELECT(144,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn144_N9S20683C10D1Ev,_ZThn72_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn144_N9S20683C10D0Ev,_ZThn72_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C109S20683C13__9S20683C12[] = {
  ABISELECT(-144,-72),
  ABISELECT(112,60),
  ABISELECT(-56,-28),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn256_N9S20683C10D1Ev,_ZThn132_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn256_N9S20683C10D0Ev,_ZThn132_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C109S20683C13__9S20683C12[] = {
  ABISELECT(-256,-132),
  ABISELECT(-168,-88),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev)();
extern void ABISELECT(_ZThn256_N9S20683C13D1Ev,_ZThn132_N9S20683C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev)();
extern void ABISELECT(_ZThn256_N9S20683C13D0Ev,_ZThn132_N9S20683C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__9S20683C13__9S20683C12[] = {
  ABISELECT(-256,-132),
  ABISELECT(-168,-88),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C13__9S20683C12[] = {
  ABISELECT(8,4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev)();
extern void ABISELECT(_ZThn144_N9S20683C13D1Ev,_ZThn72_N9S20683C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev)();
extern void ABISELECT(_ZThn144_N9S20683C13D0Ev,_ZThn72_N9S20683C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C13__9S20683C12[] = {
  ABISELECT(-144,-72),
  ABISELECT(112,60),
  ABISELECT(-56,-28),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C12[] = {
  ABISELECT(112,60),
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__9S20683C12[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__9S20683C12[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S20683C9D1Ev,_ZThn60_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S20683C9D0Ev,_ZThn60_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__9S20683C12[] = {
  ABISELECT(-112,-60),
  ABISELECT(-168,-88),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C12[] = {
  ABISELECT(-168,-88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
static  VTT_ENTRY vtt_S20683C12[] = {
  {&(_ZTV9S20683C12[6]),  6,24},
  {&(_tg__ZTV9S20683C13__9S20683C12[6]),  6,8},
  {&(_tg__ZTV9S20683C109S20683C13__9S20683C12[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C109S20683C13__9S20683C12[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C109S20683C13__9S20683C12[4]),  4,6},
  {&(_tg__ZTV8S20683C4__9S20683C13__9S20683C12[4]),  4,6},
  {&(_tg__ZTV9S20683C11__9S20683C13__9S20683C12[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C13__9S20683C12[5]),  5,7},
  {&(_ZTV9S20683C12[11]),  11,24},
  {&(_ZTV9S20683C12[16]),  16,24},
  {&(_ZTV9S20683C12[22]),  22,24},
  {&(_tg__ZTV9S20683C11__9S20683C12[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C12[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__9S20683C12[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__9S20683C12[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__9S20683C12[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A1__9S20683C12[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20683C12[];
extern  VTBL_ENTRY _ZTV9S20683C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C12[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20683C9D0Ev,_ZThn60_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20683C9D1Ev,_ZThn60_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C13D0Ev,_ZThn72_N9S20683C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C13D1Ev,_ZThn72_N9S20683C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C13D0Ev,_ZThn132_N9S20683C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C13D1Ev,_ZThn132_N9S20683C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C10D0Ev,_ZThn132_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C10D1Ev,_ZThn132_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C10D0Ev,_ZThn72_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C10D1Ev,_ZThn72_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C12D0Ev,_ZThn132_N9S20683C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S20683C12D1Ev,_ZThn132_N9S20683C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C12D0Ev,_ZThn72_N9S20683C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20683C12D1Ev,_ZThn72_N9S20683C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C12 = {  "S20683C12", // class name
  bases_S20683C12, 10,
  &(vtc_S20683C12[0]), // expected_vtbl_contents
  &(vtt_S20683C12[0]), // expected_vtt_contents
  ABISELECT(288,152), // object size
  NSPAIRA(_ZTI9S20683C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20683C12),24, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20683C12),17, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C7  : virtual S20683C8 , S20683C4 , virtual S20683C11 , virtual S20683C12 , S20683C9 {
  void *s20683c7f0;
  virtual  ~S20683C7(); // _ZN8S20683C7D2Ev
  S20683C7(); // tgen
};
//SIG(-1 S20683C7) C1{ VBC2{ VBC3{ BC4{ VBC5{ m Fp[7]} BC6{ VBC5 vd FU7{ m Fp} FD} vd Fp} BC5 VBC6 vd FL:7 Fp} VBC8{ VBC3 vd} BC5 vd} BC6 VBC9{ VBC5} VBC10{ VBC9 VBC3 BC11{ VBC6 BC5 VBC9 VBC3 BC8 FU7} FU7} BC3 vd Fp}


 S20683C7 ::~S20683C7(){ note_dtor("S20683C7", this);}
S20683C7 ::S20683C7(){ note_ctor("S20683C7", this);} // tgen

static void Test_S20683C7()
{
  extern Class_Descriptor cd_S20683C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,68)];
    init_test(&cd_S20683C7, buf);
    S20683C7 *dp, &lv = *(dp=new (buf) S20683C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,268), "sizeof(S20683C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C7)");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(336,176), "S20683C7");
    check_base_class_offset(lv, (S20683C3*)(S20683C11*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(336,176), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(224,116), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(224,116), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(264,140), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(400,204), "S20683C7");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C13*)(S20683C12*), ABISELECT(400,204), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(400,204), "S20683C7");
    check_base_class_offset(lv, (S20683C9*)(S20683C8*), ABISELECT(224,116), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C10 */ AMB_check_base_class_offset(lv, (S20683C9*)(S20683C10*), ABISELECT(224,116), "S20683C7");
    check_base_class_offset(lv, (S20683C9*)(S20683C12*), ABISELECT(224,116), "S20683C7");
    check_base_class_offset(lv, (S20683C9*)(S20683C13*)(S20683C12*), ABISELECT(224,116), "S20683C7");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*)(S20683C13*)(S20683C12*), ABISELECT(224,116), "S20683C7");
    check_base_class_offset(lv, (S20683C10*)(S20683C8*), ABISELECT(152,84), "S20683C7");
    /*is_ambiguous_... S20683C8::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C8*), ABISELECT(160,88), "S20683C7");
    check_base_class_offset(lv, (S20683C8*), ABISELECT(152,84), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*), 0, "S20683C7");
    check_base_class_offset(lv, (S20683C11*), ABISELECT(432,224), "S20683C7");
    check_base_class_offset(lv, (S20683C11*)(S20683C12*), ABISELECT(432,224), "S20683C7");
    check_base_class_offset(lv, (S20683C11*)(S20683C13*)(S20683C12*), ABISELECT(432,224), "S20683C7");
    /*is_ambiguous_... S20683C13::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C13*)(S20683C12*), ABISELECT(448,232), "S20683C7");
    check_base_class_offset(lv, (S20683C10*)(S20683C13*)(S20683C12*), ABISELECT(440,228), "S20683C7");
    check_base_class_offset(lv, (S20683C13*)(S20683C12*), ABISELECT(440,228), "S20683C7");
    check_base_class_offset(lv, (S20683C12*), ABISELECT(440,228), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(32,20), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(32,20), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(72,44), "S20683C7");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C9*), ABISELECT(32,20), "S20683C7");
    check_field_offset(lv, s20683c7f0, ABISELECT(144,80), "S20683C7.s20683c7f0");
    test_class_info(&lv, &cd_S20683C7);
    dp->~S20683C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C7(Test_S20683C7, "S20683C7", ABISELECT(528,268));

#else // __cplusplus

extern void _ZN8S20683C7C1Ev();
extern void _ZN8S20683C7D2Ev();
Name_Map name_map_S20683C7[] = {
  NSPAIR(_ZN8S20683C7C1Ev),
  NSPAIR(_ZN8S20683C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C8;
extern VTBL_ENTRY _ZTI8S20683C8[];
extern  VTBL_ENTRY _ZTV8S20683C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C8[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C11;
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C13;
extern VTBL_ENTRY _ZTI9S20683C13[];
extern  VTBL_ENTRY _ZTV9S20683C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C13[];
extern Class_Descriptor cd_S20683C12;
extern VTBL_ENTRY _ZTI9S20683C12[];
extern  VTBL_ENTRY _ZTV9S20683C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C12[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
static Base_Class bases_S20683C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(336,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(224,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(224,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(264,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(400,204), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(224,116), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20683C10,    ABISELECT(152,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20683C3,    ABISELECT(160,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20683C8,    ABISELECT(152,84), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20683C11,    ABISELECT(432,224), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C3,    ABISELECT(448,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20683C10,    ABISELECT(440,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20683C13,    ABISELECT(440,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20683C12,    ABISELECT(440,228), //bcp->offset
    42, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20683C9,    ABISELECT(32,20), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C7[];
extern void _ZN8S20683C7D1Ev();
extern void _ZN8S20683C7D0Ev();
extern void ABISELECT(_ZThn32_N8S20683C7D1Ev,_ZThn20_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20683C7D0Ev,_ZThn20_N8S20683C7D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn152_N8S20683C7D1Ev,_ZThn84_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn152_N8S20683C7D0Ev,_ZThn84_N8S20683C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn224_N8S20683C7D1Ev,_ZThn116_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn224_N8S20683C7D0Ev,_ZThn116_N8S20683C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn400_N8S20683C7D1Ev,_ZThn204_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn400_N8S20683C7D0Ev,_ZThn204_N8S20683C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn440_N8S20683C7D1Ev,_ZThn228_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn440_N8S20683C7D0Ev,_ZThn228_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C7[] = {
  ABISELECT(440,228),
  ABISELECT(432,224),
  ABISELECT(152,84),
  ABISELECT(400,204),
  ABISELECT(224,116),
  ABISELECT(152,84),
  ABISELECT(336,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&_ZN8S20683C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C7D0Ev,
  ABISELECT(368,184),
  ABISELECT(304,156),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C7D1Ev,_ZThn20_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C7D0Ev,_ZThn20_N8S20683C7D0Ev),
  0,
  ABISELECT(-152,-84),
  ABISELECT(248,120),
  ABISELECT(184,92),
  ABISELECT(72,32),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev),
  ABISELECT(-224,-116),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev),
  ABISELECT(-400,-204),
  ABISELECT(-64,-28),
  ABISELECT(-400,-204),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev),
  ABISELECT(-96,-48),
  ABISELECT(-432,-224),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  ABISELECT(-440,-228),
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-104,-52),
  ABISELECT(-216,-112),
  ABISELECT(-440,-228),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S20683C7[];
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A__8S20683C7[] = {
  ABISELECT(336,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__A__8S20683C7[] = {
  ABISELECT(368,184),
  ABISELECT(304,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__A1__8S20683C7[] = {
  ABISELECT(304,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__A3__8S20683C7[] = {
  ABISELECT(304,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn368_N8S20683C9D1Ev,_ZThn184_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn368_N8S20683C9D0Ev,_ZThn184_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__A__8S20683C7[] = {
  ABISELECT(-368,-184),
  ABISELECT(-64,-28),
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev)();
extern void _ZN8S20683C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev)();
extern void _ZN8S20683C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C8__8S20683C7[] = {
  0,
  0,
  ABISELECT(248,120),
  ABISELECT(184,92),
  ABISELECT(72,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn72_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn72_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C8__8S20683C7[] = {
  ABISELECT(-72,-32),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn248_N8S20683C8D1Ev,_ZThn120_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn248_N8S20683C8D0Ev,_ZThn120_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C8__8S20683C7[] = {
  ABISELECT(-248,-120),
  ABISELECT(-64,-28),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev),
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C7[] = {
  ABISELECT(176,88),
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__8S20683C7[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__8S20683C7[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__8S20683C7[] = {
  ABISELECT(-176,-88),
  ABISELECT(-64,-28),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C7[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C10__8S20683C7[] = {
  ABISELECT(248,120),
  ABISELECT(184,92),
  ABISELECT(72,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn72_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn72_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10__8S20683C7[] = {
  ABISELECT(-72,-32),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn248_N9S20683C10D1Ev,_ZThn120_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn248_N9S20683C10D0Ev,_ZThn120_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10__8S20683C7[] = {
  ABISELECT(-248,-120),
  ABISELECT(-64,-28),
  ABISELECT(-248,-120),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__8S20683C7[] = {
  ABISELECT(-96,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern void _ZN9S20683C12D1Ev();
extern void _ZN9S20683C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C12__8S20683C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-104,-52),
  ABISELECT(-216,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&_ZN9S20683C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C12D0Ev,
};
extern void _ZN9S20683C13D1Ev();
extern void _ZN9S20683C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C139S20683C12__8S20683C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-104,-52),
  ABISELECT(-216,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&_ZN9S20683C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C13D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C109S20683C139S20683C12__A1__8S20683C7[] = {
  ABISELECT(-40,-24),
  ABISELECT(-104,-52),
  ABISELECT(-216,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C109S20683C139S20683C12__A1__8S20683C7[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(216,112),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C109S20683C139S20683C12__A1__8S20683C7[] = {
  ABISELECT(40,24),
  ABISELECT(-64,-28),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__9S20683C139S20683C12__8S20683C7[] = {
  ABISELECT(40,24),
  ABISELECT(-64,-28),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C139S20683C12__8S20683C7[] = {
  ABISELECT(-96,-48),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C139S20683C12__8S20683C7[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(216,112),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C12__8S20683C7[] = {
  ABISELECT(-96,-48),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C12__8S20683C7[] = {
  ABISELECT(216,112),
  ABISELECT(176,88),
  ABISELECT(112,60),
  ABISELECT(216,112),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C12__8S20683C7[] = {
  ABISELECT(40,24),
  ABISELECT(-64,-28),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev),
};
static  VTT_ENTRY vtt_S20683C7[] = {
  {&(_ZTV8S20683C7[9]),  9,51},
  {&(_tg__ZTV8S20683C4__A__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C9__A__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__A1__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__A3__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__A__8S20683C7[4]),  4,6},
  {&(_ZTV8S20683C7[24]),  24,51},
  {&(_ZTV8S20683C7[31]),  31,51},
  {&(_ZTV8S20683C7[37]),  37,51},
  {&(_ZTV8S20683C7[24]),  24,51},
  {&(_ZTV8S20683C7[42]),  42,51},
  {&(_ZTV8S20683C7[49]),  49,51},
  {&(_ZTV8S20683C7[15]),  15,51},
  {&(_tg__ZTV8S20683C8__8S20683C7[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C8__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__8S20683C8__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C8__8S20683C7[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__8S20683C7[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A1__8S20683C7[3]),  3,5},
  {&(_tg__ZTV9S20683C10__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C10__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10__8S20683C7[4]),  4,6},
  {&(_tg__ZTV9S20683C11__8S20683C7[3]),  3,3},
  {&(_tg__ZTV9S20683C12__8S20683C7[6]),  6,8},
  {&(_tg__ZTV9S20683C139S20683C12__8S20683C7[6]),  6,8},
  {&(_tg__ZTV9S20683C109S20683C139S20683C12__A1__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C109S20683C139S20683C12__A1__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C109S20683C139S20683C12__A1__8S20683C7[4]),  4,6},
  {&(_tg__ZTV8S20683C4__9S20683C139S20683C12__8S20683C7[4]),  4,6},
  {&(_tg__ZTV9S20683C11__9S20683C139S20683C12__8S20683C7[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C139S20683C12__8S20683C7[5]),  5,7},
  {&(_tg__ZTV9S20683C11__9S20683C12__8S20683C7[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C12__8S20683C7[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C12__8S20683C7[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20683C7[];
extern  VTBL_ENTRY _ZTV8S20683C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C7[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20683C10D0Ev,_ZThn120_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S20683C10D1Ev,_ZThn120_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20683C8D0Ev,_ZThn120_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20683C8D1Ev,_ZThn120_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20683C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20683C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D0Ev,_ZThn88_N8S20683C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20683C9D0Ev,_ZThn184_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C9D1Ev,_ZThn88_N8S20683C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20683C9D1Ev,_ZThn184_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S20683C7D0Ev,_ZThn228_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S20683C7D1Ev,_ZThn228_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S20683C7D0Ev,_ZThn204_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S20683C7D1Ev,_ZThn204_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20683C7D0Ev,_ZThn116_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20683C7D1Ev,_ZThn116_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20683C7D0Ev,_ZThn84_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20683C7D1Ev,_ZThn84_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C7 = {  "S20683C7", // class name
  bases_S20683C7, 19,
  &(vtc_S20683C7[0]), // expected_vtbl_contents
  &(vtt_S20683C7[0]), // expected_vtt_contents
  ABISELECT(528,268), // object size
  NSPAIRA(_ZTI8S20683C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20683C7),51, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C7),37, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20683C1  : virtual S20683C2 , virtual S2514C3_nt , S20683C7 {
  virtual  ~S20683C1(); // _ZN8S20683C1D2Ev
  S20683C1(); // tgen
};
//SIG(1 S20683C1) C1{ VBC2{ VBC3{ m Fp[7]} BC4{ VBC3 vd FU5{ m Fp} FD} vd Fp} VBC6{ m FD} BC7{ VBC8{ VBC9{ BC2 BC3 VBC4 vd FL:7 Fp} VBC10{ VBC9 vd} BC3 vd} BC4 VBC11{ VBC3} VBC12{ VBC11 VBC9 BC13{ VBC4 BC3 VBC11 VBC9 BC10 FU5} FU5} BC9 vd Fp} vd}


 S20683C1 ::~S20683C1(){ note_dtor("S20683C1", this);}
S20683C1 ::S20683C1(){ note_ctor("S20683C1", this);} // tgen

static void Test_S20683C1()
{
  extern Class_Descriptor cd_S20683C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,77)];
    init_test(&cd_S20683C1, buf);
    S20683C1 *dp, &lv = *(dp=new (buf) S20683C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,304), "sizeof(S20683C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20683C1)");
    /*is_ambiguous_... S20683C1::S20683C2 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C2 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C7*), ABISELECT(200,108), "S20683C1");
    check_base_class_offset(lv, (S20683C3*)(S20683C11*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C2*)(S20683C9*)(S20683C7*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C4*)(S20683C2*)(S20683C9*)(S20683C7*), ABISELECT(200,108), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C2 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*), ABISELECT(160,84), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C2 */ AMB_check_base_class_offset(lv, (S20683C2*), ABISELECT(160,84), "S20683C1");
    check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(256,136), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*), ABISELECT(336,180), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C2*)(S20683C9*), ABISELECT(336,180), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*), ABISELECT(376,204), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*), ABISELECT(448,240), "S20683C1");
    /*is_ambiguous_... S20683C13::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C13*)(S20683C12*), ABISELECT(448,240), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C9*)(S20683C7*), ABISELECT(448,240), "S20683C1");
    check_base_class_offset(lv, (S20683C9*)(S20683C8*), ABISELECT(336,180), "S20683C1");
    /*is_ambiguous_... S20683C1::S20683C10 */ AMB_check_base_class_offset(lv, (S20683C9*)(S20683C10*), ABISELECT(336,180), "S20683C1");
    check_base_class_offset(lv, (S20683C9*)(S20683C12*), ABISELECT(336,180), "S20683C1");
    check_base_class_offset(lv, (S20683C9*)(S20683C13*)(S20683C12*), ABISELECT(336,180), "S20683C1");
    check_base_class_offset(lv, (S20683C9*)(S20683C10*)(S20683C13*)(S20683C12*), ABISELECT(336,180), "S20683C1");
    check_base_class_offset(lv, (S20683C10*)(S20683C8*), ABISELECT(272,148), "S20683C1");
    /*is_ambiguous_... S20683C8::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C8*), ABISELECT(280,152), "S20683C1");
    check_base_class_offset(lv, (S20683C8*)(S20683C7*), ABISELECT(272,148), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C4 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C7*), 0, "S20683C1");
    check_base_class_offset(lv, (S20683C11*)(S20683C7*), ABISELECT(480,260), "S20683C1");
    check_base_class_offset(lv, (S20683C11*)(S20683C12*), ABISELECT(480,260), "S20683C1");
    check_base_class_offset(lv, (S20683C11*)(S20683C13*)(S20683C12*), ABISELECT(480,260), "S20683C1");
    /*is_ambiguous_... S20683C13::S20683C3 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C13*)(S20683C12*), ABISELECT(496,268), "S20683C1");
    check_base_class_offset(lv, (S20683C10*)(S20683C13*)(S20683C12*), ABISELECT(488,264), "S20683C1");
    check_base_class_offset(lv, (S20683C13*)(S20683C12*), ABISELECT(488,264), "S20683C1");
    check_base_class_offset(lv, (S20683C12*)(S20683C7*), ABISELECT(488,264), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C4*)(S20683C2*)(S20683C9*)(S20683C7*), ABISELECT(32,20), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C2*)(S20683C9*)(S20683C7*), ABISELECT(32,20), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C3*)(S20683C9*)(S20683C7*), ABISELECT(72,44), "S20683C1");
    /*is_ambiguous_... S20683C7::S20683C9 */ AMB_check_base_class_offset(lv, (S20683C9*)(S20683C7*), ABISELECT(32,20), "S20683C1");
    check_base_class_offset(lv, (S20683C7*), 0, "S20683C1");
    test_class_info(&lv, &cd_S20683C1);
    dp->~S20683C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20683C1(Test_S20683C1, "S20683C1", ABISELECT(576,304));

#else // __cplusplus

extern void _ZN8S20683C1C1Ev();
extern void _ZN8S20683C1D2Ev();
Name_Map name_map_S20683C1[] = {
  NSPAIR(_ZN8S20683C1C1Ev),
  NSPAIR(_ZN8S20683C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C8;
extern VTBL_ENTRY _ZTI8S20683C8[];
extern  VTBL_ENTRY _ZTV8S20683C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C8[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C11;
extern VTBL_ENTRY _ZTI9S20683C11[];
extern  VTBL_ENTRY _ZTV9S20683C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C11[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C10;
extern VTBL_ENTRY _ZTI9S20683C10[];
extern  VTBL_ENTRY _ZTV9S20683C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C10[];
extern Class_Descriptor cd_S20683C13;
extern VTBL_ENTRY _ZTI9S20683C13[];
extern  VTBL_ENTRY _ZTV9S20683C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C13[];
extern Class_Descriptor cd_S20683C12;
extern VTBL_ENTRY _ZTI9S20683C12[];
extern  VTBL_ENTRY _ZTV9S20683C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20683C12[];
extern Class_Descriptor cd_S20683C4;
extern VTBL_ENTRY _ZTI8S20683C4[];
extern  VTBL_ENTRY _ZTV8S20683C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C4[];
extern Class_Descriptor cd_S20683C2;
extern VTBL_ENTRY _ZTI8S20683C2[];
extern  VTBL_ENTRY _ZTV8S20683C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C2[];
extern Class_Descriptor cd_S20683C3;
extern VTBL_ENTRY _ZTI8S20683C3[];
extern Class_Descriptor cd_S20683C9;
extern VTBL_ENTRY _ZTI8S20683C9[];
extern  VTBL_ENTRY _ZTV8S20683C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C9[];
extern Class_Descriptor cd_S20683C7;
extern VTBL_ENTRY _ZTI8S20683C7[];
extern  VTBL_ENTRY _ZTV8S20683C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C7[];
static Base_Class bases_S20683C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20683C3,    ABISELECT(200,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(160,84), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(256,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20683C4,    ABISELECT(336,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(336,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(376,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20683C4,    ABISELECT(448,240), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20683C9,    ABISELECT(336,180), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20683C10,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20683C3,    ABISELECT(280,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20683C8,    ABISELECT(272,148), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20683C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20683C11,    ABISELECT(480,260), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20683C3,    ABISELECT(496,268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20683C10,    ABISELECT(488,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20683C13,    ABISELECT(488,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20683C12,    ABISELECT(488,264), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20683C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20683C2,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20683C3,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20683C9,    ABISELECT(32,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20683C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20683C1[];
extern void _ZN8S20683C1D1Ev();
extern void _ZN8S20683C1D0Ev();
extern void ABISELECT(_ZThn32_N8S20683C1D1Ev,_ZThn20_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20683C1D0Ev,_ZThn20_N8S20683C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn160_N8S20683C1D1Ev,_ZThn84_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn160_N8S20683C1D0Ev,_ZThn84_N8S20683C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C1D1Ev,_ZTv0_n24_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S20683C1D1Ev,_ZThn148_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C1D0Ev,_ZTv0_n24_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S20683C1D0Ev,_ZThn148_N8S20683C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C1D1Ev,_ZTv0_n20_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn336_N8S20683C1D1Ev,_ZThn180_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C1D0Ev,_ZTv0_n20_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn336_N8S20683C1D0Ev,_ZThn180_N8S20683C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn448_N8S20683C1D1Ev,_ZThn240_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn448_N8S20683C1D0Ev,_ZThn240_N8S20683C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C1D1Ev,_ZTv0_n28_N8S20683C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S20683C1D1Ev,_ZThn264_N8S20683C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C1D0Ev,_ZTv0_n28_N8S20683C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S20683C1D0Ev,_ZThn264_N8S20683C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20683C1[] = {
  ABISELECT(256,136),
  ABISELECT(160,84),
  ABISELECT(488,264),
  ABISELECT(480,260),
  ABISELECT(272,148),
  ABISELECT(448,240),
  ABISELECT(336,180),
  ABISELECT(272,148),
  ABISELECT(200,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&_ZN8S20683C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C1D0Ev,
  ABISELECT(416,220),
  ABISELECT(168,88),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C1D1Ev,_ZThn20_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C1D0Ev,_ZThn20_N8S20683C1D0Ev),
  ABISELECT(-160,-84),
  ABISELECT(40,24),
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev),
  0,
  ABISELECT(-272,-148),
  ABISELECT(176,92),
  ABISELECT(-72,-40),
  ABISELECT(64,32),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C1D1Ev,_ZTv0_n24_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C1D0Ev,_ZTv0_n24_N8S20683C1D0Ev),
  ABISELECT(-336,-180),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C1D1Ev,_ZTv0_n20_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C1D0Ev,_ZTv0_n20_N8S20683C1D0Ev),
  ABISELECT(-448,-240),
  ABISELECT(-248,-132),
  ABISELECT(-448,-240),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev),
  ABISELECT(-280,-152),
  ABISELECT(-480,-260),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  ABISELECT(-488,-264),
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  ABISELECT(-488,-264),
  (VTBL_ENTRY)&(_ZTI8S20683C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C1D1Ev,_ZTv0_n28_N8S20683C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C1D0Ev,_ZTv0_n28_N8S20683C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20683C1[];
extern void _ZN8S20683C7D1Ev();
extern void _ZN8S20683C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C7__8S20683C1[] = {
  ABISELECT(488,264),
  ABISELECT(480,260),
  ABISELECT(272,148),
  ABISELECT(448,240),
  ABISELECT(336,180),
  ABISELECT(272,148),
  ABISELECT(200,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&_ZN8S20683C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C7D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C7__A3__8S20683C1[] = {
  ABISELECT(200,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C98S20683C7__A1__8S20683C1[] = {
  ABISELECT(416,220),
  ABISELECT(168,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C98S20683C7__A2__8S20683C1[] = {
  ABISELECT(168,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C98S20683C7__A4__8S20683C1[] = {
  ABISELECT(168,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn416_N8S20683C9D1Ev,_ZThn220_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn416_N8S20683C9D0Ev,_ZThn220_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C98S20683C7__A1__8S20683C1[] = {
  ABISELECT(-416,-220),
  ABISELECT(-248,-132),
  ABISELECT(-416,-220),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn272_N8S20683C7D1Ev,_ZThn148_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn272_N8S20683C7D0Ev,_ZThn148_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C8__8S20683C7__8S20683C1[] = {
  0,
  ABISELECT(-272,-148),
  ABISELECT(176,92),
  ABISELECT(-72,-40),
  ABISELECT(64,32),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn336_N8S20683C7D1Ev,_ZThn180_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn336_N8S20683C7D0Ev,_ZThn180_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C7__8S20683C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn448_N8S20683C7D1Ev,_ZThn240_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn448_N8S20683C7D0Ev,_ZThn240_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C7__8S20683C1[] = {
  ABISELECT(-448,-240),
  ABISELECT(-248,-132),
  ABISELECT(-448,-240),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__8S20683C7__8S20683C1[] = {
  ABISELECT(-280,-152),
  ABISELECT(-480,-260),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn488_N8S20683C7D1Ev,_ZThn264_N8S20683C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev)();
extern void ABISELECT(_ZThn488_N8S20683C7D0Ev,_ZThn264_N8S20683C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20683C12__8S20683C7__8S20683C1[] = {
  ABISELECT(-488,-264),
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  ABISELECT(-488,-264),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev),
};
extern void ABISELECT(_ZThn32_N8S20683C7D1Ev,_ZThn20_N8S20683C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20683C7D0Ev,_ZThn20_N8S20683C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__A__8S20683C7__8S20683C1[] = {
  ABISELECT(416,220),
  ABISELECT(168,88),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20683C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C7D1Ev,_ZThn20_N8S20683C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20683C7D0Ev,_ZThn20_N8S20683C7D0Ev),
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C2__8S20683C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C2__8S20683C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev)();
extern void _ZN8S20683C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev)();
extern void _ZN8S20683C8D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C8__8S20683C1[] = {
  0,
  0,
  ABISELECT(176,92),
  ABISELECT(-72,-40),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn64_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn64_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C8__8S20683C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev)();
extern void ABISELECT(_ZThn176_N8S20683C8D1Ev,_ZThn92_N8S20683C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev)();
extern void ABISELECT(_ZThn176_N8S20683C8D0Ev,_ZThn92_N8S20683C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C8__8S20683C1[] = {
  ABISELECT(-176,-92),
  ABISELECT(-248,-132),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S20683C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev),
};
extern void _ZN8S20683C9D1Ev();
extern void _ZN8S20683C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C9__8S20683C1[] = {
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&_ZN8S20683C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C9D0Ev,
};
extern void _ZN8S20683C2D1Ev();
extern void _ZN8S20683C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C28S20683C9__A1__8S20683C1[] = {
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C2[0]),
  (VTBL_ENTRY)&_ZN8S20683C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C2D0Ev,
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C48S20683C28S20683C9__A1__8S20683C1[] = {
  ABISELECT(-136,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev)();
extern void ABISELECT(_ZThn112_N8S20683C9D1Ev,_ZThn60_N8S20683C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev)();
extern void ABISELECT(_ZThn112_N8S20683C9D0Ev,_ZThn60_N8S20683C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__8S20683C9__8S20683C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-248,-132),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S20683C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev),
};
extern void _ZN8S20683C4D1Ev();
extern void _ZN8S20683C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A2__8S20683C1[] = {
  ABISELECT(-248,-132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20683C4[0]),
  (VTBL_ENTRY)&_ZN8S20683C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20683C4D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C10__8S20683C1[] = {
  ABISELECT(176,92),
  ABISELECT(-72,-40),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C10__8S20683C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZThn176_N9S20683C10D1Ev,_ZThn92_N9S20683C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
extern void ABISELECT(_ZThn176_N9S20683C10D0Ev,_ZThn92_N9S20683C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C10__8S20683C1[] = {
  ABISELECT(-176,-92),
  ABISELECT(-248,-132),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__8S20683C1[] = {
  ABISELECT(-280,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C11[0]),
};
extern void _ZN9S20683C12D1Ev();
extern void _ZN9S20683C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C12__8S20683C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&_ZN9S20683C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C12D0Ev,
};
extern void _ZN9S20683C13D1Ev();
extern void _ZN9S20683C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C139S20683C12__8S20683C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&_ZN9S20683C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C13D0Ev,
};
extern void _ZN9S20683C10D1Ev();
extern void _ZN9S20683C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20683C109S20683C139S20683C12__A1__8S20683C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-288,-156),
  ABISELECT(-152,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&_ZN9S20683C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20683C10D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C109S20683C139S20683C12__A1__8S20683C1[] = {
  ABISELECT(152,84),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C109S20683C139S20683C12__A1__8S20683C1[] = {
  ABISELECT(40,24),
  ABISELECT(-248,-132),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__9S20683C139S20683C12__8S20683C1[] = {
  ABISELECT(40,24),
  ABISELECT(-248,-132),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D1Ev,_ZTv0_n16_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C13D0Ev,_ZTv0_n16_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C139S20683C12__8S20683C1[] = {
  ABISELECT(-280,-152),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C139S20683C12__8S20683C1[] = {
  ABISELECT(152,84),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI9S20683C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D1Ev,_ZTv0_n20_N9S20683C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C13D0Ev,_ZTv0_n20_N9S20683C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20683C11__9S20683C12__8S20683C1[] = {
  ABISELECT(-280,-152),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C9__9S20683C12__8S20683C1[] = {
  ABISELECT(152,84),
  ABISELECT(112,60),
  ABISELECT(-136,-72),
  ABISELECT(152,84),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D1Ev,_ZTv0_n20_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20683C12D0Ev,_ZTv0_n20_N9S20683C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20683C4__A1__9S20683C12__8S20683C1[] = {
  ABISELECT(40,24),
  ABISELECT(-248,-132),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI9S20683C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D1Ev,_ZTv0_n16_N9S20683C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20683C12D0Ev,_ZTv0_n16_N9S20683C12D0Ev),
};
static  VTT_ENTRY vtt_S20683C1[] = {
  {&(_ZTV8S20683C1[11]),  11,59},
  {&(_tg__ZTV8S20683C7__8S20683C1[9]),  9,11},
  {&(_tg__ZTV8S20683C48S20683C7__A3__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C98S20683C7__A1__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C98S20683C7__A2__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C98S20683C7__A4__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C98S20683C7__A1__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C8__8S20683C7__8S20683C1[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C7__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__8S20683C7__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C8__8S20683C7__8S20683C1[7]),  7,9},
  {&(_tg__ZTV9S20683C11__8S20683C7__8S20683C1[3]),  3,3},
  {&(_tg__ZTV9S20683C12__8S20683C7__8S20683C1[7]),  7,9},
  {&(_tg__ZTV8S20683C9__A__8S20683C7__8S20683C1[4]),  4,6},
  {&(_ZTV8S20683C1[23]),  23,59},
  {&(_ZTV8S20683C1[32]),  32,59},
  {&(_ZTV8S20683C1[39]),  39,59},
  {&(_ZTV8S20683C1[45]),  45,59},
  {&(_ZTV8S20683C1[32]),  32,59},
  {&(_ZTV8S20683C1[50]),  50,59},
  {&(_ZTV8S20683C1[57]),  57,59},
  {&(_ZTV8S20683C1[17]),  17,59},
  {&(_tg__ZTV8S20683C2__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C2__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C8__8S20683C1[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C8__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__8S20683C8__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C8__8S20683C1[7]),  7,9},
  {&(_tg__ZTV8S20683C9__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C28S20683C9__A1__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C48S20683C28S20683C9__A1__8S20683C1[3]),  3,5},
  {&(_tg__ZTV8S20683C4__A1__8S20683C9__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C4__A2__8S20683C1[3]),  3,5},
  {&(_tg__ZTV9S20683C10__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C10__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C10__8S20683C1[4]),  4,6},
  {&(_tg__ZTV9S20683C11__8S20683C1[3]),  3,3},
  {&(_tg__ZTV9S20683C12__8S20683C1[6]),  6,8},
  {&(_tg__ZTV9S20683C139S20683C12__8S20683C1[6]),  6,8},
  {&(_tg__ZTV9S20683C109S20683C139S20683C12__A1__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C9__9S20683C109S20683C139S20683C12__A1__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C109S20683C139S20683C12__A1__8S20683C1[4]),  4,6},
  {&(_tg__ZTV8S20683C4__9S20683C139S20683C12__8S20683C1[4]),  4,6},
  {&(_tg__ZTV9S20683C11__9S20683C139S20683C12__8S20683C1[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C139S20683C12__8S20683C1[5]),  5,7},
  {&(_tg__ZTV9S20683C11__9S20683C12__8S20683C1[3]),  3,3},
  {&(_tg__ZTV8S20683C9__9S20683C12__8S20683C1[5]),  5,7},
  {&(_tg__ZTV8S20683C4__A1__9S20683C12__8S20683C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20683C1[];
extern  VTBL_ENTRY _ZTV8S20683C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20683C1[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D0Ev,_ZTv0_n16_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C10D0Ev,_ZThn92_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20683C10D1Ev,_ZTv0_n16_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20683C10D1Ev,_ZThn92_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D0Ev,_ZTv0_n20_N9S20683C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20683C10D0Ev,_ZThn32_N9S20683C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20683C10D1Ev,_ZTv0_n20_N9S20683C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20683C10D1Ev,_ZThn32_N9S20683C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D0Ev,_ZTv0_n16_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C8D0Ev,_ZThn92_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C8D1Ev,_ZTv0_n16_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20683C8D1Ev,_ZThn92_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D0Ev,_ZTv0_n20_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20683C8D0Ev,_ZThn32_N8S20683C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C8D1Ev,_ZTv0_n20_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20683C8D1Ev,_ZThn32_N8S20683C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C8D0Ev,_ZTv0_n24_N8S20683C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S20683C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C8D1Ev,_ZTv0_n24_N8S20683C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S20683C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C7D0Ev,_ZTv0_n28_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20683C7D0Ev,_ZThn264_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C7D1Ev,_ZTv0_n28_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20683C7D1Ev,_ZThn264_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C7D0Ev,_ZTv0_n16_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20683C7D0Ev,_ZThn240_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C7D1Ev,_ZTv0_n16_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20683C7D1Ev,_ZThn240_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C7D0Ev,_ZTv0_n20_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20683C7D0Ev,_ZThn180_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C7D1Ev,_ZTv0_n20_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20683C7D1Ev,_ZThn180_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C7D0Ev,_ZTv0_n24_N8S20683C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20683C7D0Ev,_ZThn148_N8S20683C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C7D1Ev,_ZTv0_n24_N8S20683C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20683C7D1Ev,_ZThn148_N8S20683C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D0Ev,_ZTv0_n16_N8S20683C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20683C9D0Ev,_ZThn60_N8S20683C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S20683C9D0Ev,_ZThn220_N8S20683C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C9D1Ev,_ZTv0_n16_N8S20683C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20683C9D1Ev,_ZThn60_N8S20683C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn416_N8S20683C9D1Ev,_ZThn220_N8S20683C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C1D0Ev,_ZTv0_n28_N8S20683C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20683C1D0Ev,_ZThn264_N8S20683C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20683C1D1Ev,_ZTv0_n28_N8S20683C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20683C1D1Ev,_ZThn264_N8S20683C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C1D0Ev,_ZTv0_n20_N8S20683C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20683C1D0Ev,_ZThn180_N8S20683C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20683C1D1Ev,_ZTv0_n20_N8S20683C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20683C1D1Ev,_ZThn180_N8S20683C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C1D0Ev,_ZTv0_n24_N8S20683C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20683C1D0Ev,_ZThn148_N8S20683C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20683C1D1Ev,_ZTv0_n24_N8S20683C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20683C1D1Ev,_ZThn148_N8S20683C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C1D0Ev,_ZTv0_n16_N8S20683C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20683C1D0Ev,_ZThn240_N8S20683C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20683C1D0Ev,_ZThn84_N8S20683C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20683C1D1Ev,_ZTv0_n16_N8S20683C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn448_N8S20683C1D1Ev,_ZThn240_N8S20683C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20683C1D1Ev,_ZThn84_N8S20683C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20683C1 = {  "S20683C1", // class name
  bases_S20683C1, 23,
  &(vtc_S20683C1[0]), // expected_vtbl_contents
  &(vtt_S20683C1[0]), // expected_vtt_contents
  ABISELECT(576,304), // object size
  NSPAIRA(_ZTI8S20683C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20683C1),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20683C1),48, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20405C2  {
  void *s20405c2f0[6];
  int s20405c2f1;
  virtual void  v9(); // _ZN8S20405C22v9Ev
  virtual void  v10(); // _ZN8S20405C23v10Ev
  virtual void  v11(); // _ZN8S20405C23v11Ev
  virtual void  v12(); // _ZN8S20405C23v12Ev
  virtual void  v13(); // _ZN8S20405C23v13Ev
  virtual void  v14(); // _ZN8S20405C23v14Ev
  ~S20405C2(); // tgen
  S20405C2(); // tgen
};
//SIG(-1 S20405C2) C1{ v1 v2 v3 v4 v5 v6 Fp[6] Fi}


void  S20405C2 ::v9(){vfunc_called(this, "_ZN8S20405C22v9Ev");}
void  S20405C2 ::v10(){vfunc_called(this, "_ZN8S20405C23v10Ev");}
void  S20405C2 ::v11(){vfunc_called(this, "_ZN8S20405C23v11Ev");}
void  S20405C2 ::v12(){vfunc_called(this, "_ZN8S20405C23v12Ev");}
void  S20405C2 ::v13(){vfunc_called(this, "_ZN8S20405C23v13Ev");}
void  S20405C2 ::v14(){vfunc_called(this, "_ZN8S20405C23v14Ev");}
S20405C2 ::~S20405C2(){ note_dtor("S20405C2", this);} // tgen
S20405C2 ::S20405C2(){ note_ctor("S20405C2", this);} // tgen

static void Test_S20405C2()
{
  extern Class_Descriptor cd_S20405C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20405C2, buf);
    S20405C2 *dp, &lv = *(dp=new (buf) S20405C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20405C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C2)");
    check_field_offset(lv, s20405c2f0, ABISELECT(8,4), "S20405C2.s20405c2f0");
    check_field_offset(lv, s20405c2f1, ABISELECT(56,28), "S20405C2.s20405c2f1");
    test_class_info(&lv, &cd_S20405C2);
    dp->~S20405C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C2(Test_S20405C2, "S20405C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20405C2C1Ev();
extern void _ZN8S20405C2D1Ev();
Name_Map name_map_S20405C2[] = {
  NSPAIR(_ZN8S20405C2C1Ev),
  NSPAIR(_ZN8S20405C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20405C2[];
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY vtc_S20405C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C2[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
Class_Descriptor cd_S20405C2 = {  "S20405C2", // class name
  0,0,//no base classes
  &(vtc_S20405C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20405C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20405C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S20405C5_nt  {
  void  mf20405c5(); // _ZN11S20405C5_nt9mf20405c5Ev
};
//SIG(1 S20405C5_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20405C4  : virtual S20405C2 {
  int s20405c4f0;
  ::S20405C5_nt s20405c4f1;
  virtual  ~S20405C4(); // _ZN8S20405C4D2Ev
  virtual void  v15(); // _ZN8S20405C43v15Ev
  virtual void  v16(); // _ZN8S20405C43v16Ev
  virtual void  v17(); // _ZN8S20405C43v17Ev
  virtual void  v18(); // _ZN8S20405C43v18Ev
  virtual void  v19(); // _ZN8S20405C43v19Ev
  S20405C4(); // tgen
};
//SIG(-1 S20405C4) C1{ VBC2{ v6 v7 v8 v9 v10 v11 Fp[6] Fi} vd v1 v2 v3 v4 v5 Fi FU3{ m}}


 S20405C4 ::~S20405C4(){ note_dtor("S20405C4", this);}
void  S20405C4 ::v15(){vfunc_called(this, "_ZN8S20405C43v15Ev");}
void  S20405C4 ::v16(){vfunc_called(this, "_ZN8S20405C43v16Ev");}
void  S20405C4 ::v17(){vfunc_called(this, "_ZN8S20405C43v17Ev");}
void  S20405C4 ::v18(){vfunc_called(this, "_ZN8S20405C43v18Ev");}
void  S20405C4 ::v19(){vfunc_called(this, "_ZN8S20405C43v19Ev");}
S20405C4 ::S20405C4(){ note_ctor("S20405C4", this);} // tgen

static void Test_S20405C4()
{
  extern Class_Descriptor cd_S20405C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S20405C4, buf);
    S20405C4 *dp, &lv = *(dp=new (buf) S20405C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20405C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C4)");
    check_base_class_offset(lv, (S20405C2*), ABISELECT(16,12), "S20405C4");
    check_field_offset(lv, s20405c4f0, ABISELECT(8,4), "S20405C4.s20405c4f0");
    check_field_offset(lv, s20405c4f1, ABISELECT(12,8), "S20405C4.s20405c4f1");
    test_class_info(&lv, &cd_S20405C4);
    dp->~S20405C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C4(Test_S20405C4, "S20405C4", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20405C4C1Ev();
extern void _ZN8S20405C4D2Ev();
Name_Map name_map_S20405C4[] = {
  NSPAIR(_ZN8S20405C4C1Ev),
  NSPAIR(_ZN8S20405C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20405C2;
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
static Base_Class bases_S20405C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20405C2,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20405C4[];
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY vtc_S20405C4[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern VTBL_ENTRY _ZTV8S20405C4[];
static  VTT_ENTRY vtt_S20405C4[] = {
  {&(_ZTV8S20405C4[3]),  3,24},
  {&(_ZTV8S20405C4[18]),  18,24},
};
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
Class_Descriptor cd_S20405C4 = {  "S20405C4", // class name
  bases_S20405C4, 1,
  &(vtc_S20405C4[0]), // expected_vtbl_contents
  &(vtt_S20405C4[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20405C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20405C4),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20405C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20405C3  : virtual S20405C2 , virtual S20405C4 {
  virtual  ~S20405C3(); // _ZN8S20405C3D2Ev
  virtual void  v20(); // _ZN8S20405C33v20Ev
  S20405C3(); // tgen
};
//SIG(-1 S20405C3) C1{ VBC2{ v2 v3 v4 v5 v6 v7 Fp[6] Fi} VBC3{ VBC2 vd v8 v9 v10 v11 v12 Fi FU4{ m}} vd v1}


 S20405C3 ::~S20405C3(){ note_dtor("S20405C3", this);}
void  S20405C3 ::v20(){vfunc_called(this, "_ZN8S20405C33v20Ev");}
S20405C3 ::S20405C3(){ note_ctor("S20405C3", this);} // tgen

static void Test_S20405C3()
{
  extern Class_Descriptor cd_S20405C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20405C3, buf);
    S20405C3 *dp, &lv = *(dp=new (buf) S20405C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20405C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C3)");
    check_base_class_offset(lv, (S20405C2*), ABISELECT(8,4), "S20405C3");
    check_base_class_offset(lv, (S20405C2*)(S20405C4*), ABISELECT(8,4), "S20405C3");
    check_base_class_offset(lv, (S20405C4*), ABISELECT(72,36), "S20405C3");
    test_class_info(&lv, &cd_S20405C3);
    dp->~S20405C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C3(Test_S20405C3, "S20405C3", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20405C3C1Ev();
extern void _ZN8S20405C3D2Ev();
Name_Map name_map_S20405C3[] = {
  NSPAIR(_ZN8S20405C3C1Ev),
  NSPAIR(_ZN8S20405C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20405C2;
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
extern Class_Descriptor cd_S20405C4;
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
static Base_Class bases_S20405C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20405C2,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20405C4,    ABISELECT(72,36), //bcp->offset
    21, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20405C3[];
extern void _ZN8S20405C3D1Ev();
extern void _ZN8S20405C3D0Ev();
extern void _ZN8S20405C33v20Ev();
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
extern void ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev)();
extern void ABISELECT(_ZThn72_N8S20405C3D1Ev,_ZThn36_N8S20405C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev)();
extern void ABISELECT(_ZThn72_N8S20405C3D0Ev,_ZThn36_N8S20405C3D0Ev)() __attribute__((weak));
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY vtc_S20405C3[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&_ZN8S20405C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern VTBL_ENTRY _ZTV8S20405C3[];
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C3[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C4__8S20405C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
static  VTT_ENTRY vtt_S20405C3[] = {
  {&(_ZTV8S20405C3[4]),  4,37},
  {&(_ZTV8S20405C3[15]),  15,37},
  {&(_ZTV8S20405C3[30]),  30,37},
  {&(_tg__ZTV8S20405C4__8S20405C3[3]),  3,10},
  {&(_tg__ZTV8S20405C2__8S20405C4__8S20405C3[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20405C3[];
extern  VTBL_ENTRY _ZTV8S20405C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C3[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20405C3D0Ev,_ZThn36_N8S20405C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20405C3D1Ev,_ZThn36_N8S20405C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20405C3 = {  "S20405C3", // class name
  bases_S20405C3, 2,
  &(vtc_S20405C3[0]), // expected_vtbl_contents
  &(vtt_S20405C3[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20405C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20405C3),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20405C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20405C6  : virtual S20405C2 , virtual S20405C4 {
  virtual  ~S20405C6(); // _ZN8S20405C6D2Ev
  virtual void  v21(); // _ZN8S20405C63v21Ev
  virtual void  v22(); // _ZN8S20405C63v22Ev
  virtual void  v23(); // _ZN8S20405C63v23Ev
  virtual void  v24(); // _ZN8S20405C63v24Ev
  virtual void  v25(); // _ZN8S20405C63v25Ev
  virtual void  v26(); // _ZN8S20405C63v26Ev
  virtual void  v27(); // _ZN8S20405C63v27Ev
  virtual void  v28(); // _ZN8S20405C63v28Ev
  virtual void  v29(); // _ZN8S20405C63v29Ev
  S20405C6(); // tgen
};
//SIG(-1 S20405C6) C1{ VBC2{ v10 v11 v12 v13 v14 v15 Fp[6] Fi} VBC3{ VBC2 vd v16 v17 v18 v19 v20 Fi FU4{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S20405C6 ::~S20405C6(){ note_dtor("S20405C6", this);}
void  S20405C6 ::v21(){vfunc_called(this, "_ZN8S20405C63v21Ev");}
void  S20405C6 ::v22(){vfunc_called(this, "_ZN8S20405C63v22Ev");}
void  S20405C6 ::v23(){vfunc_called(this, "_ZN8S20405C63v23Ev");}
void  S20405C6 ::v24(){vfunc_called(this, "_ZN8S20405C63v24Ev");}
void  S20405C6 ::v25(){vfunc_called(this, "_ZN8S20405C63v25Ev");}
void  S20405C6 ::v26(){vfunc_called(this, "_ZN8S20405C63v26Ev");}
void  S20405C6 ::v27(){vfunc_called(this, "_ZN8S20405C63v27Ev");}
void  S20405C6 ::v28(){vfunc_called(this, "_ZN8S20405C63v28Ev");}
void  S20405C6 ::v29(){vfunc_called(this, "_ZN8S20405C63v29Ev");}
S20405C6 ::S20405C6(){ note_ctor("S20405C6", this);} // tgen

static void Test_S20405C6()
{
  extern Class_Descriptor cd_S20405C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20405C6, buf);
    S20405C6 *dp, &lv = *(dp=new (buf) S20405C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20405C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C6)");
    check_base_class_offset(lv, (S20405C2*), ABISELECT(8,4), "S20405C6");
    check_base_class_offset(lv, (S20405C2*)(S20405C4*), ABISELECT(8,4), "S20405C6");
    check_base_class_offset(lv, (S20405C4*), ABISELECT(72,36), "S20405C6");
    test_class_info(&lv, &cd_S20405C6);
    dp->~S20405C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C6(Test_S20405C6, "S20405C6", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20405C6C1Ev();
extern void _ZN8S20405C6D2Ev();
Name_Map name_map_S20405C6[] = {
  NSPAIR(_ZN8S20405C6C1Ev),
  NSPAIR(_ZN8S20405C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20405C2;
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
extern Class_Descriptor cd_S20405C4;
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
static Base_Class bases_S20405C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20405C2,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20405C4,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20405C6[];
extern void _ZN8S20405C6D1Ev();
extern void _ZN8S20405C6D0Ev();
extern void _ZN8S20405C63v21Ev();
extern void _ZN8S20405C63v22Ev();
extern void _ZN8S20405C63v23Ev();
extern void _ZN8S20405C63v24Ev();
extern void _ZN8S20405C63v25Ev();
extern void _ZN8S20405C63v26Ev();
extern void _ZN8S20405C63v27Ev();
extern void _ZN8S20405C63v28Ev();
extern void _ZN8S20405C63v29Ev();
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
extern void ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev)();
extern void ABISELECT(_ZThn72_N8S20405C6D1Ev,_ZThn36_N8S20405C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev)();
extern void ABISELECT(_ZThn72_N8S20405C6D0Ev,_ZThn36_N8S20405C6D0Ev)() __attribute__((weak));
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY vtc_S20405C6[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&_ZN8S20405C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v28Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern VTBL_ENTRY _ZTV8S20405C6[];
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C6[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C4__8S20405C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
static  VTT_ENTRY vtt_S20405C6[] = {
  {&(_ZTV8S20405C6[4]),  4,45},
  {&(_ZTV8S20405C6[23]),  23,45},
  {&(_ZTV8S20405C6[38]),  38,45},
  {&(_tg__ZTV8S20405C4__8S20405C6[3]),  3,10},
  {&(_tg__ZTV8S20405C2__8S20405C4__8S20405C6[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20405C6[];
extern  VTBL_ENTRY _ZTV8S20405C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C6[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20405C6D0Ev,_ZThn36_N8S20405C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20405C6D1Ev,_ZThn36_N8S20405C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20405C6 = {  "S20405C6", // class name
  bases_S20405C6, 2,
  &(vtc_S20405C6[0]), // expected_vtbl_contents
  &(vtt_S20405C6[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20405C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20405C6),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20405C6),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20405C1  : virtual S20405C2 , virtual S20405C3 , S20405C4 , virtual S20405C6 {
  short  :0;
  char s20405c1f1[8];
  virtual  ~S20405C1(); // _ZN8S20405C1D2Ev
  virtual void  v1(); // _ZN8S20405C12v1Ev
  virtual void  v2(); // _ZN8S20405C12v2Ev
  virtual void  v3(); // _ZN8S20405C12v3Ev
  virtual void  v4(); // _ZN8S20405C12v4Ev
  virtual void  v5(); // _ZN8S20405C12v5Ev
  virtual void  v6(); // _ZN8S20405C12v6Ev
  virtual void  v7(); // _ZN8S20405C12v7Ev
  virtual void  v8(); // _ZN8S20405C12v8Ev
  S20405C1(); // tgen
};
//SIG(1 S20405C1) C1{ VBC2{ v9 v10 v11 v12 v13 v14 Fp[6] Fi} VBC3{ VBC2 VBC4{ VBC2 vd v15 v16 v17 v18 v19 Fi FU5{ m}} vd v20} BC4 VBC6{ VBC2 VBC4 vd v21 v22 v23 v24 v25 v26 v27 v28 v29} vd v1 v2 v3 v4 v5 v6 v7 v8 Fs:0 Fc[8]}


 S20405C1 ::~S20405C1(){ note_dtor("S20405C1", this);}
void  S20405C1 ::v1(){vfunc_called(this, "_ZN8S20405C12v1Ev");}
void  S20405C1 ::v2(){vfunc_called(this, "_ZN8S20405C12v2Ev");}
void  S20405C1 ::v3(){vfunc_called(this, "_ZN8S20405C12v3Ev");}
void  S20405C1 ::v4(){vfunc_called(this, "_ZN8S20405C12v4Ev");}
void  S20405C1 ::v5(){vfunc_called(this, "_ZN8S20405C12v5Ev");}
void  S20405C1 ::v6(){vfunc_called(this, "_ZN8S20405C12v6Ev");}
void  S20405C1 ::v7(){vfunc_called(this, "_ZN8S20405C12v7Ev");}
void  S20405C1 ::v8(){vfunc_called(this, "_ZN8S20405C12v8Ev");}
S20405C1 ::S20405C1(){ note_ctor("S20405C1", this);} // tgen

static void Test_S20405C1()
{
  extern Class_Descriptor cd_S20405C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S20405C1, buf);
    S20405C1 *dp, &lv = *(dp=new (buf) S20405C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S20405C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20405C1)");
    check_base_class_offset(lv, (S20405C2*), ABISELECT(24,20), "S20405C1");
    check_base_class_offset(lv, (S20405C2*)(S20405C3*), ABISELECT(24,20), "S20405C1");
    /*is_ambiguous_... S20405C1::S20405C4 */ AMB_check_base_class_offset(lv, (S20405C2*)(S20405C4*), ABISELECT(24,20), "S20405C1");
    /*is_ambiguous_... S20405C1::S20405C4 */ AMB_check_base_class_offset(lv, (S20405C2*)(S20405C4*), ABISELECT(24,20), "S20405C1");
    check_base_class_offset(lv, (S20405C2*)(S20405C6*), ABISELECT(24,20), "S20405C1");
    check_base_class_offset(lv, (S20405C4*)(S20405C3*), ABISELECT(96,56), "S20405C1");
    check_base_class_offset(lv, (S20405C4*)(S20405C6*), ABISELECT(96,56), "S20405C1");
    check_base_class_offset(lv, (S20405C3*), ABISELECT(88,52), "S20405C1");
    /*is_ambiguous_... S20405C1::S20405C4 */ AMB_check_base_class_offset(lv, (S20405C4*), 0, "S20405C1");
    check_base_class_offset(lv, (S20405C6*), ABISELECT(112,68), "S20405C1");
    check_field_offset(lv, s20405c1f1, ABISELECT(14,10), "S20405C1.s20405c1f1");
    test_class_info(&lv, &cd_S20405C1);
    dp->~S20405C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20405C1(Test_S20405C1, "S20405C1", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN8S20405C1C1Ev();
extern void _ZN8S20405C1D2Ev();
Name_Map name_map_S20405C1[] = {
  NSPAIR(_ZN8S20405C1C1Ev),
  NSPAIR(_ZN8S20405C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20405C2;
extern VTBL_ENTRY _ZTI8S20405C2[];
extern  VTBL_ENTRY _ZTV8S20405C2[];
extern Class_Descriptor cd_S20405C4;
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
extern Class_Descriptor cd_S20405C3;
extern VTBL_ENTRY _ZTI8S20405C3[];
extern  VTBL_ENTRY _ZTV8S20405C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C3[];
extern Class_Descriptor cd_S20405C4;
extern VTBL_ENTRY _ZTI8S20405C4[];
extern  VTBL_ENTRY _ZTV8S20405C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C4[];
extern Class_Descriptor cd_S20405C6;
extern VTBL_ENTRY _ZTI8S20405C6[];
extern  VTBL_ENTRY _ZTV8S20405C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C6[];
static Base_Class bases_S20405C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20405C2,    ABISELECT(24,20), //bcp->offset
    21, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20405C4,    ABISELECT(96,56), //bcp->offset
    44, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20405C3,    ABISELECT(88,52), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20405C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20405C6,    ABISELECT(112,68), //bcp->offset
    60, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20405C1[];
extern void _ZN8S20405C1D1Ev();
extern void _ZN8S20405C1D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
extern void _ZN8S20405C12v1Ev();
extern void _ZN8S20405C12v2Ev();
extern void _ZN8S20405C12v3Ev();
extern void _ZN8S20405C12v4Ev();
extern void _ZN8S20405C12v5Ev();
extern void _ZN8S20405C12v6Ev();
extern void _ZN8S20405C12v7Ev();
extern void _ZN8S20405C12v8Ev();
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev)();
extern void ABISELECT(_ZThn88_N8S20405C1D1Ev,_ZThn52_N8S20405C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev)();
extern void ABISELECT(_ZThn88_N8S20405C1D0Ev,_ZThn52_N8S20405C1D0Ev)() __attribute__((weak));
extern void _ZN8S20405C33v20Ev();
extern void ABISELECT(_ZTv0_n32_N8S20405C1D1Ev,_ZTv0_n16_N8S20405C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20405C1D1Ev,_ZThn56_N8S20405C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20405C1D0Ev,_ZTv0_n16_N8S20405C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S20405C1D0Ev,_ZThn56_N8S20405C1D0Ev)() __attribute__((weak));
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
extern void ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20405C1D1Ev,_ZThn68_N8S20405C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20405C1D0Ev,_ZThn68_N8S20405C1D0Ev)() __attribute__((weak));
extern void _ZN8S20405C63v21Ev();
extern void _ZN8S20405C63v22Ev();
extern void _ZN8S20405C63v23Ev();
extern void _ZN8S20405C63v24Ev();
extern void _ZN8S20405C63v25Ev();
extern void _ZN8S20405C63v26Ev();
extern void _ZN8S20405C63v27Ev();
extern void _ZN8S20405C63v28Ev();
extern void _ZN8S20405C63v29Ev();
static  VTBL_ENTRY vtc_S20405C1[] = {
  ABISELECT(112,68),
  ABISELECT(96,56),
  ABISELECT(88,52),
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&_ZN8S20405C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v7Ev,
  (VTBL_ENTRY)&_ZN8S20405C12v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
  0,
  ABISELECT(-88,-52),
  ABISELECT(8,4),
  ABISELECT(-64,-32),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-56),
  ABISELECT(-72,-36),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C1D1Ev,_ZTv0_n16_N8S20405C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C1D0Ev,_ZTv0_n16_N8S20405C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-68),
  ABISELECT(-16,-12),
  ABISELECT(-88,-48),
  ABISELECT(-112,-68),
  (VTBL_ENTRY)&(_ZTI8S20405C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v28Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v29Ev,
};
extern VTBL_ENTRY _ZTV8S20405C1[];
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__A__8S20405C1[] = {
  ABISELECT(24,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C4__A__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern void _ZN8S20405C3D1Ev();
extern void _ZN8S20405C3D0Ev();
extern void _ZN8S20405C33v20Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C3__8S20405C1[] = {
  ABISELECT(8,4),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&_ZN8S20405C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C33v20Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C3__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S20405C3D1Ev,_ZThn4_N8S20405C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S20405C3D0Ev,_ZThn4_N8S20405C3D0Ev)() __attribute__((weak));
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C3__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-72,-36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20405C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C4D1Ev();
extern void _ZN8S20405C4D0Ev();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C1[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C4__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S20405C4[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern void _ZN8S20405C6D1Ev();
extern void _ZN8S20405C6D0Ev();
extern void _ZN8S20405C63v21Ev();
extern void _ZN8S20405C63v22Ev();
extern void _ZN8S20405C63v23Ev();
extern void _ZN8S20405C63v24Ev();
extern void _ZN8S20405C63v25Ev();
extern void _ZN8S20405C63v26Ev();
extern void _ZN8S20405C63v27Ev();
extern void _ZN8S20405C63v28Ev();
extern void _ZN8S20405C63v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C6__8S20405C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&_ZN8S20405C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20405C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v28Ev,
  (VTBL_ENTRY)&_ZN8S20405C63v29Ev,
};
extern void _ZN8S20405C22v9Ev();
extern void _ZN8S20405C23v10Ev();
extern void _ZN8S20405C23v11Ev();
extern void _ZN8S20405C23v12Ev();
extern void _ZN8S20405C23v13Ev();
extern void _ZN8S20405C23v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C2__8S20405C6__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&_ZN8S20405C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20405C23v14Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev)();
extern void _ZN8S20405C43v15Ev();
extern void _ZN8S20405C43v16Ev();
extern void _ZN8S20405C43v17Ev();
extern void _ZN8S20405C43v18Ev();
extern void _ZN8S20405C43v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20405C4__8S20405C6__8S20405C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(-72,-36),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20405C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C6D1Ev,_ZTv0_n16_N8S20405C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20405C6D0Ev,_ZTv0_n16_N8S20405C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20405C43v15Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v16Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v17Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v18Ev,
  (VTBL_ENTRY)&_ZN8S20405C43v19Ev,
};
static  VTT_ENTRY vtt_S20405C1[] = {
  {&(_ZTV8S20405C1[6]),  6,85},
  {&(_tg__ZTV8S20405C4__A__8S20405C1[3]),  3,10},
  {&(_tg__ZTV8S20405C2__8S20405C4__A__8S20405C1[8]),  8,14},
  {&(_ZTV8S20405C1[29]),  29,85},
  {&(_ZTV8S20405C1[41]),  41,85},
  {&(_ZTV8S20405C1[53]),  53,85},
  {&(_ZTV8S20405C1[74]),  74,85},
  {&(_tg__ZTV8S20405C3__8S20405C1[4]),  4,7},
  {&(_tg__ZTV8S20405C2__8S20405C3__8S20405C1[8]),  8,14},
  {&(_tg__ZTV8S20405C4__8S20405C3__8S20405C1[9]),  9,16},
  {&(_tg__ZTV8S20405C4__8S20405C1[3]),  3,10},
  {&(_tg__ZTV8S20405C2__8S20405C4__8S20405C1[8]),  8,14},
  {&(_tg__ZTV8S20405C6__8S20405C1[4]),  4,15},
  {&(_tg__ZTV8S20405C2__8S20405C6__8S20405C1[8]),  8,14},
  {&(_tg__ZTV8S20405C4__8S20405C6__8S20405C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20405C1[];
extern  VTBL_ENTRY _ZTV8S20405C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20405C1[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C3D0Ev,_ZTv0_n16_N8S20405C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20405C3D0Ev,_ZThn4_N8S20405C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C3D1Ev,_ZTv0_n16_N8S20405C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20405C3D1Ev,_ZThn4_N8S20405C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C1D0Ev,_ZTv0_n16_N8S20405C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20405C1D0Ev,_ZThn56_N8S20405C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20405C1D1Ev,_ZTv0_n16_N8S20405C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20405C1D1Ev,_ZThn56_N8S20405C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20405C1D0Ev,_ZTv0_n20_N8S20405C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20405C1D0Ev,_ZThn68_N8S20405C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20405C1D0Ev,_ZThn52_N8S20405C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20405C1D1Ev,_ZTv0_n20_N8S20405C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20405C1D1Ev,_ZThn68_N8S20405C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20405C1D1Ev,_ZThn52_N8S20405C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20405C1 = {  "S20405C1", // class name
  bases_S20405C1, 5,
  &(vtc_S20405C1[0]), // expected_vtbl_contents
  &(vtt_S20405C1[0]), // expected_vtt_contents
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI8S20405C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20405C1),85, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20405C1),15, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C6  {
  virtual void  v1(); // _ZN8S20733C62v1Ev
  ~S20733C6(); // tgen
  S20733C6(); // tgen
};
//SIG(-1 S20733C6) C1{ v1}


void  S20733C6 ::v1(){vfunc_called(this, "_ZN8S20733C62v1Ev");}
S20733C6 ::~S20733C6(){ note_dtor("S20733C6", this);} // tgen
S20733C6 ::S20733C6(){ note_ctor("S20733C6", this);} // tgen

static void Test_S20733C6()
{
  extern Class_Descriptor cd_S20733C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20733C6, buf);
    S20733C6 *dp, &lv = *(dp=new (buf) S20733C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20733C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C6)");
    test_class_info(&lv, &cd_S20733C6);
    dp->~S20733C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C6(Test_S20733C6, "S20733C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20733C6C1Ev();
extern void _ZN8S20733C6D1Ev();
Name_Map name_map_S20733C6[] = {
  NSPAIR(_ZN8S20733C6C1Ev),
  NSPAIR(_ZN8S20733C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20733C6[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C6[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
Class_Descriptor cd_S20733C6 = {  "S20733C6", // class name
  0,0,//no base classes
  &(vtc_S20733C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20733C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20733C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C5  : virtual S2121C38 , S20733C6 , virtual S2121C28 {
  ~S20733C5(); // tgen
  S20733C5(); // tgen
};
//SIG(-1 S20733C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20733C5 ::~S20733C5(){ note_dtor("S20733C5", this);} // tgen
S20733C5 ::S20733C5(){ note_ctor("S20733C5", this);} // tgen

static void Test_S20733C5()
{
  extern Class_Descriptor cd_S20733C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20733C5, buf);
    S20733C5 *dp, &lv = *(dp=new (buf) S20733C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20733C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20733C5");
    check_base_class_offset(lv, (S20733C6*), 0, "S20733C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S20733C5");
    test_class_info(&lv, &cd_S20733C5);
    dp->~S20733C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C5(Test_S20733C5, "S20733C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20733C5C1Ev();
extern void _ZN8S20733C5D1Ev();
Name_Map name_map_S20733C5[] = {
  NSPAIR(_ZN8S20733C5C1Ev),
  NSPAIR(_ZN8S20733C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20733C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C5[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C5[];
static  VTT_ENTRY vtt_S20733C5[] = {
  {&(_ZTV8S20733C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
Class_Descriptor cd_S20733C5 = {  "S20733C5", // class name
  bases_S20733C5, 3,
  &(vtc_S20733C5[0]), // expected_vtbl_contents
  &(vtt_S20733C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20733C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20733C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C5),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C4  : S20733C5 , S20733C6 {
  ~S20733C4(); // tgen
  S20733C4(); // tgen
};
//SIG(-1 S20733C4) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S20733C4 ::~S20733C4(){ note_dtor("S20733C4", this);} // tgen
S20733C4 ::S20733C4(){ note_ctor("S20733C4", this);} // tgen

static void Test_S20733C4()
{
  extern Class_Descriptor cd_S20733C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20733C4, buf);
    S20733C4 *dp, &lv = *(dp=new (buf) S20733C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20733C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C4)");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*), 0, "S20733C4");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*), 0, "S20733C4");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*), 0, "S20733C4");
    check_base_class_offset(lv, (S20733C5*), 0, "S20733C4");
    /*is_ambiguous_... S20733C4::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*), ABISELECT(8,4), "S20733C4");
    test_class_info(&lv, &cd_S20733C4);
    dp->~S20733C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C4(Test_S20733C4, "S20733C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20733C4C1Ev();
extern void _ZN8S20733C4D1Ev();
Name_Map name_map_S20733C4[] = {
  NSPAIR(_ZN8S20733C4C1Ev),
  NSPAIR(_ZN8S20733C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
static Base_Class bases_S20733C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20733C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20733C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C4[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C4[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C5__8S20733C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C4[] = {
  {&(_ZTV8S20733C4[4]),  4,8},
  {&(_tg__ZTV8S20733C5__8S20733C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
Class_Descriptor cd_S20733C4 = {  "S20733C4", // class name
  bases_S20733C4, 5,
  &(vtc_S20733C4[0]), // expected_vtbl_contents
  &(vtt_S20733C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20733C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20733C4),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C4),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C8  : S2121C38 , S20733C5 {
  virtual void  v2(); // _ZN8S20733C82v2Ev
  ~S20733C8(); // tgen
  S20733C8(); // tgen
};
//SIG(-1 S20733C8) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S20733C8 ::v2(){vfunc_called(this, "_ZN8S20733C82v2Ev");}
S20733C8 ::~S20733C8(){ note_dtor("S20733C8", this);} // tgen
S20733C8 ::S20733C8(){ note_ctor("S20733C8", this);} // tgen

static void Test_S20733C8()
{
  extern Class_Descriptor cd_S20733C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20733C8, buf);
    S20733C8 *dp, &lv = *(dp=new (buf) S20733C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20733C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C8)");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20733C8");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*), ABISELECT(8,4), "S20733C8");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*), 0, "S20733C8");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*), 0, "S20733C8");
    check_base_class_offset(lv, (S20733C5*), 0, "S20733C8");
    test_class_info(&lv, &cd_S20733C8);
    dp->~S20733C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C8(Test_S20733C8, "S20733C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20733C8C1Ev();
extern void _ZN8S20733C8D1Ev();
Name_Map name_map_S20733C8[] = {
  NSPAIR(_ZN8S20733C8C1Ev),
  NSPAIR(_ZN8S20733C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
static Base_Class bases_S20733C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C8[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY vtc_S20733C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20733C8[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C5__8S20733C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C8[] = {
  {&(_ZTV8S20733C8[4]),  4,6},
  {&(_tg__ZTV8S20733C5__8S20733C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
Class_Descriptor cd_S20733C8 = {  "S20733C8", // class name
  bases_S20733C8, 5,
  &(vtc_S20733C8[0]), // expected_vtbl_contents
  &(vtt_S20733C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20733C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20733C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C8),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C9  : S20733C6 , S2121C28 , virtual S2121C38 {
  ~S20733C9(); // tgen
  S20733C9(); // tgen
};
//SIG(-1 S20733C9) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S20733C9 ::~S20733C9(){ note_dtor("S20733C9", this);} // tgen
S20733C9 ::S20733C9(){ note_ctor("S20733C9", this);} // tgen

static void Test_S20733C9()
{
  extern Class_Descriptor cd_S20733C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20733C9, buf);
    S20733C9 *dp, &lv = *(dp=new (buf) S20733C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20733C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C9)");
    check_base_class_offset(lv, (S20733C6*), 0, "S20733C9");
    check_base_class_offset(lv, (S2121C28*), 0, "S20733C9");
    check_base_class_offset(lv, (S2121C38*), 0, "S20733C9");
    test_class_info(&lv, &cd_S20733C9);
    dp->~S20733C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C9(Test_S20733C9, "S20733C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20733C9C1Ev();
extern void _ZN8S20733C9D1Ev();
Name_Map name_map_S20733C9[] = {
  NSPAIR(_ZN8S20733C9C1Ev),
  NSPAIR(_ZN8S20733C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S20733C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C9[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C9[];
static  VTT_ENTRY vtt_S20733C9[] = {
  {&(_ZTV8S20733C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
Class_Descriptor cd_S20733C9 = {  "S20733C9", // class name
  bases_S20733C9, 3,
  &(vtc_S20733C9[0]), // expected_vtbl_contents
  &(vtt_S20733C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20733C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20733C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C9),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C2  : virtual S2121C38 , virtual S20733C4 , virtual S20733C8 , virtual S20733C9 , S20733C6 {
  ~S20733C2(); // tgen
  S20733C2(); // tgen
};
//SIG(-1 S20733C2) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S20733C2 ::~S20733C2(){ note_dtor("S20733C2", this);} // tgen
S20733C2 ::S20733C2(){ note_ctor("S20733C2", this);} // tgen

static void Test_S20733C2()
{
  extern Class_Descriptor cd_S20733C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20733C2, buf);
    S20733C2 *dp, &lv = *(dp=new (buf) S20733C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20733C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C2)");
    /*is_ambiguous_... S20733C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20733C2");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C2");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C2");
    check_base_class_offset(lv, (S2121C38*)(S20733C9*), 0, "S20733C2");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(8,4), "S20733C2");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C2");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C2");
    check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(8,4), "S20733C2");
    /*is_ambiguous_... S20733C4::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(16,8), "S20733C2");
    check_base_class_offset(lv, (S20733C4*), ABISELECT(8,4), "S20733C2");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(24,12), "S20733C2");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(24,12), "S20733C2");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(24,12), "S20733C2");
    check_base_class_offset(lv, (S20733C8*), ABISELECT(24,12), "S20733C2");
    check_base_class_offset(lv, (S20733C6*)(S20733C9*), ABISELECT(32,16), "S20733C2");
    check_base_class_offset(lv, (S2121C28*)(S20733C9*), ABISELECT(32,16), "S20733C2");
    check_base_class_offset(lv, (S20733C9*), ABISELECT(32,16), "S20733C2");
    /*is_ambiguous_... S20733C2::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*), 0, "S20733C2");
    test_class_info(&lv, &cd_S20733C2);
    dp->~S20733C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C2(Test_S20733C2, "S20733C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20733C2C1Ev();
extern void _ZN8S20733C2D1Ev();
Name_Map name_map_S20733C2[] = {
  NSPAIR(_ZN8S20733C2C1Ev),
  NSPAIR(_ZN8S20733C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C9;
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
static Base_Class bases_S20733C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20733C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20733C9,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C2[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C2[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C2[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__8S20733C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__A1__8S20733C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C2[] = {
  {&(_ZTV8S20733C2[7]),  7,30},
  {&(_ZTV8S20733C2[13]),  13,30},
  {&(_ZTV8S20733C2[16]),  16,30},
  {&(_ZTV8S20733C2[23]),  23,30},
  {&(_ZTV8S20733C2[29]),  29,30},
  {&(_tg__ZTV8S20733C4__8S20733C2[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__8S20733C2[4]),  4,5},
  {&(_tg__ZTV8S20733C8__8S20733C2[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__A1__8S20733C2[4]),  4,5},
  {&(_tg__ZTV8S20733C9__8S20733C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20733C2[];
extern  VTBL_ENTRY _ZTV8S20733C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C2[];
Class_Descriptor cd_S20733C2 = {  "S20733C2", // class name
  bases_S20733C2, 14,
  &(vtc_S20733C2[0]), // expected_vtbl_contents
  &(vtt_S20733C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20733C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20733C2),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C2),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C13  : virtual S2121C38 , virtual S20733C8 , S20733C6 {
  int s20733c13f0;
  void *s20733c13f1;
  ~S20733C13(); // tgen
  S20733C13(); // tgen
};
//SIG(-1 S20733C13) C1{ VBC2{ m} VBC3{ BC2 BC4{ VBC2 BC5{ v1} VBC6{ m}} v2} BC5 Fi Fp}


S20733C13 ::~S20733C13(){ note_dtor("S20733C13", this);} // tgen
S20733C13 ::S20733C13(){ note_ctor("S20733C13", this);} // tgen

static void Test_S20733C13()
{
  extern Class_Descriptor cd_S20733C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20733C13, buf);
    S20733C13 *dp, &lv = *(dp=new (buf) S20733C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20733C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C13)");
    /*is_ambiguous_... S20733C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20733C13");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C13");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(24,12), "S20733C13");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(24,12), "S20733C13");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C13");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(24,12), "S20733C13");
    check_base_class_offset(lv, (S20733C8*), ABISELECT(24,12), "S20733C13");
    /*is_ambiguous_... S20733C13::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*), 0, "S20733C13");
    check_field_offset(lv, s20733c13f0, ABISELECT(8,4), "S20733C13.s20733c13f0");
    check_field_offset(lv, s20733c13f1, ABISELECT(16,8), "S20733C13.s20733c13f1");
    test_class_info(&lv, &cd_S20733C13);
    dp->~S20733C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C13(Test_S20733C13, "S20733C13", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S20733C13C1Ev();
extern void _ZN9S20733C13D1Ev();
Name_Map name_map_S20733C13[] = {
  NSPAIR(_ZN9S20733C13C1Ev),
  NSPAIR(_ZN9S20733C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
static Base_Class bases_S20733C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20733C13[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY vtc_S20733C13[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern VTBL_ENTRY _ZTV9S20733C13[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__9S20733C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C13[] = {
  {&(_ZTV9S20733C13[5]),  5,14},
  {&(_ZTV9S20733C13[12]),  12,14},
  {&(_tg__ZTV8S20733C8__9S20733C13[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__9S20733C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20733C13[];
extern  VTBL_ENTRY _ZTV9S20733C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C13[];
Class_Descriptor cd_S20733C13 = {  "S20733C13", // class name
  bases_S20733C13, 7,
  &(vtc_S20733C13[0]), // expected_vtbl_contents
  &(vtt_S20733C13[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20733C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20733C13),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C13),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C12  : virtual S20733C2 , virtual S20733C13 {
  int s20733c12f0:32;
  ~S20733C12(); // tgen
  S20733C12(); // tgen
};
//SIG(-1 S20733C12) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ VBC3 VBC8 BC6 Fi Fp} Fi:32}


S20733C12 ::~S20733C12(){ note_dtor("S20733C12", this);} // tgen
S20733C12 ::S20733C12(){ note_ctor("S20733C12", this);} // tgen

static void Test_S20733C12()
{
  extern Class_Descriptor cd_S20733C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20733C12, buf);
    S20733C12 *dp, &lv = *(dp=new (buf) S20733C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20733C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C12)");
    /*is_ambiguous_... S20733C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C2*), 0, "S20733C12");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C12");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C12");
    check_base_class_offset(lv, (S2121C38*)(S20733C9*), 0, "S20733C12");
    /*is_ambiguous_... S20733C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C13*), 0, "S20733C12");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(16,8), "S20733C12");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C12");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C12");
    check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(16,8), "S20733C12");
    /*is_ambiguous_... S20733C4::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(24,12), "S20733C12");
    check_base_class_offset(lv, (S20733C4*)(S20733C2*), ABISELECT(16,8), "S20733C12");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C8*)(S20733C2*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C8*)(S20733C13*), ABISELECT(32,16), "S20733C12");
    check_base_class_offset(lv, (S20733C6*)(S20733C9*), ABISELECT(40,20), "S20733C12");
    check_base_class_offset(lv, (S2121C28*)(S20733C9*), ABISELECT(40,20), "S20733C12");
    check_base_class_offset(lv, (S20733C9*)(S20733C2*), ABISELECT(40,20), "S20733C12");
    /*is_ambiguous_... S20733C2::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C2*), 0, "S20733C12");
    check_base_class_offset(lv, (S20733C2*), 0, "S20733C12");
    /*is_ambiguous_... S20733C13::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C13*), ABISELECT(48,24), "S20733C12");
    check_base_class_offset(lv, (S20733C13*), ABISELECT(48,24), "S20733C12");
    set_bf_and_test(lv, s20733c12f0, ABISELECT(8,4), 0, 32, 1, "S20733C12");
    set_bf_and_test(lv, s20733c12f0, ABISELECT(8,4), 0, 32, hide_sll(1LL<<31), "S20733C12");
    test_class_info(&lv, &cd_S20733C12);
    dp->~S20733C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C12(Test_S20733C12, "S20733C12", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20733C12C1Ev();
extern void _ZN9S20733C12D1Ev();
Name_Map name_map_S20733C12[] = {
  NSPAIR(_ZN9S20733C12C1Ev),
  NSPAIR(_ZN9S20733C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C9;
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C2;
extern VTBL_ENTRY _ZTI8S20733C2[];
extern  VTBL_ENTRY _ZTV8S20733C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C2[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C13;
extern VTBL_ENTRY _ZTI9S20733C13[];
extern  VTBL_ENTRY _ZTV9S20733C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C13[];
static Base_Class bases_S20733C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20733C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(32,16), //bcp->offset
    20, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20733C9,    ABISELECT(40,20), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20733C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20733C13,    ABISELECT(48,24), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20733C12[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C12[] = {
  ABISELECT(48,24),
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20733C12[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C2__9S20733C12[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C2__9S20733C12[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__8S20733C2__9S20733C12[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C2__9S20733C12[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C2__9S20733C12[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__9S20733C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C12[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__A1__9S20733C12[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C12[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C12[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C13__9S20733C12[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
static  VTT_ENTRY vtt_S20733C12[] = {
  {&(_ZTV9S20733C12[10]),  10,40},
  {&(_ZTV9S20733C12[10]),  10,40},
  {&(_ZTV9S20733C12[16]),  16,40},
  {&(_ZTV9S20733C12[19]),  19,40},
  {&(_ZTV9S20733C12[26]),  26,40},
  {&(_ZTV9S20733C12[32]),  32,40},
  {&(_ZTV9S20733C12[39]),  39,40},
  {&(_tg__ZTV8S20733C2__9S20733C12[7]),  7,8},
  {&(_tg__ZTV8S20733C4__8S20733C2__9S20733C12[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__8S20733C2__9S20733C12[2]),  2,3},
  {&(_tg__ZTV8S20733C8__8S20733C2__9S20733C12[6]),  6,8},
  {&(_tg__ZTV8S20733C9__8S20733C2__9S20733C12[4]),  4,5},
  {&(_tg__ZTV8S20733C4__9S20733C12[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__9S20733C12[4]),  4,5},
  {&(_tg__ZTV8S20733C8__9S20733C12[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__A1__9S20733C12[4]),  4,5},
  {&(_tg__ZTV8S20733C9__9S20733C12[3]),  3,4},
  {&(_tg__ZTV9S20733C13__9S20733C12[5]),  5,6},
  {&(_tg__ZTV8S20733C8__9S20733C13__9S20733C12[6]),  6,8},
};
extern VTBL_ENTRY _ZTI9S20733C12[];
extern  VTBL_ENTRY _ZTV9S20733C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C12[];
Class_Descriptor cd_S20733C12 = {  "S20733C12", // class name
  bases_S20733C12, 17,
  &(vtc_S20733C12[0]), // expected_vtbl_contents
  &(vtt_S20733C12[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20733C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20733C12),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C12),19, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C15  : virtual S20733C8 {
  int s20733c15f0;
  ~S20733C15(); // tgen
  S20733C15(); // tgen
};
//SIG(-1 S20733C15) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S20733C15 ::~S20733C15(){ note_dtor("S20733C15", this);} // tgen
S20733C15 ::S20733C15(){ note_ctor("S20733C15", this);} // tgen

static void Test_S20733C15()
{
  extern Class_Descriptor cd_S20733C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20733C15, buf);
    S20733C15 *dp, &lv = *(dp=new (buf) S20733C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20733C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C15)");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), 0, "S20733C15");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), ABISELECT(12,8), "S20733C15");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), 0, "S20733C15");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C15");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), 0, "S20733C15");
    check_base_class_offset(lv, (S20733C8*), 0, "S20733C15");
    check_field_offset(lv, s20733c15f0, ABISELECT(8,4), "S20733C15.s20733c15f0");
    test_class_info(&lv, &cd_S20733C15);
    dp->~S20733C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C15(Test_S20733C15, "S20733C15", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20733C15C1Ev();
extern void _ZN9S20733C15D1Ev();
Name_Map name_map_S20733C15[] = {
  NSPAIR(_ZN9S20733C15C1Ev),
  NSPAIR(_ZN9S20733C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
static Base_Class bases_S20733C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20733C15[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY vtc_S20733C15[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C15[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern VTBL_ENTRY _ZTV9S20733C15[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C15[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__9S20733C15[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C15[] = {
  {&(_ZTV9S20733C15[7]),  7,9},
  {&(_ZTV9S20733C15[7]),  7,9},
  {&(_tg__ZTV8S20733C8__9S20733C15[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__9S20733C15[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20733C15[];
extern  VTBL_ENTRY _ZTV9S20733C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C15[];
Class_Descriptor cd_S20733C15 = {  "S20733C15", // class name
  bases_S20733C15, 6,
  &(vtc_S20733C15[0]), // expected_vtbl_contents
  &(vtt_S20733C15[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20733C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20733C15),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C15),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C14  : S20733C15 , virtual S20733C6 {
  __tsu64 s20733c14f0:1;
  ~S20733C14(); // tgen
  S20733C14(); // tgen
};
//SIG(-1 S20733C14) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S20733C14 ::~S20733C14(){ note_dtor("S20733C14", this);} // tgen
S20733C14 ::S20733C14(){ note_ctor("S20733C14", this);} // tgen

static void Test_S20733C14()
{
  extern Class_Descriptor cd_S20733C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20733C14, buf);
    S20733C14 *dp, &lv = *(dp=new (buf) S20733C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20733C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C14)");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), 0, "S20733C14");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), ABISELECT(13,9), "S20733C14");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), 0, "S20733C14");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C14");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), 0, "S20733C14");
    check_base_class_offset(lv, (S20733C8*)(S20733C15*), 0, "S20733C14");
    check_base_class_offset(lv, (S20733C15*), 0, "S20733C14");
    /*is_ambiguous_... S20733C14::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*), ABISELECT(16,12), "S20733C14");
    set_bf_and_test(lv, s20733c14f0, ABISELECT(12,8), 0, 1, 1, "S20733C14");
    test_class_info(&lv, &cd_S20733C14);
    dp->~S20733C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C14(Test_S20733C14, "S20733C14", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20733C14C1Ev();
extern void _ZN9S20733C14D1Ev();
Name_Map name_map_S20733C14[] = {
  NSPAIR(_ZN9S20733C14C1Ev),
  NSPAIR(_ZN9S20733C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C15;
extern VTBL_ENTRY _ZTI9S20733C15[];
extern  VTBL_ENTRY _ZTV9S20733C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C15[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
static Base_Class bases_S20733C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20733C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20733C6,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20733C14[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C14[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20733C14[];
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C15__9S20733C14[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C15[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C14[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__9S20733C14[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C14[] = {
  {&(_ZTV9S20733C14[8]),  8,14},
  {&(_tg__ZTV9S20733C15__9S20733C14[7]),  7,9},
  {&(_tg__ZTV9S20733C15__9S20733C14[7]),  7,9},
  {&(_ZTV9S20733C14[8]),  8,14},
  {&(_ZTV9S20733C14[13]),  13,14},
  {&(_tg__ZTV8S20733C8__9S20733C14[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__9S20733C14[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20733C14[];
extern  VTBL_ENTRY _ZTV9S20733C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C14[];
Class_Descriptor cd_S20733C14 = {  "S20733C14", // class name
  bases_S20733C14, 8,
  &(vtc_S20733C14[0]), // expected_vtbl_contents
  &(vtt_S20733C14[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20733C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20733C14),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C14),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C10  : S6282C14_nt , virtual S20733C12 , virtual S20733C14 , S20733C5 {
  ~S20733C10(); // tgen
  S20733C10(); // tgen
};
//SIG(-1 S20733C10) C1{ BC2{ vd m Fi} VBC3{ VBC4{ VBC5{ m} VBC6{ BC7{ VBC5 BC8{ v1} VBC9{ m}} BC8} VBC10{ BC5 BC7 v2} VBC11{ BC8 BC9 VBC5} BC8} VBC12{ VBC5 VBC10 BC8 Fi Fp} Fi:32} VBC13{ BC14{ VBC10 Fi} VBC8 FL:1} BC7}


S20733C10 ::~S20733C10(){ note_dtor("S20733C10", this);} // tgen
S20733C10 ::S20733C10(){ note_ctor("S20733C10", this);} // tgen

static void Test_S20733C10()
{
  extern Class_Descriptor cd_S20733C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,16)];
    init_test(&cd_S20733C10, buf);
    S20733C10 *dp, &lv = *(dp=new (buf) S20733C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S20733C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C10)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S20733C10");
    /*is_ambiguous_... S20733C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C2*), 0, "S20733C10");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C10");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C10");
    check_base_class_offset(lv, (S2121C38*)(S20733C9*), 0, "S20733C10");
    /*is_ambiguous_... S20733C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C13*), 0, "S20733C10");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C5*), 0, "S20733C10");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(40,20), "S20733C10");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C10");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C10");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20733C5*), 0, "S20733C10");
    check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(40,20), "S20733C10");
    /*is_ambiguous_... S20733C4::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(48,24), "S20733C10");
    check_base_class_offset(lv, (S20733C4*)(S20733C2*), ABISELECT(40,20), "S20733C10");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C8*)(S20733C2*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C8*)(S20733C13*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C8*)(S20733C15*)(S20733C14*), ABISELECT(88,44), "S20733C10");
    check_base_class_offset(lv, (S20733C6*)(S20733C9*), ABISELECT(56,28), "S20733C10");
    check_base_class_offset(lv, (S2121C28*)(S20733C9*), ABISELECT(56,28), "S20733C10");
    check_base_class_offset(lv, (S20733C9*)(S20733C2*), ABISELECT(56,28), "S20733C10");
    /*is_ambiguous_... S20733C2::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C2*), ABISELECT(24,12), "S20733C10");
    check_base_class_offset(lv, (S20733C2*)(S20733C12*), ABISELECT(24,12), "S20733C10");
    /*is_ambiguous_... S20733C13::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C13*), ABISELECT(64,32), "S20733C10");
    check_base_class_offset(lv, (S20733C13*)(S20733C12*), ABISELECT(64,32), "S20733C10");
    check_base_class_offset(lv, (S20733C12*), ABISELECT(24,12), "S20733C10");
    check_base_class_offset(lv, (S20733C15*)(S20733C14*), ABISELECT(88,44), "S20733C10");
    /*is_ambiguous_... S20733C14::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C14*), ABISELECT(104,56), "S20733C10");
    check_base_class_offset(lv, (S20733C14*), ABISELECT(88,44), "S20733C10");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C5*), ABISELECT(16,8), "S20733C10");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S20733C5*), ABISELECT(16,8), "S20733C10");
    test_class_info(&lv, &cd_S20733C10);
    dp->~S20733C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C10(Test_S20733C10, "S20733C10", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN9S20733C10C1Ev();
extern void _ZN9S20733C10D1Ev();
Name_Map name_map_S20733C10[] = {
  NSPAIR(_ZN9S20733C10C1Ev),
  NSPAIR(_ZN9S20733C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C9;
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C2;
extern VTBL_ENTRY _ZTI8S20733C2[];
extern  VTBL_ENTRY _ZTV8S20733C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C2[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C13;
extern VTBL_ENTRY _ZTI9S20733C13[];
extern  VTBL_ENTRY _ZTV9S20733C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C13[];
extern Class_Descriptor cd_S20733C12;
extern VTBL_ENTRY _ZTI9S20733C12[];
extern  VTBL_ENTRY _ZTV9S20733C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C12[];
extern Class_Descriptor cd_S20733C15;
extern VTBL_ENTRY _ZTI9S20733C15[];
extern  VTBL_ENTRY _ZTV9S20733C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C15[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C14;
extern VTBL_ENTRY _ZTI9S20733C14[];
extern  VTBL_ENTRY _ZTV9S20733C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C14[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
static Base_Class bases_S20733C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20733C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(48,24), //bcp->offset
    36, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(40,20), //bcp->offset
    30, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20733C9,    ABISELECT(56,28), //bcp->offset
    39, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20733C2,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20733C13,    ABISELECT(64,32), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20733C12,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C15,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(104,56), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20733C14,    ABISELECT(88,44), //bcp->offset
    51, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20733C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20733C10[];
extern void _ZN9S20733C10D1Ev();
extern void _ZN9S20733C10D0Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C10[] = {
  ABISELECT(104,56),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(88,44),
  0,
  ABISELECT(40,20),
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN9S20733C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20733C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20733C10[];
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C5__A2__9S20733C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C12__9S20733C10[] = {
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C12__9S20733C10[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__9S20733C12__9S20733C10[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C12__9S20733C10[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C12__9S20733C10[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C12__9S20733C10[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C2__9S20733C10[] = {
  ABISELECT(32,16),
  ABISELECT(64,32),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C2__9S20733C10[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__8S20733C2__9S20733C10[] = {
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C2__9S20733C10[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C2__9S20733C10[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__9S20733C10[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C10[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__A1__9S20733C10[] = {
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C10[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C10[] = {
  ABISELECT(-64,-32),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C13__9S20733C10[] = {
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C14__9S20733C10[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C159S20733C14__9S20733C10[] = {
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C15[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C6__A1__9S20733C14__9S20733C10[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C10[] = {
  {&(_ZTV9S20733C10[12]),  12,65},
  {&(_tg__ZTV8S20733C5__A2__9S20733C10[4]),  4,5},
  {&(_ZTV9S20733C10[29]),  29,65},
  {&(_ZTV9S20733C10[29]),  29,65},
  {&(_ZTV9S20733C10[35]),  35,65},
  {&(_ZTV9S20733C10[38]),  38,65},
  {&(_ZTV9S20733C10[59]),  59,65},
  {&(_ZTV9S20733C10[43]),  43,65},
  {&(_ZTV9S20733C10[50]),  50,65},
  {&(_ZTV9S20733C10[59]),  59,65},
  {&(_ZTV9S20733C10[64]),  64,65},
  {&(_ZTV9S20733C10[18]),  18,65},
  {&(_tg__ZTV9S20733C12__9S20733C10[10]),  10,11},
  {&(_tg__ZTV9S20733C12__9S20733C10[10]),  10,11},
  {&(_tg__ZTV8S20733C4__9S20733C12__9S20733C10[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__9S20733C12__9S20733C10[2]),  2,3},
  {&(_tg__ZTV8S20733C8__9S20733C12__9S20733C10[6]),  6,8},
  {&(_tg__ZTV8S20733C9__9S20733C12__9S20733C10[4]),  4,5},
  {&(_tg__ZTV9S20733C13__9S20733C12__9S20733C10[6]),  6,7},
  {&(_tg__ZTV8S20733C2__9S20733C10[7]),  7,8},
  {&(_tg__ZTV8S20733C4__8S20733C2__9S20733C10[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__8S20733C2__9S20733C10[2]),  2,3},
  {&(_tg__ZTV8S20733C8__8S20733C2__9S20733C10[6]),  6,8},
  {&(_tg__ZTV8S20733C9__8S20733C2__9S20733C10[4]),  4,5},
  {&(_tg__ZTV8S20733C4__9S20733C10[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__9S20733C10[4]),  4,5},
  {&(_tg__ZTV8S20733C8__9S20733C10[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__A1__9S20733C10[4]),  4,5},
  {&(_tg__ZTV8S20733C9__9S20733C10[3]),  3,4},
  {&(_tg__ZTV9S20733C13__9S20733C10[5]),  5,6},
  {&(_tg__ZTV8S20733C8__9S20733C13__9S20733C10[6]),  6,8},
  {&(_tg__ZTV9S20733C14__9S20733C10[8]),  8,10},
  {&(_tg__ZTV9S20733C159S20733C14__9S20733C10[7]),  7,9},
  {&(_tg__ZTV9S20733C159S20733C14__9S20733C10[7]),  7,9},
  {&(_tg__ZTV9S20733C14__9S20733C10[8]),  8,10},
  {&(_tg__ZTV8S20733C6__A1__9S20733C14__9S20733C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20733C10[];
extern  VTBL_ENTRY _ZTV9S20733C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C10[];
Class_Descriptor cd_S20733C10 = {  "S20733C10", // class name
  bases_S20733C10, 24,
  &(vtc_S20733C10[0]), // expected_vtbl_contents
  &(vtt_S20733C10[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI9S20733C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20733C10),65, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20733C10),36, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20733C1  : virtual S20733C2 , S20733C10 , S20733C4 {
  ::S15319C7 s20733c1f0;
  virtual  ~S20733C1(); // _ZN8S20733C1D2Ev
  S20733C1(); // tgen
};
//SIG(1 S20733C1) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} BC10{ BC11{ vd m Fi} VBC12{ VBC2 VBC13{ VBC3 VBC8 BC6 Fi Fp} Fi:32} VBC14{ BC15{ VBC8 Fi} VBC6 FL:1} BC5} BC4 vd FC16{}}


 S20733C1 ::~S20733C1(){ note_dtor("S20733C1", this);}
S20733C1 ::S20733C1(){ note_ctor("S20733C1", this);} // tgen

static void Test_S20733C1()
{
  extern Class_Descriptor cd_S20733C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,19)];
    init_test(&cd_S20733C1, buf);
    S20733C1 *dp, &lv = *(dp=new (buf) S20733C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,72), "sizeof(S20733C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20733C1)");
    /*is_ambiguous_... S20733C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C2*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C1");
    check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C8*), 0, "S20733C1");
    check_base_class_offset(lv, (S2121C38*)(S20733C9*), 0, "S20733C1");
    /*is_ambiguous_... S20733C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C13*), 0, "S20733C1");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C10*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C5*)(S20733C4*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(48,24), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C1");
    check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C8*), 0, "S20733C1");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C10*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20733C5*)(S20733C4*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(48,24), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(56,28), "S20733C1");
    check_base_class_offset(lv, (S20733C4*)(S20733C2*), ABISELECT(48,24), "S20733C1");
    /*is_ambiguous_... S20733C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20733C8*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C8*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C5*)(S20733C8*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C8*)(S20733C2*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C8*)(S20733C13*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C8*)(S20733C15*)(S20733C14*), ABISELECT(112,56), "S20733C1");
    check_base_class_offset(lv, (S20733C6*)(S20733C9*), ABISELECT(64,32), "S20733C1");
    check_base_class_offset(lv, (S2121C28*)(S20733C9*), ABISELECT(64,32), "S20733C1");
    check_base_class_offset(lv, (S20733C9*)(S20733C2*), ABISELECT(64,32), "S20733C1");
    /*is_ambiguous_... S20733C2::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C2*), ABISELECT(72,36), "S20733C1");
    check_base_class_offset(lv, (S20733C2*), ABISELECT(72,36), "S20733C1");
    check_base_class_offset(lv, (S20733C2*)(S20733C12*), ABISELECT(72,36), "S20733C1");
    check_base_class_offset(lv, (S6282C14_nt*)(S20733C10*), 0, "S20733C1");
    /*is_ambiguous_... S20733C13::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C13*), ABISELECT(88,44), "S20733C1");
    check_base_class_offset(lv, (S20733C13*)(S20733C12*), ABISELECT(88,44), "S20733C1");
    check_base_class_offset(lv, (S20733C12*)(S20733C10*), ABISELECT(72,36), "S20733C1");
    check_base_class_offset(lv, (S20733C15*)(S20733C14*), ABISELECT(112,56), "S20733C1");
    /*is_ambiguous_... S20733C14::S20733C6 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C14*), ABISELECT(128,68), "S20733C1");
    check_base_class_offset(lv, (S20733C14*)(S20733C10*), ABISELECT(112,56), "S20733C1");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C10*), ABISELECT(16,8), "S20733C1");
    /*is_ambiguous_... S20733C10::S20733C5 */ AMB_check_base_class_offset(lv, (S20733C5*)(S20733C10*), ABISELECT(16,8), "S20733C1");
    check_base_class_offset(lv, (S20733C10*), 0, "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C5*)(S20733C4*), ABISELECT(24,12), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C5*)(S20733C4*), ABISELECT(24,12), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C6*)(S20733C4*), ABISELECT(32,16), "S20733C1");
    /*is_ambiguous_... S20733C1::S20733C4 */ AMB_check_base_class_offset(lv, (S20733C4*), ABISELECT(24,12), "S20733C1");
    check_field_offset(lv, s20733c1f0, ABISELECT(40,20), "S20733C1.s20733c1f0");
    test_class_info(&lv, &cd_S20733C1);
    dp->~S20733C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20733C1(Test_S20733C1, "S20733C1", ABISELECT(136,72));

#else // __cplusplus

extern void _ZN8S20733C1C1Ev();
extern void _ZN8S20733C1D2Ev();
Name_Map name_map_S20733C1[] = {
  NSPAIR(_ZN8S20733C1C1Ev),
  NSPAIR(_ZN8S20733C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C8;
extern VTBL_ENTRY _ZTI8S20733C8[];
extern  VTBL_ENTRY _ZTV8S20733C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C8[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20733C9;
extern VTBL_ENTRY _ZTI8S20733C9[];
extern  VTBL_ENTRY _ZTV8S20733C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C9[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C2;
extern VTBL_ENTRY _ZTI8S20733C2[];
extern  VTBL_ENTRY _ZTV8S20733C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C2[];
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C13;
extern VTBL_ENTRY _ZTI9S20733C13[];
extern  VTBL_ENTRY _ZTV9S20733C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C13[];
extern Class_Descriptor cd_S20733C12;
extern VTBL_ENTRY _ZTI9S20733C12[];
extern  VTBL_ENTRY _ZTV9S20733C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C12[];
extern Class_Descriptor cd_S20733C15;
extern VTBL_ENTRY _ZTI9S20733C15[];
extern  VTBL_ENTRY _ZTV9S20733C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C15[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C14;
extern VTBL_ENTRY _ZTI9S20733C14[];
extern  VTBL_ENTRY _ZTV9S20733C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C14[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C10;
extern VTBL_ENTRY _ZTI9S20733C10[];
extern  VTBL_ENTRY _ZTV9S20733C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20733C10[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C5;
extern VTBL_ENTRY _ZTI8S20733C5[];
extern  VTBL_ENTRY _ZTV8S20733C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C5[];
extern Class_Descriptor cd_S20733C6;
extern VTBL_ENTRY _ZTI8S20733C6[];
extern  VTBL_ENTRY _ZTV8S20733C6[];
extern Class_Descriptor cd_S20733C4;
extern VTBL_ENTRY _ZTI8S20733C4[];
extern  VTBL_ENTRY _ZTV8S20733C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C4[];
static Base_Class bases_S20733C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20733C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(56,28), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(48,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20733C8,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20733C9,    ABISELECT(64,32), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20733C2,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20733C13,    ABISELECT(88,44), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20733C12,    ABISELECT(72,36), //bcp->offset
    41, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20733C15,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(128,68), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20733C14,    ABISELECT(112,56), //bcp->offset
    59, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20733C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20733C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20733C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20733C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20733C6,    ABISELECT(32,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20733C4,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20733C1[];
extern void _ZN8S20733C1D1Ev();
extern void _ZN8S20733C1D0Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY vtc_S20733C1[] = {
  ABISELECT(128,68),
  ABISELECT(112,56),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(112,56),
  0,
  ABISELECT(48,24),
  0,
  ABISELECT(72,36),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20733C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(16,8),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  0,
  ABISELECT(-88,-44),
  ABISELECT(24,12),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
  0,
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S20733C1[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20733C1[];
extern void _ZN9S20733C10D1Ev();
extern void _ZN9S20733C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C10__8S20733C1[] = {
  ABISELECT(128,68),
  ABISELECT(112,56),
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(112,56),
  0,
  ABISELECT(48,24),
  0,
  ABISELECT(72,36),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN9S20733C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20733C10D0Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C59S20733C10__A2__8S20733C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C12__9S20733C10__8S20733C1[] = {
  ABISELECT(16,8),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C10__8S20733C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__9S20733C10__8S20733C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C14__9S20733C10__8S20733C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C10__8S20733C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C10__8S20733C1[] = {
  0,
  ABISELECT(-88,-44),
  ABISELECT(24,12),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C6__A6__9S20733C10__8S20733C1[] = {
  0,
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C5__A2__9S20733C10__8S20733C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C10[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__A__8S20733C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__A3__8S20733C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C2__8S20733C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C2__8S20733C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__8S20733C2__8S20733C1[] = {
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C2__8S20733C1[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C2__8S20733C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20733C2[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__8S20733C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C4[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C4__8S20733C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__8S20733C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C8[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C58S20733C8__A1__8S20733C1[] = {
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C5[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__8S20733C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20733C9[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C12__8S20733C1[] = {
  ABISELECT(16,8),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C4__9S20733C12__8S20733C1[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C68S20733C4__A1__9S20733C12__8S20733C1[] = {
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C12__8S20733C1[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C9__9S20733C12__8S20733C1[] = {
  0,
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__9S20733C12__8S20733C1[] = {
  0,
  ABISELECT(-88,-44),
  ABISELECT(24,12),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20733C12[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C13__8S20733C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(24,12),
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C8__9S20733C13__8S20733C1[] = {
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C13[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C14__8S20733C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
extern void _ZN8S20733C82v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20733C159S20733C14__8S20733C1[] = {
  0,
  0,
  0,
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20733C15[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20733C82v2Ev,
};
extern void _ZN8S20733C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20733C6__A1__9S20733C14__8S20733C1[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S20733C14[0]),
  (VTBL_ENTRY)&_ZN8S20733C62v1Ev,
};
static  VTT_ENTRY vtt_S20733C1[] = {
  {&(_ZTV8S20733C1[12]),  12,73},
  {&(_tg__ZTV9S20733C10__8S20733C1[12]),  12,14},
  {&(_tg__ZTV8S20733C59S20733C10__A2__8S20733C1[4]),  4,5},
  {&(_tg__ZTV9S20733C12__9S20733C10__8S20733C1[10]),  10,11},
  {&(_tg__ZTV9S20733C12__9S20733C10__8S20733C1[10]),  10,11},
  {&(_tg__ZTV8S20733C4__9S20733C10__8S20733C1[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__9S20733C10__8S20733C1[2]),  2,3},
  {&(_tg__ZTV9S20733C14__9S20733C10__8S20733C1[8]),  8,10},
  {&(_tg__ZTV8S20733C9__9S20733C10__8S20733C1[4]),  4,5},
  {&(_tg__ZTV9S20733C13__9S20733C10__8S20733C1[6]),  6,7},
  {&(_tg__ZTV9S20733C14__9S20733C10__8S20733C1[8]),  8,10},
  {&(_tg__ZTV8S20733C6__A6__9S20733C10__8S20733C1[3]),  3,4},
  {&(_tg__ZTV8S20733C5__A2__9S20733C10__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C4__A__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__A3__8S20733C1[4]),  4,5},
  {&(_ZTV8S20733C1[51]),  51,73},
  {&(_ZTV8S20733C1[32]),  32,73},
  {&(_ZTV8S20733C1[35]),  35,73},
  {&(_ZTV8S20733C1[67]),  67,73},
  {&(_ZTV8S20733C1[40]),  40,73},
  {&(_ZTV8S20733C1[51]),  51,73},
  {&(_ZTV8S20733C1[58]),  58,73},
  {&(_ZTV8S20733C1[67]),  67,73},
  {&(_ZTV8S20733C1[72]),  72,73},
  {&(_ZTV8S20733C1[18]),  18,73},
  {&(_ZTV8S20733C1[23]),  23,73},
  {&(_tg__ZTV8S20733C2__8S20733C1[7]),  7,8},
  {&(_tg__ZTV8S20733C4__8S20733C2__8S20733C1[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__8S20733C2__8S20733C1[2]),  2,3},
  {&(_tg__ZTV8S20733C8__8S20733C2__8S20733C1[6]),  6,8},
  {&(_tg__ZTV8S20733C9__8S20733C2__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C4__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C58S20733C4__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C8__8S20733C1[4]),  4,6},
  {&(_tg__ZTV8S20733C58S20733C8__A1__8S20733C1[4]),  4,5},
  {&(_tg__ZTV8S20733C9__8S20733C1[3]),  3,4},
  {&(_tg__ZTV9S20733C12__8S20733C1[10]),  10,11},
  {&(_tg__ZTV9S20733C12__8S20733C1[10]),  10,11},
  {&(_tg__ZTV8S20733C4__9S20733C12__8S20733C1[5]),  5,6},
  {&(_tg__ZTV8S20733C68S20733C4__A1__9S20733C12__8S20733C1[2]),  2,3},
  {&(_tg__ZTV8S20733C8__9S20733C12__8S20733C1[6]),  6,8},
  {&(_tg__ZTV8S20733C9__9S20733C12__8S20733C1[4]),  4,5},
  {&(_tg__ZTV9S20733C13__9S20733C12__8S20733C1[6]),  6,7},
  {&(_tg__ZTV9S20733C13__8S20733C1[5]),  5,6},
  {&(_tg__ZTV8S20733C8__9S20733C13__8S20733C1[6]),  6,8},
  {&(_tg__ZTV9S20733C14__8S20733C1[8]),  8,10},
  {&(_tg__ZTV9S20733C159S20733C14__8S20733C1[7]),  7,9},
  {&(_tg__ZTV9S20733C159S20733C14__8S20733C1[7]),  7,9},
  {&(_tg__ZTV9S20733C14__8S20733C1[8]),  8,10},
  {&(_tg__ZTV8S20733C6__A1__9S20733C14__8S20733C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20733C1[];
extern  VTBL_ENTRY _ZTV8S20733C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20733C1[];
Class_Descriptor cd_S20733C1 = {  "S20733C1", // class name
  bases_S20733C1, 29,
  &(vtc_S20733C1[0]), // expected_vtbl_contents
  &(vtt_S20733C1[0]), // expected_vtt_contents
  ABISELECT(136,72), // object size
  NSPAIRA(_ZTI8S20733C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20733C1),73, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20733C1),50, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16617C10  {
  void *s16617c10f0;
  int s16617c10f1;
  char s16617c10f2;
  int s16617c10f3;
  int s16617c10f4[21];
  int s16617c10f5;
  virtual  ~S16617C10(); // _ZN9S16617C10D1Ev
  virtual void  v4(); // _ZN9S16617C102v4Ev
  virtual void  v5(); // _ZN9S16617C102v5Ev
  virtual void  v6(); // _ZN9S16617C102v6Ev
  virtual void  v7(); // _ZN9S16617C102v7Ev
  S16617C10(); // tgen
};
//SIG(-1 S16617C10) C1{ vd v1 v2 v3 v4 Fp Fi Fc Fi[23]}


 S16617C10 ::~S16617C10(){ note_dtor("S16617C10", this);}
void  S16617C10 ::v4(){vfunc_called(this, "_ZN9S16617C102v4Ev");}
void  S16617C10 ::v5(){vfunc_called(this, "_ZN9S16617C102v5Ev");}
void  S16617C10 ::v6(){vfunc_called(this, "_ZN9S16617C102v6Ev");}
void  S16617C10 ::v7(){vfunc_called(this, "_ZN9S16617C102v7Ev");}
S16617C10 ::S16617C10(){ note_ctor("S16617C10", this);} // tgen

static void Test_S16617C10()
{
  extern Class_Descriptor cd_S16617C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,28)];
    init_test(&cd_S16617C10, buf);
    S16617C10 *dp, &lv = *(dp=new (buf) S16617C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,108), "sizeof(S16617C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16617C10)");
    check_field_offset(lv, s16617c10f0, ABISELECT(8,4), "S16617C10.s16617c10f0");
    check_field_offset(lv, s16617c10f1, ABISELECT(16,8), "S16617C10.s16617c10f1");
    check_field_offset(lv, s16617c10f2, ABISELECT(20,12), "S16617C10.s16617c10f2");
    check_field_offset(lv, s16617c10f3, ABISELECT(24,16), "S16617C10.s16617c10f3");
    check_field_offset(lv, s16617c10f4, ABISELECT(28,20), "S16617C10.s16617c10f4");
    check_field_offset(lv, s16617c10f5, ABISELECT(112,104), "S16617C10.s16617c10f5");
    test_class_info(&lv, &cd_S16617C10);
    dp->~S16617C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16617C10(Test_S16617C10, "S16617C10", ABISELECT(120,108));

#else // __cplusplus

extern void _ZN9S16617C10C1Ev();
extern void _ZN9S16617C10D1Ev();
Name_Map name_map_S16617C10[] = {
  NSPAIR(_ZN9S16617C10C1Ev),
  NSPAIR(_ZN9S16617C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S16617C10[];
extern void _ZN9S16617C10D1Ev();
extern void _ZN9S16617C10D0Ev();
extern void _ZN9S16617C102v4Ev();
extern void _ZN9S16617C102v5Ev();
extern void _ZN9S16617C102v6Ev();
extern void _ZN9S16617C102v7Ev();
static  VTBL_ENTRY vtc_S16617C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S16617C10[0]),
  (VTBL_ENTRY)&_ZN9S16617C10D1Ev,
  (VTBL_ENTRY)&_ZN9S16617C10D0Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v4Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v5Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v6Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S16617C10[];
extern  VTBL_ENTRY _ZTV9S16617C10[];
Class_Descriptor cd_S16617C10 = {  "S16617C10", // class name
  0,0,//no base classes
  &(vtc_S16617C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,108), // object size
  NSPAIRA(_ZTI9S16617C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S16617C10),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16617C9  : S16617C10 {
  int s16617c9f0;
  int s16617c9f1;
  int s16617c9f2;
  int s16617c9f3;
  void *s16617c9f4;
  void *s16617c9f5;
  ::S15319C2_nt s16617c9f6;
  char s16617c9f7;
  int s16617c9f8;
  int s16617c9f9;
  int s16617c9f10;
  char s16617c9f11;
  char s16617c9f12;
  int s16617c9f13;
  int s16617c9f14;
  virtual  ~S16617C9(); // _ZN8S16617C9D1Ev
  virtual void  v1(); // _ZN8S16617C92v1Ev
  virtual void  v2(); // _ZN8S16617C92v2Ev
  virtual void  v3(); // _ZN8S16617C92v3Ev
  S16617C9(); // tgen
};
//SIG(-1 S16617C9) C1{ BC2{ vd v4 v5 v6 v7 Fp Fi Fc Fi[23]} vd v1 v2 v3 Fi[4] Fp[2] FC3{ BC4{ BC5{ BC6{}} FC7{ BC8{}}} FU9{ Fc[16] Fp} Fi Fi} Fc Fi Fi Fi Fc Fc Fi Fi}


 S16617C9 ::~S16617C9(){ note_dtor("S16617C9", this);}
void  S16617C9 ::v1(){vfunc_called(this, "_ZN8S16617C92v1Ev");}
void  S16617C9 ::v2(){vfunc_called(this, "_ZN8S16617C92v2Ev");}
void  S16617C9 ::v3(){vfunc_called(this, "_ZN8S16617C92v3Ev");}
S16617C9 ::S16617C9(){ note_ctor("S16617C9", this);} // tgen

static void Test_S16617C9()
{
  extern Class_Descriptor cd_S16617C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,48)];
    init_test(&cd_S16617C9, buf);
    S16617C9 *dp, &lv = *(dp=new (buf) S16617C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,188), "sizeof(S16617C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16617C9)");
    check_base_class_offset(lv, (S16617C10*), 0, "S16617C9");
    check_field_offset(lv, s16617c9f0, ABISELECT(116,108), "S16617C9.s16617c9f0");
    check_field_offset(lv, s16617c9f1, ABISELECT(120,112), "S16617C9.s16617c9f1");
    check_field_offset(lv, s16617c9f2, ABISELECT(124,116), "S16617C9.s16617c9f2");
    check_field_offset(lv, s16617c9f3, ABISELECT(128,120), "S16617C9.s16617c9f3");
    check_field_offset(lv, s16617c9f4, ABISELECT(136,124), "S16617C9.s16617c9f4");
    check_field_offset(lv, s16617c9f5, ABISELECT(144,128), "S16617C9.s16617c9f5");
    check_field_offset(lv, s16617c9f6, ABISELECT(152,132), "S16617C9.s16617c9f6");
    check_field_offset(lv, s16617c9f7, ABISELECT(184,160), "S16617C9.s16617c9f7");
    check_field_offset(lv, s16617c9f8, ABISELECT(188,164), "S16617C9.s16617c9f8");
    check_field_offset(lv, s16617c9f9, ABISELECT(192,168), "S16617C9.s16617c9f9");
    check_field_offset(lv, s16617c9f10, ABISELECT(196,172), "S16617C9.s16617c9f10");
    check_field_offset(lv, s16617c9f11, ABISELECT(200,176), "S16617C9.s16617c9f11");
    check_field_offset(lv, s16617c9f12, ABISELECT(201,177), "S16617C9.s16617c9f12");
    check_field_offset(lv, s16617c9f13, ABISELECT(204,180), "S16617C9.s16617c9f13");
    check_field_offset(lv, s16617c9f14, ABISELECT(208,184), "S16617C9.s16617c9f14");
    test_class_info(&lv, &cd_S16617C9);
    dp->~S16617C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16617C9(Test_S16617C9, "S16617C9", ABISELECT(216,188));

#else // __cplusplus

extern void _ZN8S16617C9C1Ev();
extern void _ZN8S16617C9D1Ev();
Name_Map name_map_S16617C9[] = {
  NSPAIR(_ZN8S16617C9C1Ev),
  NSPAIR(_ZN8S16617C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S16617C10;
extern VTBL_ENTRY _ZTI9S16617C10[];
extern  VTBL_ENTRY _ZTV9S16617C10[];
static Base_Class bases_S16617C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16617C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S16617C9[];
extern void _ZN8S16617C9D1Ev();
extern void _ZN8S16617C9D0Ev();
extern void _ZN9S16617C102v4Ev();
extern void _ZN9S16617C102v5Ev();
extern void _ZN9S16617C102v6Ev();
extern void _ZN9S16617C102v7Ev();
extern void _ZN8S16617C92v1Ev();
extern void _ZN8S16617C92v2Ev();
extern void _ZN8S16617C92v3Ev();
static  VTBL_ENTRY vtc_S16617C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S16617C9[0]),
  (VTBL_ENTRY)&_ZN8S16617C9D1Ev,
  (VTBL_ENTRY)&_ZN8S16617C9D0Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v4Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v5Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v6Ev,
  (VTBL_ENTRY)&_ZN9S16617C102v7Ev,
  (VTBL_ENTRY)&_ZN8S16617C92v1Ev,
  (VTBL_ENTRY)&_ZN8S16617C92v2Ev,
  (VTBL_ENTRY)&_ZN8S16617C92v3Ev,
};
extern VTBL_ENTRY _ZTI8S16617C9[];
extern  VTBL_ENTRY _ZTV8S16617C9[];
Class_Descriptor cd_S16617C9 = {  "S16617C9", // class name
  bases_S16617C9, 1,
  &(vtc_S16617C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,188), // object size
  NSPAIRA(_ZTI8S16617C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S16617C9),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16617C1  {
  int s16617c1f0;
  ::S15319C2_nt s16617c1f1;
  int s16617c1f2;
  int s16617c1f3[16];
  int s16617c1f4;
  void *s16617c1f5;
  ::S15319C2_nt s16617c1f6;
  ::S16617C9 s16617c1f7;
  int s16617c1f8;
  void *s16617c1f9;
  void  mf16617c1(); // _ZN8S16617C19mf16617c1Ev
};
//SIG(1 S16617C1) C1{ m Fi FC2{ BC3{ BC4{ BC5{}} FC6{ BC7{}}} FU8{ Fc[16] Fp} Fi Fi} Fi Fi[16] Fi Fp FC2 FC9{ BC10{ vd v4 v5 v6 v7 Fp Fi Fc Fi Fi[21] Fi} vd v1 v2 v3 Fi Fi Fi Fi Fp Fp FC2 Fc Fi Fi Fi Fc Fc Fi Fi} Fi Fp}


void  S16617C1 ::mf16617c1(){}

static void Test_S16617C1()
{
  {
    init_simple_test("S16617C1");
    S16617C1 lv;
    check2(sizeof(lv), ABISELECT(384,332), "sizeof(S16617C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16617C1)");
    check_field_offset(lv, s16617c1f0, 0, "S16617C1.s16617c1f0");
    check_field_offset(lv, s16617c1f1, ABISELECT(8,4), "S16617C1.s16617c1f1");
    check_field_offset(lv, s16617c1f2, ABISELECT(40,32), "S16617C1.s16617c1f2");
    check_field_offset(lv, s16617c1f3, ABISELECT(44,36), "S16617C1.s16617c1f3");
    check_field_offset(lv, s16617c1f4, ABISELECT(108,100), "S16617C1.s16617c1f4");
    check_field_offset(lv, s16617c1f5, ABISELECT(112,104), "S16617C1.s16617c1f5");
    check_field_offset(lv, s16617c1f6, ABISELECT(120,108), "S16617C1.s16617c1f6");
    check_field_offset(lv, s16617c1f7, ABISELECT(152,136), "S16617C1.s16617c1f7");
    check_field_offset(lv, s16617c1f8, ABISELECT(368,324), "S16617C1.s16617c1f8");
    check_field_offset(lv, s16617c1f9, ABISELECT(376,328), "S16617C1.s16617c1f9");
  }
}
static Arrange_To_Call_Me vS16617C1(Test_S16617C1, "S16617C1", ABISELECT(384,332));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C6  {
  virtual void  v1(); // _ZN8S20728C62v1Ev
  ~S20728C6(); // tgen
  S20728C6(); // tgen
};
//SIG(-1 S20728C6) C1{ v1}


void  S20728C6 ::v1(){vfunc_called(this, "_ZN8S20728C62v1Ev");}
S20728C6 ::~S20728C6(){ note_dtor("S20728C6", this);} // tgen
S20728C6 ::S20728C6(){ note_ctor("S20728C6", this);} // tgen

static void Test_S20728C6()
{
  extern Class_Descriptor cd_S20728C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20728C6, buf);
    S20728C6 *dp, &lv = *(dp=new (buf) S20728C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20728C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C6)");
    test_class_info(&lv, &cd_S20728C6);
    dp->~S20728C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C6(Test_S20728C6, "S20728C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20728C6C1Ev();
extern void _ZN8S20728C6D1Ev();
Name_Map name_map_S20728C6[] = {
  NSPAIR(_ZN8S20728C6C1Ev),
  NSPAIR(_ZN8S20728C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20728C6[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C6[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
Class_Descriptor cd_S20728C6 = {  "S20728C6", // class name
  0,0,//no base classes
  &(vtc_S20728C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20728C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20728C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C5  : virtual S2121C38 , S20728C6 , virtual S2121C28 {
  ~S20728C5(); // tgen
  S20728C5(); // tgen
};
//SIG(-1 S20728C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20728C5 ::~S20728C5(){ note_dtor("S20728C5", this);} // tgen
S20728C5 ::S20728C5(){ note_ctor("S20728C5", this);} // tgen

static void Test_S20728C5()
{
  extern Class_Descriptor cd_S20728C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20728C5, buf);
    S20728C5 *dp, &lv = *(dp=new (buf) S20728C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20728C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20728C5");
    check_base_class_offset(lv, (S20728C6*), 0, "S20728C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S20728C5");
    test_class_info(&lv, &cd_S20728C5);
    dp->~S20728C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C5(Test_S20728C5, "S20728C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20728C5C1Ev();
extern void _ZN8S20728C5D1Ev();
Name_Map name_map_S20728C5[] = {
  NSPAIR(_ZN8S20728C5C1Ev),
  NSPAIR(_ZN8S20728C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20728C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20728C5[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20728C5[];
static  VTT_ENTRY vtt_S20728C5[] = {
  {&(_ZTV8S20728C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
Class_Descriptor cd_S20728C5 = {  "S20728C5", // class name
  bases_S20728C5, 3,
  &(vtc_S20728C5[0]), // expected_vtbl_contents
  &(vtt_S20728C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20728C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20728C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C5),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C4  : S2121C38 , S20728C5 {
  virtual void  v2(); // _ZN8S20728C42v2Ev
  ~S20728C4(); // tgen
  S20728C4(); // tgen
};
//SIG(-1 S20728C4) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S20728C4 ::v2(){vfunc_called(this, "_ZN8S20728C42v2Ev");}
S20728C4 ::~S20728C4(){ note_dtor("S20728C4", this);} // tgen
S20728C4 ::S20728C4(){ note_ctor("S20728C4", this);} // tgen

static void Test_S20728C4()
{
  extern Class_Descriptor cd_S20728C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20728C4, buf);
    S20728C4 *dp, &lv = *(dp=new (buf) S20728C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20728C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C4)");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20728C4");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*), ABISELECT(8,4), "S20728C4");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*), 0, "S20728C4");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*), 0, "S20728C4");
    check_base_class_offset(lv, (S20728C5*), 0, "S20728C4");
    test_class_info(&lv, &cd_S20728C4);
    dp->~S20728C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C4(Test_S20728C4, "S20728C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20728C4C1Ev();
extern void _ZN8S20728C4D1Ev();
Name_Map name_map_S20728C4[] = {
  NSPAIR(_ZN8S20728C4C1Ev),
  NSPAIR(_ZN8S20728C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
static Base_Class bases_S20728C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20728C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20728C4[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY vtc_S20728C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S20728C4[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__8S20728C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C4[] = {
  {&(_ZTV8S20728C4[4]),  4,6},
  {&(_tg__ZTV8S20728C5__8S20728C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
Class_Descriptor cd_S20728C4 = {  "S20728C4", // class name
  bases_S20728C4, 5,
  &(vtc_S20728C4[0]), // expected_vtbl_contents
  &(vtt_S20728C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20728C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20728C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C4),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C2  : virtual S2121C38 , virtual S20728C4 , S20728C6 {
  int s20728c2f0;
  void *s20728c2f1;
  ~S20728C2(); // tgen
  S20728C2(); // tgen
};
//SIG(-1 S20728C2) C1{ VBC2{ m} VBC3{ BC2 BC4{ VBC2 BC5{ v1} VBC6{ m}} v2} BC5 Fi Fp}


S20728C2 ::~S20728C2(){ note_dtor("S20728C2", this);} // tgen
S20728C2 ::S20728C2(){ note_ctor("S20728C2", this);} // tgen

static void Test_S20728C2()
{
  extern Class_Descriptor cd_S20728C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20728C2, buf);
    S20728C2 *dp, &lv = *(dp=new (buf) S20728C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20728C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C2)");
    /*is_ambiguous_... S20728C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20728C2");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), 0, "S20728C2");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), ABISELECT(24,12), "S20728C2");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), ABISELECT(24,12), "S20728C2");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C2");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), ABISELECT(24,12), "S20728C2");
    check_base_class_offset(lv, (S20728C4*), ABISELECT(24,12), "S20728C2");
    /*is_ambiguous_... S20728C2::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*), 0, "S20728C2");
    check_field_offset(lv, s20728c2f0, ABISELECT(8,4), "S20728C2.s20728c2f0");
    check_field_offset(lv, s20728c2f1, ABISELECT(16,8), "S20728C2.s20728c2f1");
    test_class_info(&lv, &cd_S20728C2);
    dp->~S20728C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C2(Test_S20728C2, "S20728C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20728C2C1Ev();
extern void _ZN8S20728C2D1Ev();
Name_Map name_map_S20728C2[] = {
  NSPAIR(_ZN8S20728C2C1Ev),
  NSPAIR(_ZN8S20728C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
static Base_Class bases_S20728C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20728C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C4,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20728C2[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY vtc_S20728C2[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C2[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20728C2[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S20728C2[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__8S20728C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__8S20728C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C2[] = {
  {&(_ZTV8S20728C2[5]),  5,14},
  {&(_ZTV8S20728C2[12]),  12,14},
  {&(_tg__ZTV8S20728C4__8S20728C2[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__8S20728C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20728C2[];
extern  VTBL_ENTRY _ZTV8S20728C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C2[];
Class_Descriptor cd_S20728C2 = {  "S20728C2", // class name
  bases_S20728C2, 7,
  &(vtc_S20728C2[0]), // expected_vtbl_contents
  &(vtt_S20728C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20728C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20728C2),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C2),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C8  : S20728C6 , S2121C28 , virtual S2121C38 {
  ~S20728C8(); // tgen
  S20728C8(); // tgen
};
//SIG(-1 S20728C8) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S20728C8 ::~S20728C8(){ note_dtor("S20728C8", this);} // tgen
S20728C8 ::S20728C8(){ note_ctor("S20728C8", this);} // tgen

static void Test_S20728C8()
{
  extern Class_Descriptor cd_S20728C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20728C8, buf);
    S20728C8 *dp, &lv = *(dp=new (buf) S20728C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20728C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C8)");
    check_base_class_offset(lv, (S20728C6*), 0, "S20728C8");
    check_base_class_offset(lv, (S2121C28*), 0, "S20728C8");
    check_base_class_offset(lv, (S2121C38*), 0, "S20728C8");
    test_class_info(&lv, &cd_S20728C8);
    dp->~S20728C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C8(Test_S20728C8, "S20728C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20728C8C1Ev();
extern void _ZN8S20728C8D1Ev();
Name_Map name_map_S20728C8[] = {
  NSPAIR(_ZN8S20728C8C1Ev),
  NSPAIR(_ZN8S20728C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S20728C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20728C8[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20728C8[];
static  VTT_ENTRY vtt_S20728C8[] = {
  {&(_ZTV8S20728C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
Class_Descriptor cd_S20728C8 = {  "S20728C8", // class name
  bases_S20728C8, 3,
  &(vtc_S20728C8[0]), // expected_vtbl_contents
  &(vtt_S20728C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20728C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20728C8),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C8),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C9  : virtual S2121C38 {
  ~S20728C9(); // tgen
  S20728C9(); // tgen
};
//SIG(-1 S20728C9) C1{ VBC2{ m}}


S20728C9 ::~S20728C9(){ note_dtor("S20728C9", this);} // tgen
S20728C9 ::S20728C9(){ note_ctor("S20728C9", this);} // tgen

static void Test_S20728C9()
{
  extern Class_Descriptor cd_S20728C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20728C9, buf);
    S20728C9 *dp, &lv = *(dp=new (buf) S20728C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20728C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C9)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20728C9");
    test_class_info(&lv, &cd_S20728C9);
    dp->~S20728C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C9(Test_S20728C9, "S20728C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20728C9C1Ev();
extern void _ZN8S20728C9D1Ev();
Name_Map name_map_S20728C9[] = {
  NSPAIR(_ZN8S20728C9C1Ev),
  NSPAIR(_ZN8S20728C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S20728C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20728C9[];
static  VTBL_ENTRY vtc_S20728C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C9[0]),
};
extern VTBL_ENTRY _ZTV8S20728C9[];
static  VTT_ENTRY vtt_S20728C9[] = {
  {&(_ZTV8S20728C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20728C9[];
extern  VTBL_ENTRY _ZTV8S20728C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C9[];
Class_Descriptor cd_S20728C9 = {  "S20728C9", // class name
  bases_S20728C9, 1,
  &(vtc_S20728C9[0]), // expected_vtbl_contents
  &(vtt_S20728C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20728C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20728C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C9),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C11  : virtual S20728C4 {
  int s20728c11f0;
  ~S20728C11(); // tgen
  S20728C11(); // tgen
};
//SIG(-1 S20728C11) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S20728C11 ::~S20728C11(){ note_dtor("S20728C11", this);} // tgen
S20728C11 ::S20728C11(){ note_ctor("S20728C11", this);} // tgen

static void Test_S20728C11()
{
  extern Class_Descriptor cd_S20728C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20728C11, buf);
    S20728C11 *dp, &lv = *(dp=new (buf) S20728C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20728C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C11)");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), 0, "S20728C11");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), ABISELECT(12,8), "S20728C11");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), 0, "S20728C11");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C11");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), 0, "S20728C11");
    check_base_class_offset(lv, (S20728C4*), 0, "S20728C11");
    check_field_offset(lv, s20728c11f0, ABISELECT(8,4), "S20728C11.s20728c11f0");
    test_class_info(&lv, &cd_S20728C11);
    dp->~S20728C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C11(Test_S20728C11, "S20728C11", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20728C11C1Ev();
extern void _ZN9S20728C11D1Ev();
Name_Map name_map_S20728C11[] = {
  NSPAIR(_ZN9S20728C11C1Ev),
  NSPAIR(_ZN9S20728C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
static Base_Class bases_S20728C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20728C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C11[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY vtc_S20728C11[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C11[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern VTBL_ENTRY _ZTV9S20728C11[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C11[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__9S20728C11[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C11[] = {
  {&(_ZTV9S20728C11[7]),  7,9},
  {&(_ZTV9S20728C11[7]),  7,9},
  {&(_tg__ZTV8S20728C4__9S20728C11[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__9S20728C11[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20728C11[];
extern  VTBL_ENTRY _ZTV9S20728C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C11[];
Class_Descriptor cd_S20728C11 = {  "S20728C11", // class name
  bases_S20728C11, 6,
  &(vtc_S20728C11[0]), // expected_vtbl_contents
  &(vtt_S20728C11[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20728C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20728C11),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C11),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C14  : S20728C5 , S20728C6 {
  ~S20728C14(); // tgen
  S20728C14(); // tgen
};
//SIG(-1 S20728C14) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S20728C14 ::~S20728C14(){ note_dtor("S20728C14", this);} // tgen
S20728C14 ::S20728C14(){ note_ctor("S20728C14", this);} // tgen

static void Test_S20728C14()
{
  extern Class_Descriptor cd_S20728C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20728C14, buf);
    S20728C14 *dp, &lv = *(dp=new (buf) S20728C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20728C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C14)");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*), 0, "S20728C14");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*), 0, "S20728C14");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*), 0, "S20728C14");
    check_base_class_offset(lv, (S20728C5*), 0, "S20728C14");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*), ABISELECT(8,4), "S20728C14");
    test_class_info(&lv, &cd_S20728C14);
    dp->~S20728C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C14(Test_S20728C14, "S20728C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S20728C14C1Ev();
extern void _ZN9S20728C14D1Ev();
Name_Map name_map_S20728C14[] = {
  NSPAIR(_ZN9S20728C14C1Ev),
  NSPAIR(_ZN9S20728C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
static Base_Class bases_S20728C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20728C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20728C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C14[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20728C14[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__9S20728C14[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C14[] = {
  {&(_ZTV9S20728C14[4]),  4,8},
  {&(_tg__ZTV8S20728C5__9S20728C14[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
Class_Descriptor cd_S20728C14 = {  "S20728C14", // class name
  bases_S20728C14, 5,
  &(vtc_S20728C14[0]), // expected_vtbl_contents
  &(vtt_S20728C14[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S20728C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20728C14),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C14),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C13  : virtual S2121C38 , virtual S20728C14 , virtual S20728C4 , virtual S20728C8 , S20728C6 {
  ~S20728C13(); // tgen
  S20728C13(); // tgen
};
//SIG(-1 S20728C13) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S20728C13 ::~S20728C13(){ note_dtor("S20728C13", this);} // tgen
S20728C13 ::S20728C13(){ note_ctor("S20728C13", this);} // tgen

static void Test_S20728C13()
{
  extern Class_Descriptor cd_S20728C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20728C13, buf);
    S20728C13 *dp, &lv = *(dp=new (buf) S20728C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20728C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C13)");
    /*is_ambiguous_... S20728C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20728C13");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C14*), 0, "S20728C13");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), 0, "S20728C13");
    check_base_class_offset(lv, (S2121C38*)(S20728C8*), 0, "S20728C13");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C14*), ABISELECT(8,4), "S20728C13");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C14*), 0, "S20728C13");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C13");
    check_base_class_offset(lv, (S20728C5*)(S20728C14*), ABISELECT(8,4), "S20728C13");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C14*), ABISELECT(16,8), "S20728C13");
    check_base_class_offset(lv, (S20728C14*), ABISELECT(8,4), "S20728C13");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), ABISELECT(24,12), "S20728C13");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), ABISELECT(24,12), "S20728C13");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), ABISELECT(24,12), "S20728C13");
    check_base_class_offset(lv, (S20728C4*), ABISELECT(24,12), "S20728C13");
    check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(32,16), "S20728C13");
    check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(32,16), "S20728C13");
    check_base_class_offset(lv, (S20728C8*), ABISELECT(32,16), "S20728C13");
    /*is_ambiguous_... S20728C13::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*), 0, "S20728C13");
    test_class_info(&lv, &cd_S20728C13);
    dp->~S20728C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C13(Test_S20728C13, "S20728C13", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20728C13C1Ev();
extern void _ZN9S20728C13D1Ev();
Name_Map name_map_S20728C13[] = {
  NSPAIR(_ZN9S20728C13C1Ev),
  NSPAIR(_ZN9S20728C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C14;
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
static Base_Class bases_S20728C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20728C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C14,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20728C4,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C13[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C13[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20728C13[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C14__9S20728C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__A1__9S20728C13[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C13[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C13[] = {
  {&(_ZTV9S20728C13[7]),  7,30},
  {&(_ZTV9S20728C13[13]),  13,30},
  {&(_ZTV9S20728C13[16]),  16,30},
  {&(_ZTV9S20728C13[23]),  23,30},
  {&(_ZTV9S20728C13[29]),  29,30},
  {&(_tg__ZTV9S20728C14__9S20728C13[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C14__9S20728C13[4]),  4,5},
  {&(_tg__ZTV8S20728C4__9S20728C13[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__A1__9S20728C13[4]),  4,5},
  {&(_tg__ZTV8S20728C8__9S20728C13[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20728C13[];
extern  VTBL_ENTRY _ZTV9S20728C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C13[];
Class_Descriptor cd_S20728C13 = {  "S20728C13", // class name
  bases_S20728C13, 14,
  &(vtc_S20728C13[0]), // expected_vtbl_contents
  &(vtt_S20728C13[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20728C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20728C13),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C13),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C12  : S20728C13 , virtual S2121C24 , S20728C5 , S2121C28 , S20728C8 {
  virtual  ~S20728C12(); // _ZN9S20728C12D2Ev
  S20728C12(); // tgen
};
//SIG(-1 S20728C12) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S20728C12 ::~S20728C12(){ note_dtor("S20728C12", this);}
S20728C12 ::S20728C12(){ note_ctor("S20728C12", this);} // tgen

static void Test_S20728C12()
{
  extern Class_Descriptor cd_S20728C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S20728C12, buf);
    S20728C12 *dp, &lv = *(dp=new (buf) S20728C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S20728C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C12)");
    /*is_ambiguous_... S20728C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C13*), 0, "S20728C12");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C14*), 0, "S20728C12");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*), 0, "S20728C12");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C14*), ABISELECT(24,12), "S20728C12");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C14*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), ABISELECT(40,20), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S20728C5*)(S20728C14*), ABISELECT(24,12), "S20728C12");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C14*), ABISELECT(32,16), "S20728C12");
    check_base_class_offset(lv, (S20728C14*)(S20728C13*), ABISELECT(24,12), "S20728C12");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), ABISELECT(40,20), "S20728C12");
    check_base_class_offset(lv, (S20728C4*)(S20728C13*), ABISELECT(40,20), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(48,24), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(48,24), "S20728C12");
    check_base_class_offset(lv, (S20728C8*)(S20728C13*), ABISELECT(48,24), "S20728C12");
    /*is_ambiguous_... S20728C13::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C13*), 0, "S20728C12");
    check_base_class_offset(lv, (S20728C13*), 0, "S20728C12");
    check_base_class_offset(lv, (S2121C24*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*), ABISELECT(8,4), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C5*), ABISELECT(8,4), "S20728C12");
    /*is_ambiguous_... S20728C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(16,8), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(16,8), "S20728C12");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C8*), ABISELECT(16,8), "S20728C12");
    test_class_info(&lv, &cd_S20728C12);
    dp->~S20728C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C12(Test_S20728C12, "S20728C12", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN9S20728C12C1Ev();
extern void _ZN9S20728C12D2Ev();
Name_Map name_map_S20728C12[] = {
  NSPAIR(_ZN9S20728C12C1Ev),
  NSPAIR(_ZN9S20728C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C14;
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C13;
extern VTBL_ENTRY _ZTI9S20728C13[];
extern  VTBL_ENTRY _ZTV9S20728C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C13[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
static Base_Class bases_S20728C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20728C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20728C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C14,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20728C4,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20728C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20728C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20728C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C12[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN9S20728C12D1Ev();
extern void _ZN9S20728C12D0Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C12[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20728C12[];
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C13__9S20728C12[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C13__9S20728C12[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C13__9S20728C12[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C13__9S20728C12[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C13__9S20728C12[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__A2__9S20728C12[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__A__9S20728C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C12[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C14__9S20728C12[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C12[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__A1__9S20728C12[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C12[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C12[] = {
  {&(_ZTV9S20728C12[8]),  8,42},
  {&(_tg__ZTV9S20728C13__9S20728C12[7]),  7,8},
  {&(_tg__ZTV9S20728C14__9S20728C13__9S20728C12[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C13__9S20728C12[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C13__9S20728C12[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C13__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C5__A2__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C8__A__9S20728C12[3]),  3,4},
  {&(_ZTV9S20728C12[25]),  25,42},
  {&(_ZTV9S20728C12[28]),  28,42},
  {&(_ZTV9S20728C12[35]),  35,42},
  {&(_ZTV9S20728C12[41]),  41,42},
  {&(_ZTV9S20728C12[15]),  15,42},
  {&(_ZTV9S20728C12[19]),  19,42},
  {&(_tg__ZTV9S20728C14__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C14__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C4__9S20728C12[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__A1__9S20728C12[4]),  4,5},
  {&(_tg__ZTV8S20728C8__9S20728C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20728C12[];
extern  VTBL_ENTRY _ZTV9S20728C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C12[];
Class_Descriptor cd_S20728C12 = {  "S20728C12", // class name
  bases_S20728C12, 22,
  &(vtc_S20728C12[0]), // expected_vtbl_contents
  &(vtt_S20728C12[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI9S20728C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20728C12),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C12),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C10  : S20728C11 , S20728C12 {
  int s20728c10f0;
  virtual  ~S20728C10(); // _ZN9S20728C10D2Ev
  S20728C10(); // tgen
};
//SIG(-1 S20728C10) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} BC8{ BC9{ VBC4 VBC10{ BC5 BC6} VBC3 VBC11{ BC6 BC7 VBC4} BC6} VBC12{ m} BC5 BC7 BC11 vd} vd Fi}


 S20728C10 ::~S20728C10(){ note_dtor("S20728C10", this);}
S20728C10 ::S20728C10(){ note_ctor("S20728C10", this);} // tgen

static void Test_S20728C10()
{
  extern Class_Descriptor cd_S20728C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20728C10, buf);
    S20728C10 *dp, &lv = *(dp=new (buf) S20728C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20728C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C10)");
    /*is_ambiguous_... S20728C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), 0, "S20728C10");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), ABISELECT(44,24), "S20728C10");
    /*is_ambiguous_... S20728C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C13*)(S20728C12*), ABISELECT(44,24), "S20728C10");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C14*), ABISELECT(44,24), "S20728C10");
    /*is_ambiguous_... S20728C10::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*), ABISELECT(44,24), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C12*), ABISELECT(44,24), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*)(S20728C12*), ABISELECT(44,24), "S20728C10");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), 0, "S20728C10");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C10");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C14*), 0, "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C12*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C5*)(S20728C4*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C4*)(S20728C11*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C4*)(S20728C13*)(S20728C12*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C11*), 0, "S20728C10");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C14*), ABISELECT(48,24), "S20728C10");
    check_base_class_offset(lv, (S20728C5*)(S20728C14*), ABISELECT(48,24), "S20728C10");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C14*), ABISELECT(56,28), "S20728C10");
    check_base_class_offset(lv, (S20728C14*)(S20728C13*)(S20728C12*), ABISELECT(48,24), "S20728C10");
    /*is_ambiguous_... S20728C10::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(64,32), "S20728C10");
    /*is_ambiguous_... S20728C10::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(64,32), "S20728C10");
    check_base_class_offset(lv, (S20728C8*)(S20728C13*)(S20728C12*), ABISELECT(64,32), "S20728C10");
    /*is_ambiguous_... S20728C13::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C13*)(S20728C12*), ABISELECT(16,8), "S20728C10");
    check_base_class_offset(lv, (S20728C13*)(S20728C12*), ABISELECT(16,8), "S20728C10");
    check_base_class_offset(lv, (S2121C24*)(S20728C12*), 0, "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C12*), ABISELECT(24,12), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C5*)(S20728C12*), ABISELECT(24,12), "S20728C10");
    /*is_ambiguous_... S20728C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C12*), ABISELECT(16,8), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*)(S20728C12*), ABISELECT(32,16), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*)(S20728C12*), ABISELECT(32,16), "S20728C10");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C8*)(S20728C12*), ABISELECT(32,16), "S20728C10");
    check_base_class_offset(lv, (S20728C12*), ABISELECT(16,8), "S20728C10");
    check_field_offset(lv, s20728c10f0, ABISELECT(40,20), "S20728C10.s20728c10f0");
    test_class_info(&lv, &cd_S20728C10);
    dp->~S20728C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C10(Test_S20728C10, "S20728C10", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S20728C10C1Ev();
extern void _ZN9S20728C10D2Ev();
Name_Map name_map_S20728C10[] = {
  NSPAIR(_ZN9S20728C10C1Ev),
  NSPAIR(_ZN9S20728C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C11;
extern VTBL_ENTRY _ZTI9S20728C11[];
extern  VTBL_ENTRY _ZTV9S20728C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C11[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C14;
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C13;
extern VTBL_ENTRY _ZTI9S20728C13[];
extern  VTBL_ENTRY _ZTV9S20728C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C13[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C12;
extern VTBL_ENTRY _ZTI9S20728C12[];
extern  VTBL_ENTRY _ZTV9S20728C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C12[];
static Base_Class bases_S20728C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(44,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20728C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20728C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20728C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(56,28), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20728C14,    ABISELECT(48,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20728C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(64,32), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20728C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20728C13,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S20728C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20728C12,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20728C10[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN9S20728C10D1Ev();
extern void _ZN9S20728C10D0Ev();
extern void _ZN8S20728C62v1Ev();
extern void ABISELECT(_ZThn16_N9S20728C10D1Ev,_ZThn8_N9S20728C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20728C10D0Ev,_ZThn8_N9S20728C10D0Ev)();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C10[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  (VTBL_ENTRY)&_ZN9S20728C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20728C10D1Ev,_ZThn8_N9S20728C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20728C10D0Ev,_ZThn8_N9S20728C10D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(12,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-20,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV9S20728C10[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C11__9S20728C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C11[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN9S20728C12D1Ev();
extern void _ZN9S20728C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C12__9S20728C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D0Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C139S20728C12__9S20728C10[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C139S20728C12__9S20728C10[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C139S20728C12__9S20728C10[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C139S20728C12__9S20728C10[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C139S20728C12__9S20728C10[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C12__A2__9S20728C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C89S20728C12__A1__9S20728C10[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C12__9S20728C10[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C12__9S20728C10[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C12__9S20728C10[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C12__9S20728C10[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__A2__9S20728C12__9S20728C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__A__9S20728C12__9S20728C10[] = {
  ABISELECT(12,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C10[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__9S20728C10[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C14__A1__9S20728C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C10[] = {
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C10[] = {
  {&(_ZTV9S20728C10[10]),  10,48},
  {&(_tg__ZTV9S20728C11__9S20728C10[7]),  7,9},
  {&(_tg__ZTV9S20728C11__9S20728C10[7]),  7,9},
  {&(_tg__ZTV9S20728C12__9S20728C10[8]),  8,11},
  {&(_tg__ZTV9S20728C139S20728C12__9S20728C10[7]),  7,8},
  {&(_tg__ZTV9S20728C14__9S20728C139S20728C12__9S20728C10[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C139S20728C12__9S20728C10[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C139S20728C12__9S20728C10[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C139S20728C12__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C12__A2__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C89S20728C12__A1__9S20728C10[3]),  3,4},
  {&(_tg__ZTV9S20728C14__9S20728C12__9S20728C10[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C12__9S20728C10[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C12__9S20728C10[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C12__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C5__A2__9S20728C12__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C8__A__9S20728C12__9S20728C10[3]),  3,4},
  {&(_ZTV9S20728C10[10]),  10,48},
  {&(_ZTV9S20728C10[22]),  22,48},
  {&(_ZTV9S20728C10[39]),  39,48},
  {&(_ZTV9S20728C10[42]),  42,48},
  {&(_ZTV9S20728C10[47]),  47,48},
  {&(_ZTV9S20728C10[29]),  29,48},
  {&(_ZTV9S20728C10[33]),  33,48},
  {&(_tg__ZTV8S20728C4__9S20728C10[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__9S20728C10[4]),  4,5},
  {&(_tg__ZTV9S20728C14__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C14__A1__9S20728C10[4]),  4,5},
  {&(_tg__ZTV8S20728C8__9S20728C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20728C10[];
extern  VTBL_ENTRY _ZTV9S20728C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C10[];
Class_Descriptor cd_S20728C10 = {  "S20728C10", // class name
  bases_S20728C10, 24,
  &(vtc_S20728C10[0]), // expected_vtbl_contents
  &(vtt_S20728C10[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S20728C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20728C10),48, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20728C10),29, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20728C1  : virtual S20728C2 , virtual S20728C8 , S20728C4 , S20728C9 , S20728C10 {
  virtual  ~S20728C1(); // _ZN8S20728C1D2Ev
  S20728C1(); // tgen
};
//SIG(1 S20728C1) C1{ VBC2{ VBC3{ m} VBC4{ BC3 BC5{ VBC3 BC6{ v1} VBC7{ m}} v2} BC6 Fi Fp} VBC8{ BC6 BC7 VBC3} BC4 BC9{ VBC3} BC10{ BC11{ VBC4 Fi} BC12{ BC13{ VBC3 VBC14{ BC5 BC6} VBC4 VBC8 BC6} VBC15{ m} BC5 BC7 BC8 vd} vd Fi} vd}


 S20728C1 ::~S20728C1(){ note_dtor("S20728C1", this);}
S20728C1 ::S20728C1(){ note_ctor("S20728C1", this);} // tgen

static void Test_S20728C1()
{
  extern Class_Descriptor cd_S20728C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S20728C1, buf);
    S20728C1 *dp, &lv = *(dp=new (buf) S20728C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S20728C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20728C1)");
    /*is_ambiguous_... S20728C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C2*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C4*), ABISELECT(88,44), "S20728C1");
    check_base_class_offset(lv, (S2121C38*)(S20728C9*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C13::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(88,44), "S20728C1");
    check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C14*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C5*)(S20728C12*)(S20728C10*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C8*)(S20728C12*)(S20728C10*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), ABISELECT(16,8), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), ABISELECT(16,8), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C4*), 0, "S20728C1");
    check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C14*), 0, "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C5*)(S20728C12*)(S20728C10*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C5*)(S20728C4*), ABISELECT(16,8), "S20728C1");
    check_base_class_offset(lv, (S20728C4*)(S20728C2*), ABISELECT(16,8), "S20728C1");
    check_base_class_offset(lv, (S20728C4*)(S20728C11*)(S20728C10*), ABISELECT(16,8), "S20728C1");
    check_base_class_offset(lv, (S20728C4*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(16,8), "S20728C1");
    /*is_ambiguous_... S20728C2::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C2*), ABISELECT(64,32), "S20728C1");
    check_base_class_offset(lv, (S20728C2*), ABISELECT(64,32), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C8*), ABISELECT(88,44), "S20728C1");
    check_base_class_offset(lv, (S20728C8*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(88,44), "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20728C4*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C4*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C5*)(S20728C4*), 0, "S20728C1");
    /*is_ambiguous_... S20728C1::S20728C4 */ AMB_check_base_class_offset(lv, (S20728C4*), 0, "S20728C1");
    check_base_class_offset(lv, (S20728C9*), ABISELECT(8,4), "S20728C1");
    check_base_class_offset(lv, (S20728C11*)(S20728C10*), ABISELECT(16,8), "S20728C1");
    check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C14*), ABISELECT(96,48), "S20728C1");
    check_base_class_offset(lv, (S20728C5*)(S20728C14*), ABISELECT(96,48), "S20728C1");
    /*is_ambiguous_... S20728C14::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C14*), ABISELECT(104,52), "S20728C1");
    check_base_class_offset(lv, (S20728C14*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(96,48), "S20728C1");
    /*is_ambiguous_... S20728C13::S20728C6 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(32,16), "S20728C1");
    check_base_class_offset(lv, (S20728C13*)(S20728C12*)(S20728C10*), ABISELECT(32,16), "S20728C1");
    check_base_class_offset(lv, (S2121C24*)(S20728C12*)(S20728C10*), 0, "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C5*)(S20728C12*)(S20728C10*), ABISELECT(40,20), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C5 */ AMB_check_base_class_offset(lv, (S20728C5*)(S20728C12*)(S20728C10*), ABISELECT(40,20), "S20728C1");
    /*is_ambiguous_... S20728C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C12*)(S20728C10*), ABISELECT(32,16), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C6*)(S20728C8*)(S20728C12*)(S20728C10*), ABISELECT(48,24), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S20728C8*)(S20728C12*)(S20728C10*), ABISELECT(48,24), "S20728C1");
    /*is_ambiguous_... S20728C12::S20728C8 */ AMB_check_base_class_offset(lv, (S20728C8*)(S20728C12*)(S20728C10*), ABISELECT(48,24), "S20728C1");
    check_base_class_offset(lv, (S20728C12*)(S20728C10*), ABISELECT(32,16), "S20728C1");
    check_base_class_offset(lv, (S20728C10*), ABISELECT(16,8), "S20728C1");
    test_class_info(&lv, &cd_S20728C1);
    dp->~S20728C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20728C1(Test_S20728C1, "S20728C1", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S20728C1C1Ev();
extern void _ZN8S20728C1D2Ev();
Name_Map name_map_S20728C1[] = {
  NSPAIR(_ZN8S20728C1C1Ev),
  NSPAIR(_ZN8S20728C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C2;
extern VTBL_ENTRY _ZTI8S20728C2[];
extern  VTBL_ENTRY _ZTV8S20728C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C2[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C4;
extern VTBL_ENTRY _ZTI8S20728C4[];
extern  VTBL_ENTRY _ZTV8S20728C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C4[];
extern Class_Descriptor cd_S20728C9;
extern VTBL_ENTRY _ZTI8S20728C9[];
extern  VTBL_ENTRY _ZTV8S20728C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C9[];
extern Class_Descriptor cd_S20728C11;
extern VTBL_ENTRY _ZTI9S20728C11[];
extern  VTBL_ENTRY _ZTV9S20728C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C11[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C14;
extern VTBL_ENTRY _ZTI9S20728C14[];
extern  VTBL_ENTRY _ZTV9S20728C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C14[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C13;
extern VTBL_ENTRY _ZTI9S20728C13[];
extern  VTBL_ENTRY _ZTV9S20728C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C13[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S20728C5;
extern VTBL_ENTRY _ZTI8S20728C5[];
extern  VTBL_ENTRY _ZTV8S20728C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C5[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C6;
extern VTBL_ENTRY _ZTI8S20728C6[];
extern  VTBL_ENTRY _ZTV8S20728C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20728C8;
extern VTBL_ENTRY _ZTI8S20728C8[];
extern  VTBL_ENTRY _ZTV8S20728C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C8[];
extern Class_Descriptor cd_S20728C12;
extern VTBL_ENTRY _ZTI9S20728C12[];
extern  VTBL_ENTRY _ZTV9S20728C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C12[];
extern Class_Descriptor cd_S20728C10;
extern VTBL_ENTRY _ZTI9S20728C10[];
extern  VTBL_ENTRY _ZTV9S20728C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20728C10[];
static Base_Class bases_S20728C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20728C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20728C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20728C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20728C2,    ABISELECT(64,32), //bcp->offset
    50, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20728C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(88,44), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20728C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20728C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20728C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20728C9,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20728C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(104,52), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20728C14,    ABISELECT(96,48), //bcp->offset
    62, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20728C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20728C13,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S20728C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20728C5,    ABISELECT(40,20), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20728C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20728C8,    ABISELECT(48,24), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20728C12,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20728C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20728C1[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN8S20728C1D1Ev();
extern void _ZN8S20728C1D0Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void ABISELECT(_ZThn16_N8S20728C1D1Ev,_ZThn8_N8S20728C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20728C1D0Ev,_ZThn8_N8S20728C1D0Ev)();
extern void _ZN8S20728C62v1Ev();
extern void ABISELECT(_ZThn32_N8S20728C1D1Ev,_ZThn16_N8S20728C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20728C1D0Ev,_ZThn16_N8S20728C1D0Ev)();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY vtc_S20728C1[] = {
  0,
  ABISELECT(96,48),
  ABISELECT(88,44),
  ABISELECT(16,8),
  ABISELECT(64,32),
  0,
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20728C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20728C1D0Ev,
  ABISELECT(80,40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(80,40),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20728C1D1Ev,_ZThn8_N8S20728C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20728C1D0Ev,_ZThn8_N8S20728C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20728C1D1Ev,_ZThn16_N8S20728C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20728C1D0Ev,_ZThn16_N8S20728C1D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(48,24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(40,20),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  ABISELECT(24,12),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20728C1[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20728C1[];
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__A__8S20728C1[] = {
  0,
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__A1__8S20728C1[] = {
  0,
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20728C9__8S20728C1[] = {
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C9[0]),
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
extern void _ZN9S20728C10D1Ev();
extern void _ZN9S20728C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C10__8S20728C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(80,40),
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
  (VTBL_ENTRY)&_ZN9S20728C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C10D0Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C119S20728C10__8S20728C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C11[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN9S20728C12D1Ev();
extern void _ZN9S20728C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20728C12D0Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C139S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C139S20728C129S20728C10__8S20728C1[] = {
  0,
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C139S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C139S20728C129S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C139S20728C129S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20728C13[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C129S20728C10__A3__8S20728C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C89S20728C129S20728C10__A1__8S20728C1[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C129S20728C10__8S20728C1[] = {
  0,
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A1__9S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__9S20728C129S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C129S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C5__A2__9S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(48,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__A__9S20728C129S20728C10__8S20728C1[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C12[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void ABISELECT(_ZThn16_N9S20728C10D1Ev,_ZThn8_N9S20728C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20728C10D0Ev,_ZThn8_N9S20728C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20728C12__9S20728C10__8S20728C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20728C10D1Ev,_ZThn8_N9S20728C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20728C10D0Ev,_ZThn8_N9S20728C10D0Ev),
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__9S20728C10__8S20728C1[] = {
  0,
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C69S20728C14__A2__9S20728C10__8S20728C1[] = {
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__9S20728C10__8S20728C1[] = {
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C12__A2__9S20728C10__8S20728C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(48,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C89S20728C12__A1__9S20728C10__8S20728C1[] = {
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20728C10[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C2__8S20728C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C2[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__8S20728C2__8S20728C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S20728C2[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
extern void _ZN8S20728C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C4__8S20728C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C4[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20728C42v2Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C58S20728C4__8S20728C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C8__8S20728C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C8[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20728C14__8S20728C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20728C14[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
extern void _ZN8S20728C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20728C59S20728C14__A2__8S20728C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20728C5[0]),
  (VTBL_ENTRY)&_ZN8S20728C62v1Ev,
};
static  VTT_ENTRY vtt_S20728C1[] = {
  {&(_ZTV8S20728C1[9]),  9,71},
  {&(_tg__ZTV8S20728C4__A__8S20728C1[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__A1__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C9__8S20728C1[3]),  3,3},
  {&(_tg__ZTV9S20728C10__8S20728C1[10]),  10,14},
  {&(_tg__ZTV9S20728C119S20728C10__8S20728C1[7]),  7,9},
  {&(_tg__ZTV9S20728C119S20728C10__8S20728C1[7]),  7,9},
  {&(_tg__ZTV9S20728C129S20728C10__8S20728C1[8]),  8,11},
  {&(_tg__ZTV9S20728C139S20728C129S20728C10__8S20728C1[7]),  7,8},
  {&(_tg__ZTV9S20728C14__9S20728C139S20728C129S20728C10__8S20728C1[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C139S20728C129S20728C10__8S20728C1[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C139S20728C129S20728C10__8S20728C1[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C139S20728C129S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C129S20728C10__A3__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C89S20728C129S20728C10__A1__8S20728C1[3]),  3,4},
  {&(_tg__ZTV9S20728C14__9S20728C129S20728C10__8S20728C1[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A1__9S20728C129S20728C10__8S20728C1[2]),  2,3},
  {&(_tg__ZTV8S20728C4__9S20728C129S20728C10__8S20728C1[6]),  6,8},
  {&(_tg__ZTV8S20728C8__9S20728C129S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C5__A2__9S20728C129S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C8__A__9S20728C129S20728C10__8S20728C1[3]),  3,4},
  {&(_tg__ZTV9S20728C10__8S20728C1[10]),  10,14},
  {&(_tg__ZTV9S20728C12__9S20728C10__8S20728C1[8]),  8,11},
  {&(_tg__ZTV9S20728C14__9S20728C10__8S20728C1[5]),  5,6},
  {&(_tg__ZTV8S20728C69S20728C14__A2__9S20728C10__8S20728C1[2]),  2,3},
  {&(_tg__ZTV8S20728C8__9S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C12__A2__9S20728C10__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C89S20728C12__A1__9S20728C10__8S20728C1[3]),  3,4},
  {&(_ZTV8S20728C1[56]),  56,71},
  {&(_ZTV8S20728C1[26]),  26,71},
  {&(_ZTV8S20728C1[61]),  61,71},
  {&(_ZTV8S20728C1[16]),  16,71},
  {&(_ZTV8S20728C1[26]),  26,71},
  {&(_ZTV8S20728C1[38]),  38,71},
  {&(_ZTV8S20728C1[67]),  67,71},
  {&(_ZTV8S20728C1[70]),  70,71},
  {&(_ZTV8S20728C1[45]),  45,71},
  {&(_ZTV8S20728C1[49]),  49,71},
  {&(_tg__ZTV8S20728C2__8S20728C1[5]),  5,6},
  {&(_tg__ZTV8S20728C4__8S20728C2__8S20728C1[6]),  6,8},
  {&(_tg__ZTV8S20728C4__8S20728C1[4]),  4,6},
  {&(_tg__ZTV8S20728C58S20728C4__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C8__8S20728C1[3]),  3,4},
  {&(_tg__ZTV9S20728C14__8S20728C1[4]),  4,5},
  {&(_tg__ZTV8S20728C59S20728C14__A2__8S20728C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20728C1[];
extern  VTBL_ENTRY _ZTV8S20728C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20728C1[];
Class_Descriptor cd_S20728C1 = {  "S20728C1", // class name
  bases_S20728C1, 32,
  &(vtc_S20728C1[0]), // expected_vtbl_contents
  &(vtt_S20728C1[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S20728C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20728C1),71, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20728C1),45, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C3  {
  ::S2185C10_nt s4846c3f0;
  int s4846c3f1[2];
  char s4846c3f2;
  virtual  ~S4846C3(); // _ZN7S4846C3D1Ev
  virtual void  v3(); // _ZN7S4846C32v3Ev
  virtual void  v4(); // _ZN7S4846C32v4Ev
  virtual void  v5(); // _ZN7S4846C32v5Ev
  S4846C3(); // tgen
};
//SIG(-1 S4846C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4846C3 ::~S4846C3(){ note_dtor("S4846C3", this);}
void  S4846C3 ::v3(){vfunc_called(this, "_ZN7S4846C32v3Ev");}
void  S4846C3 ::v4(){vfunc_called(this, "_ZN7S4846C32v4Ev");}
void  S4846C3 ::v5(){vfunc_called(this, "_ZN7S4846C32v5Ev");}
S4846C3 ::S4846C3(){ note_ctor("S4846C3", this);} // tgen

static void Test_S4846C3()
{
  extern Class_Descriptor cd_S4846C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4846C3, buf);
    S4846C3 *dp, &lv = *(dp=new (buf) S4846C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4846C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4846C3)");
    check_field_offset(lv, s4846c3f0, ABISELECT(8,4), "S4846C3.s4846c3f0");
    check_field_offset(lv, s4846c3f1, ABISELECT(24,16), "S4846C3.s4846c3f1");
    check_field_offset(lv, s4846c3f2, ABISELECT(32,24), "S4846C3.s4846c3f2");
    test_class_info(&lv, &cd_S4846C3);
    dp->~S4846C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4846C3(Test_S4846C3, "S4846C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4846C3C1Ev();
extern void _ZN7S4846C3D1Ev();
Name_Map name_map_S4846C3[] = {
  NSPAIR(_ZN7S4846C3C1Ev),
  NSPAIR(_ZN7S4846C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4846C3[];
extern void _ZN7S4846C3D1Ev();
extern void _ZN7S4846C3D0Ev();
extern void _ZN7S4846C32v3Ev();
extern void _ZN7S4846C32v4Ev();
extern void _ZN7S4846C32v5Ev();
static  VTBL_ENTRY vtc_S4846C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4846C3[0]),
  (VTBL_ENTRY)&_ZN7S4846C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4846C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4846C3[];
extern  VTBL_ENTRY _ZTV7S4846C3[];
Class_Descriptor cd_S4846C3 = {  "S4846C3", // class name
  0,0,//no base classes
  &(vtc_S4846C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4846C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4846C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C7_nt  {
  char s4846c7f0[20];
};
//SIG(-1 S4846C7_nt) C1{ Fc[20]}



//skip512 S4846C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C6_nt  {
  ::S4846C7_nt s4846c6f0;
  char s4846c6f1[16];
};
//SIG(-1 S4846C6_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S4846C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C2  : S4846C3 {
  void *s4846c2f0[2];
  ::S4846C6_nt s4846c2f1;
  virtual  ~S4846C2(); // _ZN7S4846C2D1Ev
  virtual void  v6(); // _ZN7S4846C22v6Ev
  virtual void  v7(); // _ZN7S4846C22v7Ev
  virtual void  v8(); // _ZN7S4846C22v8Ev
  virtual void  v9(); // _ZN7S4846C22v9Ev
  S4846C2(); // tgen
};
//SIG(-1 S4846C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] FC5{ FC6{ Fc[20]} Fc[16]}}


 S4846C2 ::~S4846C2(){ note_dtor("S4846C2", this);}
void  S4846C2 ::v6(){vfunc_called(this, "_ZN7S4846C22v6Ev");}
void  S4846C2 ::v7(){vfunc_called(this, "_ZN7S4846C22v7Ev");}
void  S4846C2 ::v8(){vfunc_called(this, "_ZN7S4846C22v8Ev");}
void  S4846C2 ::v9(){vfunc_called(this, "_ZN7S4846C22v9Ev");}
S4846C2 ::S4846C2(){ note_ctor("S4846C2", this);} // tgen

static void Test_S4846C2()
{
  extern Class_Descriptor cd_S4846C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4846C2, buf);
    S4846C2 *dp, &lv = *(dp=new (buf) S4846C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4846C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4846C2)");
    check_base_class_offset(lv, (S4846C3*), 0, "S4846C2");
    check_field_offset(lv, s4846c2f0, ABISELECT(40,28), "S4846C2.s4846c2f0");
    check_field_offset(lv, s4846c2f1, ABISELECT(56,36), "S4846C2.s4846c2f1");
    test_class_info(&lv, &cd_S4846C2);
    dp->~S4846C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4846C2(Test_S4846C2, "S4846C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4846C2C1Ev();
extern void _ZN7S4846C2D1Ev();
Name_Map name_map_S4846C2[] = {
  NSPAIR(_ZN7S4846C2C1Ev),
  NSPAIR(_ZN7S4846C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4846C3;
extern VTBL_ENTRY _ZTI7S4846C3[];
extern  VTBL_ENTRY _ZTV7S4846C3[];
static Base_Class bases_S4846C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4846C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4846C2[];
extern void _ZN7S4846C2D1Ev();
extern void _ZN7S4846C2D0Ev();
extern void _ZN7S4846C32v3Ev();
extern void _ZN7S4846C32v4Ev();
extern void _ZN7S4846C32v5Ev();
extern void _ZN7S4846C22v6Ev();
extern void _ZN7S4846C22v7Ev();
extern void _ZN7S4846C22v8Ev();
extern void _ZN7S4846C22v9Ev();
static  VTBL_ENTRY vtc_S4846C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4846C2[0]),
  (VTBL_ENTRY)&_ZN7S4846C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4846C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4846C2[];
extern  VTBL_ENTRY _ZTV7S4846C2[];
Class_Descriptor cd_S4846C2 = {  "S4846C2", // class name
  bases_S4846C2, 1,
  &(vtc_S4846C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4846C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4846C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C9_nt  {
  char s4846c9f0[12];
};
//SIG(-1 S4846C9_nt) C1{ Fc[12]}



//skip512 S4846C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C11_nt  {
  int s4846c11f0[2];
  char s4846c11f1[320];
  int s4846c11f2;
};
//SIG(-1 S4846C11_nt) C1{ Fi[2] Fc[320] Fi}



//skip512 S4846C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C10_nt  {
  int s4846c10f0;
  char s4846c10f1[128];
  ::S4846C11_nt s4846c10f2;
};
//SIG(-1 S4846C10_nt) C1{ Fi Fc[128] FC2{ Fi[2] Fc[320] Fi}}



//skip512 S4846C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C8  {
  int s4846c8f0;
  ::S4846C9_nt s4846c8f1;
  char s4846c8f2[48];
  ::S4846C9_nt s4846c8f3;
  ::S4846C9_nt s4846c8f4;
  ::S4846C10_nt s4846c8f5;
};
//SIG(-1 S4846C8) C1{ Fi FC2{ Fc[12]} Fc[48] FC2 FC2 FC3{ Fi Fc[128] FC4{ Fi[2] Fc[320] Fi}}}



static void Test_S4846C8()
{
  {
    init_simple_test("S4846C8");
    S4846C8 lv;
    check2(sizeof(lv), 552, "sizeof(S4846C8)");
    check2(__alignof__(lv), 4, "__alignof__(S4846C8)");
    check_field_offset(lv, s4846c8f0, 0, "S4846C8.s4846c8f0");
    check_field_offset(lv, s4846c8f1, 4, "S4846C8.s4846c8f1");
    check_field_offset(lv, s4846c8f2, 16, "S4846C8.s4846c8f2");
    check_field_offset(lv, s4846c8f3, 64, "S4846C8.s4846c8f3");
    check_field_offset(lv, s4846c8f4, 76, "S4846C8.s4846c8f4");
    check_field_offset(lv, s4846c8f5, 88, "S4846C8.s4846c8f5");
  }
}
static Arrange_To_Call_Me vS4846C8(Test_S4846C8, "S4846C8", 552);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4846C1  : S4846C2 {
  int s4846c1f0;
  ::S4846C8 s4846c1f1;
  virtual  ~S4846C1(); // _ZN7S4846C1D1Ev
  virtual void  v1(); // _ZN7S4846C12v1Ev
  virtual void  v2(); // _ZN7S4846C12v2Ev
  S4846C1(); // tgen
};
//SIG(1 S4846C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp[2] FC6{ FC7{ Fc[20]} Fc[16]}} vd v1 v2 Fi FC8{ Fi FC9{ Fc[12]} Fc[48] FC9 FC9 FC10{ Fi Fc[128] FC11{ Fi[2] Fc[320] Fi}}}}


 S4846C1 ::~S4846C1(){ note_dtor("S4846C1", this);}
void  S4846C1 ::v1(){vfunc_called(this, "_ZN7S4846C12v1Ev");}
void  S4846C1 ::v2(){vfunc_called(this, "_ZN7S4846C12v2Ev");}
S4846C1 ::S4846C1(){ note_ctor("S4846C1", this);} // tgen

static void Test_S4846C1()
{
  extern Class_Descriptor cd_S4846C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(82,158)];
    init_test(&cd_S4846C1, buf);
    S4846C1 *dp, &lv = *(dp=new (buf) S4846C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(648,628), "sizeof(S4846C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4846C1)");
    check_base_class_offset(lv, (S4846C3*)(S4846C2*), 0, "S4846C1");
    check_base_class_offset(lv, (S4846C2*), 0, "S4846C1");
    check_field_offset(lv, s4846c1f0, ABISELECT(92,72), "S4846C1.s4846c1f0");
    check_field_offset(lv, s4846c1f1, ABISELECT(96,76), "S4846C1.s4846c1f1");
    test_class_info(&lv, &cd_S4846C1);
    dp->~S4846C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4846C1(Test_S4846C1, "S4846C1", ABISELECT(648,628));

#else // __cplusplus

extern void _ZN7S4846C1C1Ev();
extern void _ZN7S4846C1D1Ev();
Name_Map name_map_S4846C1[] = {
  NSPAIR(_ZN7S4846C1C1Ev),
  NSPAIR(_ZN7S4846C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4846C3;
extern VTBL_ENTRY _ZTI7S4846C3[];
extern  VTBL_ENTRY _ZTV7S4846C3[];
extern Class_Descriptor cd_S4846C2;
extern VTBL_ENTRY _ZTI7S4846C2[];
extern  VTBL_ENTRY _ZTV7S4846C2[];
static Base_Class bases_S4846C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4846C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4846C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4846C1[];
extern void _ZN7S4846C1D1Ev();
extern void _ZN7S4846C1D0Ev();
extern void _ZN7S4846C32v3Ev();
extern void _ZN7S4846C32v4Ev();
extern void _ZN7S4846C32v5Ev();
extern void _ZN7S4846C22v6Ev();
extern void _ZN7S4846C22v7Ev();
extern void _ZN7S4846C22v8Ev();
extern void _ZN7S4846C22v9Ev();
extern void _ZN7S4846C12v1Ev();
extern void _ZN7S4846C12v2Ev();
static  VTBL_ENTRY vtc_S4846C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4846C1[0]),
  (VTBL_ENTRY)&_ZN7S4846C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4846C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4846C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4846C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4846C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4846C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4846C1[];
extern  VTBL_ENTRY _ZTV7S4846C1[];
Class_Descriptor cd_S4846C1 = {  "S4846C1", // class name
  bases_S4846C1, 2,
  &(vtc_S4846C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(648,628), // object size
  NSPAIRA(_ZTI7S4846C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4846C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C2_nt  : S2121C38 {
};
//SIG(-1 S2970C2_nt) C1{ BC2{ m}}



//skip512 S2970C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S2970C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2970C2_nt[];
VTBL_ENTRY *P__ZTI10S2970C2_nt = _ZTI10S2970C2_nt; 
Class_Descriptor cd_S2970C2_nt = {  "S2970C2_nt", // class name
  bases_S2970C2_nt, 1,
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S2970C2_nt),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C9  {
  virtual void  v1(); // _ZN7S2970C92v1Ev
  ~S2970C9(); // tgen
  S2970C9(); // tgen
};
//SIG(-1 S2970C9) C1{ v1}


void  S2970C9 ::v1(){vfunc_called(this, "_ZN7S2970C92v1Ev");}
S2970C9 ::~S2970C9(){ note_dtor("S2970C9", this);} // tgen
S2970C9 ::S2970C9(){ note_ctor("S2970C9", this);} // tgen

static void Test_S2970C9()
{
  extern Class_Descriptor cd_S2970C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2970C9, buf);
    S2970C9 *dp, &lv = *(dp=new (buf) S2970C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2970C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C9)");
    test_class_info(&lv, &cd_S2970C9);
    dp->~S2970C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C9(Test_S2970C9, "S2970C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2970C9C1Ev();
extern void _ZN7S2970C9D1Ev();
Name_Map name_map_S2970C9[] = {
  NSPAIR(_ZN7S2970C9C1Ev),
  NSPAIR(_ZN7S2970C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2970C9[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C9[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
Class_Descriptor cd_S2970C9 = {  "S2970C9", // class name
  0,0,//no base classes
  &(vtc_S2970C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2970C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2970C9),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C8  : virtual S2121C28 , S2970C9 , virtual S2121C38 {
  ~S2970C8(); // tgen
  S2970C8(); // tgen
};
//SIG(-1 S2970C8) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S2970C8 ::~S2970C8(){ note_dtor("S2970C8", this);} // tgen
S2970C8 ::S2970C8(){ note_ctor("S2970C8", this);} // tgen

static void Test_S2970C8()
{
  extern Class_Descriptor cd_S2970C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2970C8, buf);
    S2970C8 *dp, &lv = *(dp=new (buf) S2970C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2970C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C8)");
    check_base_class_offset(lv, (S2121C28*), 0, "S2970C8");
    check_base_class_offset(lv, (S2970C9*), 0, "S2970C8");
    check_base_class_offset(lv, (S2121C38*), 0, "S2970C8");
    test_class_info(&lv, &cd_S2970C8);
    dp->~S2970C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C8(Test_S2970C8, "S2970C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2970C8C1Ev();
extern void _ZN7S2970C8D1Ev();
Name_Map name_map_S2970C8[] = {
  NSPAIR(_ZN7S2970C8C1Ev),
  NSPAIR(_ZN7S2970C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S2970C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2970C8[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S2970C8[];
static  VTT_ENTRY vtt_S2970C8[] = {
  {&(_ZTV7S2970C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
Class_Descriptor cd_S2970C8 = {  "S2970C8", // class name
  bases_S2970C8, 3,
  &(vtc_S2970C8[0]), // expected_vtbl_contents
  &(vtt_S2970C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2970C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2970C8),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C8),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C6  : S2121C28 , S2970C8 {
  virtual void  v2(); // _ZN7S2970C62v2Ev
  ~S2970C6(); // tgen
  S2970C6(); // tgen
};
//SIG(-1 S2970C6) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S2970C6 ::v2(){vfunc_called(this, "_ZN7S2970C62v2Ev");}
S2970C6 ::~S2970C6(){ note_dtor("S2970C6", this);} // tgen
S2970C6 ::S2970C6(){ note_ctor("S2970C6", this);} // tgen

static void Test_S2970C6()
{
  extern Class_Descriptor cd_S2970C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2970C6, buf);
    S2970C6 *dp, &lv = *(dp=new (buf) S2970C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2970C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C6)");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S2970C6");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*), ABISELECT(8,4), "S2970C6");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*), 0, "S2970C6");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*), 0, "S2970C6");
    check_base_class_offset(lv, (S2970C8*), 0, "S2970C6");
    test_class_info(&lv, &cd_S2970C6);
    dp->~S2970C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C6(Test_S2970C6, "S2970C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2970C6C1Ev();
extern void _ZN7S2970C6D1Ev();
Name_Map name_map_S2970C6[] = {
  NSPAIR(_ZN7S2970C6C1Ev),
  NSPAIR(_ZN7S2970C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
static Base_Class bases_S2970C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2970C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2970C6[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY vtc_S2970C6[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2970C6[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__7S2970C6[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C6[] = {
  {&(_ZTV7S2970C6[4]),  4,6},
  {&(_tg__ZTV7S2970C8__7S2970C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
Class_Descriptor cd_S2970C6 = {  "S2970C6", // class name
  bases_S2970C6, 5,
  &(vtc_S2970C6[0]), // expected_vtbl_contents
  &(vtt_S2970C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2970C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2970C6),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C6),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C5  : virtual S2970C6 {
  int s2970c5f0;
  ~S2970C5(); // tgen
  S2970C5(); // tgen
};
//SIG(-1 S2970C5) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S2970C5 ::~S2970C5(){ note_dtor("S2970C5", this);} // tgen
S2970C5 ::S2970C5(){ note_ctor("S2970C5", this);} // tgen

static void Test_S2970C5()
{
  extern Class_Descriptor cd_S2970C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2970C5, buf);
    S2970C5 *dp, &lv = *(dp=new (buf) S2970C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2970C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C5)");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), 0, "S2970C5");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), ABISELECT(12,8), "S2970C5");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), 0, "S2970C5");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), 0, "S2970C5");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), 0, "S2970C5");
    check_base_class_offset(lv, (S2970C6*), 0, "S2970C5");
    check_field_offset(lv, s2970c5f0, ABISELECT(8,4), "S2970C5.s2970c5f0");
    test_class_info(&lv, &cd_S2970C5);
    dp->~S2970C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C5(Test_S2970C5, "S2970C5", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S2970C5C1Ev();
extern void _ZN7S2970C5D1Ev();
Name_Map name_map_S2970C5[] = {
  NSPAIR(_ZN7S2970C5C1Ev),
  NSPAIR(_ZN7S2970C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
static Base_Class bases_S2970C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2970C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2970C5[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY vtc_S2970C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2970C5[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__7S2970C5[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__7S2970C5[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C5[] = {
  {&(_ZTV7S2970C5[7]),  7,9},
  {&(_ZTV7S2970C5[7]),  7,9},
  {&(_tg__ZTV7S2970C6__7S2970C5[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__7S2970C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
Class_Descriptor cd_S2970C5 = {  "S2970C5", // class name
  bases_S2970C5, 6,
  &(vtc_S2970C5[0]), // expected_vtbl_contents
  &(vtt_S2970C5[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S2970C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2970C5),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C5),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C4  : S2970C5 , virtual S2970C9 {
  __tsu64 s2970c4f0:1;
  ~S2970C4(); // tgen
  S2970C4(); // tgen
};
//SIG(-1 S2970C4) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S2970C4 ::~S2970C4(){ note_dtor("S2970C4", this);} // tgen
S2970C4 ::S2970C4(){ note_ctor("S2970C4", this);} // tgen

static void Test_S2970C4()
{
  extern Class_Descriptor cd_S2970C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2970C4, buf);
    S2970C4 *dp, &lv = *(dp=new (buf) S2970C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2970C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C4)");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), 0, "S2970C4");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), ABISELECT(13,9), "S2970C4");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), 0, "S2970C4");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), 0, "S2970C4");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), 0, "S2970C4");
    check_base_class_offset(lv, (S2970C6*)(S2970C5*), 0, "S2970C4");
    check_base_class_offset(lv, (S2970C5*), 0, "S2970C4");
    /*is_ambiguous_... S2970C4::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*), ABISELECT(16,12), "S2970C4");
    set_bf_and_test(lv, s2970c4f0, ABISELECT(12,8), 0, 1, 1, "S2970C4");
    test_class_info(&lv, &cd_S2970C4);
    dp->~S2970C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C4(Test_S2970C4, "S2970C4", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S2970C4C1Ev();
extern void _ZN7S2970C4D1Ev();
Name_Map name_map_S2970C4[] = {
  NSPAIR(_ZN7S2970C4C1Ev),
  NSPAIR(_ZN7S2970C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C5;
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
static Base_Class bases_S2970C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2970C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2970C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2970C9,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2970C4[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C4[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C4[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S2970C4[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S2970C4[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C5__7S2970C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__7S2970C4[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__7S2970C4[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C4[] = {
  {&(_ZTV7S2970C4[8]),  8,14},
  {&(_tg__ZTV7S2970C5__7S2970C4[7]),  7,9},
  {&(_tg__ZTV7S2970C5__7S2970C4[7]),  7,9},
  {&(_ZTV7S2970C4[8]),  8,14},
  {&(_ZTV7S2970C4[13]),  13,14},
  {&(_tg__ZTV7S2970C6__7S2970C4[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__7S2970C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S2970C4[];
extern  VTBL_ENTRY _ZTV7S2970C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C4[];
Class_Descriptor cd_S2970C4 = {  "S2970C4", // class name
  bases_S2970C4, 8,
  &(vtc_S2970C4[0]), // expected_vtbl_contents
  &(vtt_S2970C4[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S2970C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2970C4),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C4),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C13  : S2970C8 , S2970C9 {
  ~S2970C13(); // tgen
  S2970C13(); // tgen
};
//SIG(-1 S2970C13) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S2970C13 ::~S2970C13(){ note_dtor("S2970C13", this);} // tgen
S2970C13 ::S2970C13(){ note_ctor("S2970C13", this);} // tgen

static void Test_S2970C13()
{
  extern Class_Descriptor cd_S2970C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2970C13, buf);
    S2970C13 *dp, &lv = *(dp=new (buf) S2970C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2970C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C13)");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*), 0, "S2970C13");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*), 0, "S2970C13");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*), 0, "S2970C13");
    check_base_class_offset(lv, (S2970C8*), 0, "S2970C13");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*), ABISELECT(8,4), "S2970C13");
    test_class_info(&lv, &cd_S2970C13);
    dp->~S2970C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C13(Test_S2970C13, "S2970C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2970C13C1Ev();
extern void _ZN8S2970C13D1Ev();
Name_Map name_map_S2970C13[] = {
  NSPAIR(_ZN8S2970C13C1Ev),
  NSPAIR(_ZN8S2970C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
static Base_Class bases_S2970C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2970C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2970C9,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C13[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C13[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__8S2970C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C13[] = {
  {&(_ZTV8S2970C13[4]),  4,8},
  {&(_tg__ZTV7S2970C8__8S2970C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
Class_Descriptor cd_S2970C13 = {  "S2970C13", // class name
  bases_S2970C13, 5,
  &(vtc_S2970C13[0]), // expected_vtbl_contents
  &(vtt_S2970C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2970C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2970C13),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C13),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C14  : S2970C9 , S2121C38 , virtual S2121C28 {
  ~S2970C14(); // tgen
  S2970C14(); // tgen
};
//SIG(-1 S2970C14) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S2970C14 ::~S2970C14(){ note_dtor("S2970C14", this);} // tgen
S2970C14 ::S2970C14(){ note_ctor("S2970C14", this);} // tgen

static void Test_S2970C14()
{
  extern Class_Descriptor cd_S2970C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2970C14, buf);
    S2970C14 *dp, &lv = *(dp=new (buf) S2970C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2970C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C14)");
    check_base_class_offset(lv, (S2970C9*), 0, "S2970C14");
    check_base_class_offset(lv, (S2121C38*), 0, "S2970C14");
    check_base_class_offset(lv, (S2121C28*), 0, "S2970C14");
    test_class_info(&lv, &cd_S2970C14);
    dp->~S2970C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C14(Test_S2970C14, "S2970C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S2970C14C1Ev();
extern void _ZN8S2970C14D1Ev();
Name_Map name_map_S2970C14[] = {
  NSPAIR(_ZN8S2970C14C1Ev),
  NSPAIR(_ZN8S2970C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S2970C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C14[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C14[];
static  VTT_ENTRY vtt_S2970C14[] = {
  {&(_ZTV8S2970C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
Class_Descriptor cd_S2970C14 = {  "S2970C14", // class name
  bases_S2970C14, 3,
  &(vtc_S2970C14[0]), // expected_vtbl_contents
  &(vtt_S2970C14[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S2970C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2970C14),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C14),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C12  : virtual S2121C28 , virtual S2970C13 , virtual S2970C6 , virtual S2970C14 , S2970C9 {
  ~S2970C12(); // tgen
  S2970C12(); // tgen
};
//SIG(-1 S2970C12) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S2970C12 ::~S2970C12(){ note_dtor("S2970C12", this);} // tgen
S2970C12 ::S2970C12(){ note_ctor("S2970C12", this);} // tgen

static void Test_S2970C12()
{
  extern Class_Descriptor cd_S2970C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S2970C12, buf);
    S2970C12 *dp, &lv = *(dp=new (buf) S2970C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S2970C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C12)");
    /*is_ambiguous_... S2970C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S2970C12");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C13*), 0, "S2970C12");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), 0, "S2970C12");
    check_base_class_offset(lv, (S2121C28*)(S2970C14*), 0, "S2970C12");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C13*), ABISELECT(8,4), "S2970C12");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C13*), 0, "S2970C12");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), 0, "S2970C12");
    check_base_class_offset(lv, (S2970C8*)(S2970C13*), ABISELECT(8,4), "S2970C12");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C13*), ABISELECT(16,8), "S2970C12");
    check_base_class_offset(lv, (S2970C13*), ABISELECT(8,4), "S2970C12");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), ABISELECT(24,12), "S2970C12");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), ABISELECT(24,12), "S2970C12");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), ABISELECT(24,12), "S2970C12");
    check_base_class_offset(lv, (S2970C6*), ABISELECT(24,12), "S2970C12");
    check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(32,16), "S2970C12");
    check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(32,16), "S2970C12");
    check_base_class_offset(lv, (S2970C14*), ABISELECT(32,16), "S2970C12");
    /*is_ambiguous_... S2970C12::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*), 0, "S2970C12");
    test_class_info(&lv, &cd_S2970C12);
    dp->~S2970C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C12(Test_S2970C12, "S2970C12", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S2970C12C1Ev();
extern void _ZN8S2970C12D1Ev();
Name_Map name_map_S2970C12[] = {
  NSPAIR(_ZN8S2970C12C1Ev),
  NSPAIR(_ZN8S2970C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C13;
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
static Base_Class bases_S2970C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2970C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C13,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C28,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2970C6,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C9,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C12[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C12[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C12[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C13__8S2970C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__A1__8S2970C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C12[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C12[] = {
  {&(_ZTV8S2970C12[7]),  7,30},
  {&(_ZTV8S2970C12[13]),  13,30},
  {&(_ZTV8S2970C12[16]),  16,30},
  {&(_ZTV8S2970C12[23]),  23,30},
  {&(_ZTV8S2970C12[29]),  29,30},
  {&(_tg__ZTV8S2970C13__8S2970C12[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C13__8S2970C12[4]),  4,5},
  {&(_tg__ZTV7S2970C6__8S2970C12[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__A1__8S2970C12[4]),  4,5},
  {&(_tg__ZTV8S2970C14__8S2970C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2970C12[];
extern  VTBL_ENTRY _ZTV8S2970C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C12[];
Class_Descriptor cd_S2970C12 = {  "S2970C12", // class name
  bases_S2970C12, 14,
  &(vtc_S2970C12[0]), // expected_vtbl_contents
  &(vtt_S2970C12[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S2970C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2970C12),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C12),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C11  : S2970C12 , virtual S2121C24 , S2970C8 , S2121C38 , S2970C14 {
  virtual  ~S2970C11(); // _ZN8S2970C11D2Ev
  S2970C11(); // tgen
};
//SIG(-1 S2970C11) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S2970C11 ::~S2970C11(){ note_dtor("S2970C11", this);}
S2970C11 ::S2970C11(){ note_ctor("S2970C11", this);} // tgen

static void Test_S2970C11()
{
  extern Class_Descriptor cd_S2970C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S2970C11, buf);
    S2970C11 *dp, &lv = *(dp=new (buf) S2970C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S2970C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C11)");
    /*is_ambiguous_... S2970C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C12*), 0, "S2970C11");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C13*), 0, "S2970C11");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C8*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*), 0, "S2970C11");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C13*), ABISELECT(24,12), "S2970C11");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C13*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), ABISELECT(40,20), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C8*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2970C8*)(S2970C13*), ABISELECT(24,12), "S2970C11");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C13*), ABISELECT(32,16), "S2970C11");
    check_base_class_offset(lv, (S2970C13*)(S2970C12*), ABISELECT(24,12), "S2970C11");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), ABISELECT(40,20), "S2970C11");
    check_base_class_offset(lv, (S2970C6*)(S2970C12*), ABISELECT(40,20), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(48,24), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(48,24), "S2970C11");
    check_base_class_offset(lv, (S2970C14*)(S2970C12*), ABISELECT(48,24), "S2970C11");
    /*is_ambiguous_... S2970C12::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C12*), 0, "S2970C11");
    check_base_class_offset(lv, (S2970C12*), 0, "S2970C11");
    check_base_class_offset(lv, (S2121C24*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C8*), ABISELECT(8,4), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C8*), ABISELECT(8,4), "S2970C11");
    /*is_ambiguous_... S2970C11::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(16,8), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(16,8), "S2970C11");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C14*), ABISELECT(16,8), "S2970C11");
    test_class_info(&lv, &cd_S2970C11);
    dp->~S2970C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C11(Test_S2970C11, "S2970C11", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S2970C11C1Ev();
extern void _ZN8S2970C11D2Ev();
Name_Map name_map_S2970C11[] = {
  NSPAIR(_ZN8S2970C11C1Ev),
  NSPAIR(_ZN8S2970C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C13;
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C12;
extern VTBL_ENTRY _ZTI8S2970C12[];
extern  VTBL_ENTRY _ZTV8S2970C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C12[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
static Base_Class bases_S2970C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2970C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C13,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2970C6,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2970C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2970C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C11[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN8S2970C11D1Ev();
extern void _ZN8S2970C11D0Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C11[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C11[];
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C12__8S2970C11[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C12__8S2970C11[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C12__8S2970C11[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C12__8S2970C11[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C12__8S2970C11[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__A2__8S2970C11[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__A__8S2970C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C11[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C13__8S2970C11[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C11[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__A1__8S2970C11[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C11[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C11[] = {
  {&(_ZTV8S2970C11[8]),  8,42},
  {&(_tg__ZTV8S2970C12__8S2970C11[7]),  7,8},
  {&(_tg__ZTV8S2970C13__8S2970C12__8S2970C11[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C12__8S2970C11[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C12__8S2970C11[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C12__8S2970C11[4]),  4,5},
  {&(_tg__ZTV7S2970C8__A2__8S2970C11[4]),  4,5},
  {&(_tg__ZTV8S2970C14__A__8S2970C11[3]),  3,4},
  {&(_ZTV8S2970C11[25]),  25,42},
  {&(_ZTV8S2970C11[28]),  28,42},
  {&(_ZTV8S2970C11[35]),  35,42},
  {&(_ZTV8S2970C11[41]),  41,42},
  {&(_ZTV8S2970C11[15]),  15,42},
  {&(_ZTV8S2970C11[19]),  19,42},
  {&(_tg__ZTV8S2970C13__8S2970C11[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C13__8S2970C11[4]),  4,5},
  {&(_tg__ZTV7S2970C6__8S2970C11[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__A1__8S2970C11[4]),  4,5},
  {&(_tg__ZTV8S2970C14__8S2970C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2970C11[];
extern  VTBL_ENTRY _ZTV8S2970C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C11[];
Class_Descriptor cd_S2970C11 = {  "S2970C11", // class name
  bases_S2970C11, 22,
  &(vtc_S2970C11[0]), // expected_vtbl_contents
  &(vtt_S2970C11[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S2970C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2970C11),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C11),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C10  : S2970C5 , S2970C11 {
  int s2970c10f0;
  virtual  ~S2970C10(); // _ZN8S2970C10D2Ev
  S2970C10(); // tgen
};
//SIG(-1 S2970C10) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} BC8{ BC9{ VBC4 VBC10{ BC5 BC6} VBC3 VBC11{ BC6 BC7 VBC4} BC6} VBC12{ m} BC5 BC7 BC11 vd} vd Fi}


 S2970C10 ::~S2970C10(){ note_dtor("S2970C10", this);}
S2970C10 ::S2970C10(){ note_ctor("S2970C10", this);} // tgen

static void Test_S2970C10()
{
  extern Class_Descriptor cd_S2970C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S2970C10, buf);
    S2970C10 *dp, &lv = *(dp=new (buf) S2970C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S2970C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C10)");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), 0, "S2970C10");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), ABISELECT(44,24), "S2970C10");
    /*is_ambiguous_... S2970C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C12*)(S2970C11*), ABISELECT(44,24), "S2970C10");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C13*), ABISELECT(44,24), "S2970C10");
    /*is_ambiguous_... S2970C10::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*), ABISELECT(44,24), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C11*), ABISELECT(44,24), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*)(S2970C11*), ABISELECT(44,24), "S2970C10");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), 0, "S2970C10");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), 0, "S2970C10");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C13*), 0, "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C11*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C6*)(S2970C5*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C6*)(S2970C12*)(S2970C11*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C5*), 0, "S2970C10");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C13*), ABISELECT(48,24), "S2970C10");
    check_base_class_offset(lv, (S2970C8*)(S2970C13*), ABISELECT(48,24), "S2970C10");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C13*), ABISELECT(56,28), "S2970C10");
    check_base_class_offset(lv, (S2970C13*)(S2970C12*)(S2970C11*), ABISELECT(48,24), "S2970C10");
    /*is_ambiguous_... S2970C10::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(64,32), "S2970C10");
    /*is_ambiguous_... S2970C10::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(64,32), "S2970C10");
    check_base_class_offset(lv, (S2970C14*)(S2970C12*)(S2970C11*), ABISELECT(64,32), "S2970C10");
    /*is_ambiguous_... S2970C12::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C12*)(S2970C11*), ABISELECT(16,8), "S2970C10");
    check_base_class_offset(lv, (S2970C12*)(S2970C11*), ABISELECT(16,8), "S2970C10");
    check_base_class_offset(lv, (S2121C24*)(S2970C11*), 0, "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C11*), ABISELECT(24,12), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C8*)(S2970C11*), ABISELECT(24,12), "S2970C10");
    /*is_ambiguous_... S2970C11::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C11*), ABISELECT(16,8), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*)(S2970C11*), ABISELECT(32,16), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*)(S2970C11*), ABISELECT(32,16), "S2970C10");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C14*)(S2970C11*), ABISELECT(32,16), "S2970C10");
    check_base_class_offset(lv, (S2970C11*), ABISELECT(16,8), "S2970C10");
    check_field_offset(lv, s2970c10f0, ABISELECT(40,20), "S2970C10.s2970c10f0");
    test_class_info(&lv, &cd_S2970C10);
    dp->~S2970C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C10(Test_S2970C10, "S2970C10", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S2970C10C1Ev();
extern void _ZN8S2970C10D2Ev();
Name_Map name_map_S2970C10[] = {
  NSPAIR(_ZN8S2970C10C1Ev),
  NSPAIR(_ZN8S2970C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C5;
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C13;
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C12;
extern VTBL_ENTRY _ZTI8S2970C12[];
extern  VTBL_ENTRY _ZTV8S2970C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C12[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C11;
extern VTBL_ENTRY _ZTI8S2970C11[];
extern  VTBL_ENTRY _ZTV8S2970C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C11[];
static Base_Class bases_S2970C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(44,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2970C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2970C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2970C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2970C9,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(56,28), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2970C13,    ABISELECT(48,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(64,32), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2970C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2970C11,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2970C10[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN8S2970C10D1Ev();
extern void _ZN8S2970C10D0Ev();
extern void _ZN7S2970C92v1Ev();
extern void ABISELECT(_ZThn16_N8S2970C10D1Ev,_ZThn8_N8S2970C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S2970C10D0Ev,_ZThn8_N8S2970C10D0Ev)();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C10[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S2970C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S2970C10D1Ev,_ZThn8_N8S2970C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S2970C10D0Ev,_ZThn8_N8S2970C10D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(12,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-20,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV8S2970C10[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C5__8S2970C10[] = {
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN8S2970C11D1Ev();
extern void _ZN8S2970C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C11__8S2970C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D0Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C128S2970C11__8S2970C10[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C128S2970C11__8S2970C10[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C128S2970C11__8S2970C10[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C128S2970C11__8S2970C10[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C128S2970C11__8S2970C10[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C11__A2__8S2970C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C148S2970C11__A1__8S2970C10[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C11__8S2970C10[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C11__8S2970C10[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C11__8S2970C10[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C11__8S2970C10[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__A2__8S2970C11__8S2970C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__A__8S2970C11__8S2970C10[] = {
  ABISELECT(12,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C10[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__8S2970C10[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C13__A1__8S2970C10[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C10[] = {
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C10[] = {
  {&(_ZTV8S2970C10[10]),  10,48},
  {&(_tg__ZTV7S2970C5__8S2970C10[7]),  7,9},
  {&(_tg__ZTV7S2970C5__8S2970C10[7]),  7,9},
  {&(_tg__ZTV8S2970C11__8S2970C10[8]),  8,11},
  {&(_tg__ZTV8S2970C128S2970C11__8S2970C10[7]),  7,8},
  {&(_tg__ZTV8S2970C13__8S2970C128S2970C11__8S2970C10[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C128S2970C11__8S2970C10[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C128S2970C11__8S2970C10[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C128S2970C11__8S2970C10[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C11__A2__8S2970C10[4]),  4,5},
  {&(_tg__ZTV8S2970C148S2970C11__A1__8S2970C10[3]),  3,4},
  {&(_tg__ZTV8S2970C13__8S2970C11__8S2970C10[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C11__8S2970C10[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C11__8S2970C10[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C11__8S2970C10[4]),  4,5},
  {&(_tg__ZTV7S2970C8__A2__8S2970C11__8S2970C10[4]),  4,5},
  {&(_tg__ZTV8S2970C14__A__8S2970C11__8S2970C10[3]),  3,4},
  {&(_ZTV8S2970C10[10]),  10,48},
  {&(_ZTV8S2970C10[22]),  22,48},
  {&(_ZTV8S2970C10[39]),  39,48},
  {&(_ZTV8S2970C10[42]),  42,48},
  {&(_ZTV8S2970C10[47]),  47,48},
  {&(_ZTV8S2970C10[29]),  29,48},
  {&(_ZTV8S2970C10[33]),  33,48},
  {&(_tg__ZTV7S2970C6__8S2970C10[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__8S2970C10[4]),  4,5},
  {&(_tg__ZTV8S2970C13__8S2970C10[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C13__A1__8S2970C10[4]),  4,5},
  {&(_tg__ZTV8S2970C14__8S2970C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S2970C10[];
extern  VTBL_ENTRY _ZTV8S2970C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C10[];
Class_Descriptor cd_S2970C10 = {  "S2970C10", // class name
  bases_S2970C10, 24,
  &(vtc_S2970C10[0]), // expected_vtbl_contents
  &(vtt_S2970C10[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S2970C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2970C10),48, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2970C10),29, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2970C1  : S2970C2_nt , virtual S2970C4 , virtual S2970C10 , virtual S2121C21 {
  virtual  ~S2970C1(); // _ZN7S2970C1D2Ev
  S2970C1(); // tgen
};
//SIG(1 S2970C1) C1{ BC2{ BC3{ m}} VBC4{ BC5{ VBC6{ BC7{ m} BC8{ VBC7 BC9{ v1} VBC3} v2} Fi} VBC9 FL:1} VBC10{ BC5 BC11{ BC12{ VBC7 VBC13{ BC8 BC9} VBC6 VBC14{ BC9 BC3 VBC7} BC9} VBC15{ m} BC8 BC3 BC14 vd} vd Fi} VBC16{ m} vd}


 S2970C1 ::~S2970C1(){ note_dtor("S2970C1", this);}
S2970C1 ::S2970C1(){ note_ctor("S2970C1", this);} // tgen

static void Test_S2970C1()
{
  extern Class_Descriptor cd_S2970C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S2970C1, buf);
    S2970C1 *dp, &lv = *(dp=new (buf) S2970C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S2970C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2970C1)");
    check_base_class_offset(lv, (S2121C38*)(S2970C2_nt*), 0, "S2970C1");
    check_base_class_offset(lv, (S2970C2_nt*), 0, "S2970C1");
    /*is_ambiguous_... S2970C6::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C6*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C6*), 0, "S2970C1");
    /*is_ambiguous_... S2970C12::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C12*)(S2970C11*)(S2970C10*), 0, "S2970C1");
    check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C13*), 0, "S2970C1");
    /*is_ambiguous_... S2970C1::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*), 0, "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C8*)(S2970C11*)(S2970C10*), 0, "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C28*)(S2970C14*)(S2970C11*)(S2970C10*), 0, "S2970C1");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C6*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C6*), ABISELECT(21,13), "S2970C1");
    check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C13*), ABISELECT(21,13), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C8*)(S2970C11*)(S2970C10*), ABISELECT(21,13), "S2970C1");
    check_base_class_offset(lv, (S2970C8*)(S2970C6*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C6*)(S2970C5*)(S2970C4*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C6*)(S2970C5*)(S2970C10*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C6*)(S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C5*)(S2970C4*), ABISELECT(8,4), "S2970C1");
    /*is_ambiguous_... S2970C4::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C4*), 0, "S2970C1");
    check_base_class_offset(lv, (S2970C4*), ABISELECT(8,4), "S2970C1");
    check_base_class_offset(lv, (S2970C5*)(S2970C10*), ABISELECT(24,16), "S2970C1");
    check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C13*), ABISELECT(72,40), "S2970C1");
    check_base_class_offset(lv, (S2970C8*)(S2970C13*), ABISELECT(72,40), "S2970C1");
    /*is_ambiguous_... S2970C13::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C13*), ABISELECT(80,44), "S2970C1");
    check_base_class_offset(lv, (S2970C13*)(S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(72,40), "S2970C1");
    /*is_ambiguous_... S2970C1::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*), ABISELECT(88,48), "S2970C1");
    /*is_ambiguous_... S2970C1::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*), ABISELECT(88,48), "S2970C1");
    check_base_class_offset(lv, (S2970C14*)(S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(88,48), "S2970C1");
    /*is_ambiguous_... S2970C12::S2970C9 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(40,24), "S2970C1");
    check_base_class_offset(lv, (S2970C12*)(S2970C11*)(S2970C10*), ABISELECT(40,24), "S2970C1");
    check_base_class_offset(lv, (S2121C24*)(S2970C11*)(S2970C10*), 0, "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C8*)(S2970C11*)(S2970C10*), ABISELECT(48,28), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C8 */ AMB_check_base_class_offset(lv, (S2970C8*)(S2970C11*)(S2970C10*), ABISELECT(48,28), "S2970C1");
    /*is_ambiguous_... S2970C11::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C11*)(S2970C10*), ABISELECT(40,24), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C9*)(S2970C14*)(S2970C11*)(S2970C10*), ABISELECT(56,32), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2121C38*)(S2970C14*)(S2970C11*)(S2970C10*), ABISELECT(56,32), "S2970C1");
    /*is_ambiguous_... S2970C11::S2970C14 */ AMB_check_base_class_offset(lv, (S2970C14*)(S2970C11*)(S2970C10*), ABISELECT(56,32), "S2970C1");
    check_base_class_offset(lv, (S2970C11*)(S2970C10*), ABISELECT(40,24), "S2970C1");
    check_base_class_offset(lv, (S2970C10*), ABISELECT(24,16), "S2970C1");
    check_base_class_offset(lv, (S2121C21*), 0, "S2970C1");
    test_class_info(&lv, &cd_S2970C1);
    dp->~S2970C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2970C1(Test_S2970C1, "S2970C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S2970C1C1Ev();
extern void _ZN7S2970C1D2Ev();
Name_Map name_map_S2970C1[] = {
  NSPAIR(_ZN7S2970C1C1Ev),
  NSPAIR(_ZN7S2970C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C2_nt;
extern VTBL_ENTRY _ZTI10S2970C2_nt[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C6;
extern VTBL_ENTRY _ZTI7S2970C6[];
extern  VTBL_ENTRY _ZTV7S2970C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C6[];
extern Class_Descriptor cd_S2970C5;
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C4;
extern VTBL_ENTRY _ZTI7S2970C4[];
extern  VTBL_ENTRY _ZTV7S2970C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C4[];
extern Class_Descriptor cd_S2970C5;
extern VTBL_ENTRY _ZTI7S2970C5[];
extern  VTBL_ENTRY _ZTV7S2970C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C5[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C13;
extern VTBL_ENTRY _ZTI8S2970C13[];
extern  VTBL_ENTRY _ZTV8S2970C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C13[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C12;
extern VTBL_ENTRY _ZTI8S2970C12[];
extern  VTBL_ENTRY _ZTV8S2970C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C12[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2970C8;
extern VTBL_ENTRY _ZTI7S2970C8[];
extern  VTBL_ENTRY _ZTV7S2970C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C8[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C9;
extern VTBL_ENTRY _ZTI7S2970C9[];
extern  VTBL_ENTRY _ZTV7S2970C9[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2970C14;
extern VTBL_ENTRY _ZTI8S2970C14[];
extern  VTBL_ENTRY _ZTV8S2970C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C14[];
extern Class_Descriptor cd_S2970C11;
extern VTBL_ENTRY _ZTI8S2970C11[];
extern  VTBL_ENTRY _ZTV8S2970C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C11[];
extern Class_Descriptor cd_S2970C10;
extern VTBL_ENTRY _ZTI8S2970C10[];
extern  VTBL_ENTRY _ZTV8S2970C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2970C10[];
extern Class_Descriptor cd_S2121C21;
extern VTBL_ENTRY _ZTI8S2121C21[];
static Base_Class bases_S2970C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2970C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(21,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2970C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2970C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S2970C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2970C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2970C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2970C5,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(80,44), //bcp->offset
    67, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2970C13,    ABISELECT(72,40), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(88,48), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2970C12,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S2970C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2970C8,    ABISELECT(48,28), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2970C9,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2970C14,    ABISELECT(56,32), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S2970C11,    ABISELECT(40,24), //bcp->offset
    41, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2970C10,    ABISELECT(24,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2970C1[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C1D1Ev();
extern void _ZN7S2970C1D0Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void ABISELECT(_ZTv0_n88_N7S2970C1D1Ev,_ZTv0_n44_N7S2970C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S2970C1D1Ev,_ZThn16_N7S2970C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S2970C1D0Ev,_ZTv0_n44_N7S2970C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S2970C1D0Ev,_ZThn16_N7S2970C1D0Ev)() __attribute__((weak));
extern void _ZN7S2970C92v1Ev();
extern void ABISELECT(_ZTvn16_n88_N7S2970C1D1Ev,_ZTvn8_n44_N7S2970C1D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N7S2970C1D0Ev,_ZTvn8_n44_N7S2970C1D0Ev)();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY vtc_S2970C1[] = {
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(72,40),
  ABISELECT(24,16),
  0,
  ABISELECT(21,13),
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2970C1D0Ev,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  -3,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S2970C1D1Ev,_ZTv0_n44_N7S2970C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S2970C1D0Ev,_ZTv0_n44_N7S2970C1D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(48,24),
  ABISELECT(-32,-20),
  ABISELECT(-19,-11),
  ABISELECT(32,16),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S2970C1D1Ev,_ZTvn8_n44_N7S2970C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N7S2970C1D0Ev,_ZTvn8_n44_N7S2970C1D0Ev),
  ABISELECT(-27,-15),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2970C1[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S2970C1[];
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C4__7S2970C1[] = {
  ABISELECT(-8,-4),
  0,
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C4[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C57S2970C4__7S2970C1[] = {
  0,
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C9__A1__7S2970C4__7S2970C1[] = {
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S2970C4[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__7S2970C1[] = {
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C6[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C87S2970C6__7S2970C1[] = {
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
extern void _ZN8S2970C10D1Ev();
extern void _ZN8S2970C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C10__7S2970C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  -3,
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
  (VTBL_ENTRY)&_ZN8S2970C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C10D0Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C58S2970C10__A1__7S2970C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  -3,
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__7S2970C58S2970C10__A1__7S2970C1[] = {
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S2970C5[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN8S2970C11D1Ev();
extern void _ZN8S2970C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(48,24),
  ABISELECT(-32,-20),
  ABISELECT(-19,-11),
  ABISELECT(32,16),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2970C11D0Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C128S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(48,24),
  ABISELECT(-32,-20),
  ABISELECT(-19,-11),
  ABISELECT(32,16),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C128S2970C118S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C128S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C128S2970C118S2970C10__7S2970C1[] = {
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C128S2970C118S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-88,-48),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C12[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C118S2970C10__A2__7S2970C1[] = {
  ABISELECT(-27,-15),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C148S2970C118S2970C10__A1__7S2970C1[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C118S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A1__8S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C118S2970C10__7S2970C1[] = {
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C118S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-88,-48),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C8__A2__8S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-27,-15),
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__A__8S2970C118S2970C10__7S2970C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C11[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void _ZN7S2970C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C6__8S2970C10__7S2970C1[] = {
  0,
  0,
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&_ZN7S2970C62v2Ev,
};
extern void _ZN7S2970C92v1Ev();
extern void ABISELECT(_ZThn16_N8S2970C10D1Ev,_ZThn8_N8S2970C10D1Ev)();
extern void ABISELECT(_ZThn16_N8S2970C10D0Ev,_ZThn8_N8S2970C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2970C11__8S2970C10__7S2970C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(48,24),
  ABISELECT(-32,-20),
  ABISELECT(-19,-11),
  ABISELECT(32,16),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S2970C10D1Ev,_ZThn8_N8S2970C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S2970C10D0Ev,_ZThn8_N8S2970C10D0Ev),
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__8S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C98S2970C13__A2__8S2970C10__7S2970C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__8S2970C10__7S2970C1[] = {
  0,
  ABISELECT(-88,-48),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C11__A2__8S2970C10__7S2970C1[] = {
  ABISELECT(-27,-15),
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C148S2970C11__A1__8S2970C10__7S2970C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S2970C10[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C13__7S2970C1[] = {
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C13[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2970C88S2970C13__A1__7S2970C1[] = {
  ABISELECT(-51,-27),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S2970C8[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
extern void _ZN7S2970C92v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2970C14__7S2970C1[] = {
  ABISELECT(-88,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S2970C14[0]),
  (VTBL_ENTRY)&_ZN7S2970C92v1Ev,
};
static  VTT_ENTRY vtt_S2970C1[] = {
  {&(_ZTV7S2970C1[13]),  13,75},
  {&(_ZTV7S2970C1[24]),  24,75},
  {&(_ZTV7S2970C1[24]),  24,75},
  {&(_ZTV7S2970C1[13]),  13,75},
  {&(_ZTV7S2970C1[37]),  37,75},
  {&(_ZTV7S2970C1[49]),  49,75},
  {&(_ZTV7S2970C1[66]),  66,75},
  {&(_ZTV7S2970C1[69]),  69,75},
  {&(_ZTV7S2970C1[74]),  74,75},
  {&(_ZTV7S2970C1[56]),  56,75},
  {&(_ZTV7S2970C1[60]),  60,75},
  {&(_tg__ZTV7S2970C4__7S2970C1[8]),  8,10},
  {&(_tg__ZTV7S2970C57S2970C4__7S2970C1[7]),  7,9},
  {&(_tg__ZTV7S2970C57S2970C4__7S2970C1[7]),  7,9},
  {&(_tg__ZTV7S2970C4__7S2970C1[8]),  8,10},
  {&(_tg__ZTV7S2970C9__A1__7S2970C4__7S2970C1[3]),  3,4},
  {&(_tg__ZTV7S2970C6__7S2970C1[4]),  4,6},
  {&(_tg__ZTV7S2970C87S2970C6__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C10__7S2970C1[10]),  10,14},
  {&(_tg__ZTV7S2970C58S2970C10__A1__7S2970C1[7]),  7,9},
  {&(_tg__ZTV7S2970C6__7S2970C58S2970C10__A1__7S2970C1[6]),  6,8},
  {&(_tg__ZTV8S2970C118S2970C10__7S2970C1[8]),  8,11},
  {&(_tg__ZTV8S2970C128S2970C118S2970C10__7S2970C1[7]),  7,8},
  {&(_tg__ZTV8S2970C13__8S2970C128S2970C118S2970C10__7S2970C1[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C128S2970C118S2970C10__7S2970C1[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C128S2970C118S2970C10__7S2970C1[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C128S2970C118S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C118S2970C10__A2__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C148S2970C118S2970C10__A1__7S2970C1[3]),  3,4},
  {&(_tg__ZTV8S2970C13__8S2970C118S2970C10__7S2970C1[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A1__8S2970C118S2970C10__7S2970C1[2]),  2,3},
  {&(_tg__ZTV7S2970C6__8S2970C118S2970C10__7S2970C1[6]),  6,8},
  {&(_tg__ZTV8S2970C14__8S2970C118S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV7S2970C8__A2__8S2970C118S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C14__A__8S2970C118S2970C10__7S2970C1[3]),  3,4},
  {&(_tg__ZTV7S2970C6__8S2970C10__7S2970C1[6]),  6,8},
  {&(_tg__ZTV8S2970C11__8S2970C10__7S2970C1[8]),  8,11},
  {&(_tg__ZTV8S2970C13__8S2970C10__7S2970C1[5]),  5,6},
  {&(_tg__ZTV7S2970C98S2970C13__A2__8S2970C10__7S2970C1[2]),  2,3},
  {&(_tg__ZTV8S2970C14__8S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C11__A2__8S2970C10__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C148S2970C11__A1__8S2970C10__7S2970C1[3]),  3,4},
  {&(_tg__ZTV8S2970C13__7S2970C1[4]),  4,5},
  {&(_tg__ZTV7S2970C88S2970C13__A1__7S2970C1[4]),  4,5},
  {&(_tg__ZTV8S2970C14__7S2970C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2970C1[];
extern  VTBL_ENTRY _ZTV7S2970C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2970C1[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S2970C1D0Ev,_ZTv0_n44_N7S2970C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2970C1D0Ev,_ZThn16_N7S2970C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S2970C1D1Ev,_ZTv0_n44_N7S2970C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S2970C1D1Ev,_ZThn16_N7S2970C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2970C1 = {  "S2970C1", // class name
  bases_S2970C1, 31,
  &(vtc_S2970C1[0]), // expected_vtbl_contents
  &(vtt_S2970C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S2970C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2970C1),75, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2970C1),45, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1682C3_nt  : S6282C14_nt {
  virtual void  v4(); // _ZN10S1682C3_nt2v4Ev
  virtual void  v5(); // _ZN10S1682C3_nt2v5Ev
  virtual void  v6(); // _ZN10S1682C3_nt2v6Ev
  virtual void  v7(); // _ZN10S1682C3_nt2v7Ev
  virtual void  v8(); // _ZN10S1682C3_nt2v8Ev
  ~S1682C3_nt(); // tgen
  S1682C3_nt(); // tgen
};
//SIG(-1 S1682C3_nt) C1{ BC2{ vd m Fi} v1 v2 v3 v4 v5}


void  S1682C3_nt ::v4(){vfunc_called(this, "_ZN10S1682C3_nt2v4Ev");}
void  S1682C3_nt ::v5(){vfunc_called(this, "_ZN10S1682C3_nt2v5Ev");}
void  S1682C3_nt ::v6(){vfunc_called(this, "_ZN10S1682C3_nt2v6Ev");}
void  S1682C3_nt ::v7(){vfunc_called(this, "_ZN10S1682C3_nt2v7Ev");}
void  S1682C3_nt ::v8(){vfunc_called(this, "_ZN10S1682C3_nt2v8Ev");}
S1682C3_nt ::~S1682C3_nt(){ note_dtor("S1682C3_nt", this);} // tgen
S1682C3_nt ::S1682C3_nt(){ note_ctor("S1682C3_nt", this);} // tgen

//skip512 S1682C3_nt

#else // __cplusplus

extern void _ZN10S1682C3_ntC1Ev();
extern void _ZN10S1682C3_ntD1Ev();
Name_Map name_map_S1682C3_nt[] = {
  NSPAIR(_ZN10S1682C3_ntC1Ev),
  NSPAIR(_ZN10S1682C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1682C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1682C3_nt[];
extern void _ZN10S1682C3_ntD1Ev();
extern void _ZN10S1682C3_ntD0Ev();
extern void _ZN10S1682C3_nt2v4Ev();
extern void _ZN10S1682C3_nt2v5Ev();
extern void _ZN10S1682C3_nt2v6Ev();
extern void _ZN10S1682C3_nt2v7Ev();
extern void _ZN10S1682C3_nt2v8Ev();
static  VTBL_ENTRY vtc_S1682C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1682C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1682C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S1682C3_nt[];
VTBL_ENTRY *P__ZTI10S1682C3_nt = _ZTI10S1682C3_nt; 
extern  VTBL_ENTRY _ZTV10S1682C3_nt[];
Class_Descriptor cd_S1682C3_nt = {  "S1682C3_nt", // class name
  bases_S1682C3_nt, 1,
  &(vtc_S1682C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1682C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1682C3_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1682C5_nt  {
  ::S21811C16 s1682c5f0;
  void *s1682c5f1[2];
  void  mf1682c5(); // _ZN10S1682C5_nt8mf1682c5Ev
};
//SIG(-1 S1682C5_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S1682C5_nt ::mf1682c5(){}

//skip512 S1682C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1682C2_nt  : S1682C3_nt {
  void *s1682c2f0[3];
  ::S1682C5_nt s1682c2f1;
  virtual void  v9(); // _ZN10S1682C2_nt2v9Ev
  virtual void  v10(); // _ZN10S1682C2_nt3v10Ev
  virtual void  v11(); // _ZN10S1682C2_nt3v11Ev
  virtual void  v12(); // _ZN10S1682C2_nt3v12Ev
  virtual void  v13(); // _ZN10S1682C2_nt3v13Ev
  virtual void  v14(); // _ZN10S1682C2_nt3v14Ev
  virtual void  v15(); // _ZN10S1682C2_nt3v15Ev
  virtual void  v16(); // _ZN10S1682C2_nt3v16Ev
  virtual void  v17(); // _ZN10S1682C2_nt3v17Ev
  virtual void  v18(); // _ZN10S1682C2_nt3v18Ev
  virtual void  v19(); // _ZN10S1682C2_nt3v19Ev
  ~S1682C2_nt(); // tgen
  S1682C2_nt(); // tgen
};
//SIG(-1 S1682C2_nt) C1{ BC2{ BC3{ vd m Fi} v12 v13 v14 v15 v16} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[3] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]}}


void  S1682C2_nt ::v9(){vfunc_called(this, "_ZN10S1682C2_nt2v9Ev");}
void  S1682C2_nt ::v10(){vfunc_called(this, "_ZN10S1682C2_nt3v10Ev");}
void  S1682C2_nt ::v11(){vfunc_called(this, "_ZN10S1682C2_nt3v11Ev");}
void  S1682C2_nt ::v12(){vfunc_called(this, "_ZN10S1682C2_nt3v12Ev");}
void  S1682C2_nt ::v13(){vfunc_called(this, "_ZN10S1682C2_nt3v13Ev");}
void  S1682C2_nt ::v14(){vfunc_called(this, "_ZN10S1682C2_nt3v14Ev");}
void  S1682C2_nt ::v15(){vfunc_called(this, "_ZN10S1682C2_nt3v15Ev");}
void  S1682C2_nt ::v16(){vfunc_called(this, "_ZN10S1682C2_nt3v16Ev");}
void  S1682C2_nt ::v17(){vfunc_called(this, "_ZN10S1682C2_nt3v17Ev");}
void  S1682C2_nt ::v18(){vfunc_called(this, "_ZN10S1682C2_nt3v18Ev");}
void  S1682C2_nt ::v19(){vfunc_called(this, "_ZN10S1682C2_nt3v19Ev");}
S1682C2_nt ::~S1682C2_nt(){ note_dtor("S1682C2_nt", this);} // tgen
S1682C2_nt ::S1682C2_nt(){ note_ctor("S1682C2_nt", this);} // tgen

//skip512 S1682C2_nt

#else // __cplusplus

extern void _ZN10S1682C2_ntC1Ev();
extern void _ZN10S1682C2_ntD1Ev();
Name_Map name_map_S1682C2_nt[] = {
  NSPAIR(_ZN10S1682C2_ntC1Ev),
  NSPAIR(_ZN10S1682C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1682C3_nt;
extern VTBL_ENTRY _ZTI10S1682C3_nt[];
extern  VTBL_ENTRY _ZTV10S1682C3_nt[];
static Base_Class bases_S1682C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1682C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1682C2_nt[];
extern void _ZN10S1682C2_ntD1Ev();
extern void _ZN10S1682C2_ntD0Ev();
extern void _ZN10S1682C3_nt2v4Ev();
extern void _ZN10S1682C3_nt2v5Ev();
extern void _ZN10S1682C3_nt2v6Ev();
extern void _ZN10S1682C3_nt2v7Ev();
extern void _ZN10S1682C3_nt2v8Ev();
extern void _ZN10S1682C2_nt2v9Ev();
extern void _ZN10S1682C2_nt3v10Ev();
extern void _ZN10S1682C2_nt3v11Ev();
extern void _ZN10S1682C2_nt3v12Ev();
extern void _ZN10S1682C2_nt3v13Ev();
extern void _ZN10S1682C2_nt3v14Ev();
extern void _ZN10S1682C2_nt3v15Ev();
extern void _ZN10S1682C2_nt3v16Ev();
extern void _ZN10S1682C2_nt3v17Ev();
extern void _ZN10S1682C2_nt3v18Ev();
extern void _ZN10S1682C2_nt3v19Ev();
static  VTBL_ENTRY vtc_S1682C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1682C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1682C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S1682C2_nt[];
VTBL_ENTRY *P__ZTI10S1682C2_nt = _ZTI10S1682C2_nt; 
extern  VTBL_ENTRY _ZTV10S1682C2_nt[];
Class_Descriptor cd_S1682C2_nt = {  "S1682C2_nt", // class name
  bases_S1682C2_nt, 2,
  &(vtc_S1682C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI10S1682C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1682C2_nt),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1682C1  : S1682C2_nt {
  void *s1682c1f0[2];
  ::S21811C2_nt s1682c1f1;
  ::S2185C10_nt s1682c1f2;
  int s1682c1f3;
  char s1682c1f4;
  virtual void  v1(); // _ZN7S1682C12v1Ev
  virtual void  v2(); // _ZN7S1682C12v2Ev
  virtual void  v3(); // _ZN7S1682C12v3Ev
  ~S1682C1(); // tgen
  S1682C1(); // tgen
};
//SIG(1 S1682C1) C1{ BC2{ BC3{ BC4{ vd m Fi} v4 v5 v6 v7 v8} v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 Fp[3] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]}} v1 v2 v3 Fp[2] FC8{ m Fp[2]} FC9{ m Fp Fi FC10{ m}} Fi Fc}


void  S1682C1 ::v1(){vfunc_called(this, "_ZN7S1682C12v1Ev");}
void  S1682C1 ::v2(){vfunc_called(this, "_ZN7S1682C12v2Ev");}
void  S1682C1 ::v3(){vfunc_called(this, "_ZN7S1682C12v3Ev");}
S1682C1 ::~S1682C1(){ note_dtor("S1682C1", this);} // tgen
S1682C1 ::S1682C1(){ note_ctor("S1682C1", this);} // tgen

static void Test_S1682C1()
{
  extern Class_Descriptor cd_S1682C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S1682C1, buf);
    S1682C1 *dp, &lv = *(dp=new (buf) S1682C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S1682C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1682C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1682C3_nt*)(S1682C2_nt*), 0, "S1682C1");
    check_base_class_offset(lv, (S1682C3_nt*)(S1682C2_nt*), 0, "S1682C1");
    check_base_class_offset(lv, (S1682C2_nt*), 0, "S1682C1");
    check_field_offset(lv, s1682c1f0, ABISELECT(80,44), "S1682C1.s1682c1f0");
    check_field_offset(lv, s1682c1f1, ABISELECT(96,52), "S1682C1.s1682c1f1");
    check_field_offset(lv, s1682c1f2, ABISELECT(112,60), "S1682C1.s1682c1f2");
    check_field_offset(lv, s1682c1f3, ABISELECT(128,72), "S1682C1.s1682c1f3");
    check_field_offset(lv, s1682c1f4, ABISELECT(132,76), "S1682C1.s1682c1f4");
    test_class_info(&lv, &cd_S1682C1);
    dp->~S1682C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1682C1(Test_S1682C1, "S1682C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S1682C1C1Ev();
extern void _ZN7S1682C1D1Ev();
Name_Map name_map_S1682C1[] = {
  NSPAIR(_ZN7S1682C1C1Ev),
  NSPAIR(_ZN7S1682C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1682C3_nt;
extern VTBL_ENTRY _ZTI10S1682C3_nt[];
extern  VTBL_ENTRY _ZTV10S1682C3_nt[];
extern Class_Descriptor cd_S1682C2_nt;
extern VTBL_ENTRY _ZTI10S1682C2_nt[];
extern  VTBL_ENTRY _ZTV10S1682C2_nt[];
static Base_Class bases_S1682C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1682C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1682C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1682C1[];
extern void _ZN7S1682C1D1Ev();
extern void _ZN7S1682C1D0Ev();
extern void _ZN10S1682C3_nt2v4Ev();
extern void _ZN10S1682C3_nt2v5Ev();
extern void _ZN10S1682C3_nt2v6Ev();
extern void _ZN10S1682C3_nt2v7Ev();
extern void _ZN10S1682C3_nt2v8Ev();
extern void _ZN10S1682C2_nt2v9Ev();
extern void _ZN10S1682C2_nt3v10Ev();
extern void _ZN10S1682C2_nt3v11Ev();
extern void _ZN10S1682C2_nt3v12Ev();
extern void _ZN10S1682C2_nt3v13Ev();
extern void _ZN10S1682C2_nt3v14Ev();
extern void _ZN10S1682C2_nt3v15Ev();
extern void _ZN10S1682C2_nt3v16Ev();
extern void _ZN10S1682C2_nt3v17Ev();
extern void _ZN10S1682C2_nt3v18Ev();
extern void _ZN10S1682C2_nt3v19Ev();
extern void _ZN7S1682C12v1Ev();
extern void _ZN7S1682C12v2Ev();
extern void _ZN7S1682C12v3Ev();
static  VTBL_ENTRY vtc_S1682C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1682C1[0]),
  (VTBL_ENTRY)&_ZN7S1682C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1682C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1682C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1682C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN7S1682C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1682C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1682C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1682C1[];
extern  VTBL_ENTRY _ZTV7S1682C1[];
Class_Descriptor cd_S1682C1 = {  "S1682C1", // class name
  bases_S1682C1, 3,
  &(vtc_S1682C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S1682C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1682C1),23, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C5  {
  virtual  ~S19580C5(); // _ZN8S19580C5D1Ev
  virtual void  v8(); // _ZN8S19580C52v8Ev
  virtual void  v9(); // _ZN8S19580C52v9Ev
  virtual void  v10(); // _ZN8S19580C53v10Ev
  virtual void  v11(); // _ZN8S19580C53v11Ev
  virtual void  v12(); // _ZN8S19580C53v12Ev
  S19580C5(); // tgen
};
//SIG(-1 S19580C5) C1{ vd v1 v2 v3 v4 v5}


 S19580C5 ::~S19580C5(){ note_dtor("S19580C5", this);}
void  S19580C5 ::v8(){vfunc_called(this, "_ZN8S19580C52v8Ev");}
void  S19580C5 ::v9(){vfunc_called(this, "_ZN8S19580C52v9Ev");}
void  S19580C5 ::v10(){vfunc_called(this, "_ZN8S19580C53v10Ev");}
void  S19580C5 ::v11(){vfunc_called(this, "_ZN8S19580C53v11Ev");}
void  S19580C5 ::v12(){vfunc_called(this, "_ZN8S19580C53v12Ev");}
S19580C5 ::S19580C5(){ note_ctor("S19580C5", this);} // tgen

static void Test_S19580C5()
{
  extern Class_Descriptor cd_S19580C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19580C5, buf);
    S19580C5 *dp, &lv = *(dp=new (buf) S19580C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19580C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C5)");
    test_class_info(&lv, &cd_S19580C5);
    dp->~S19580C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C5(Test_S19580C5, "S19580C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19580C5C1Ev();
extern void _ZN8S19580C5D1Ev();
Name_Map name_map_S19580C5[] = {
  NSPAIR(_ZN8S19580C5C1Ev),
  NSPAIR(_ZN8S19580C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19580C5[];
extern void _ZN8S19580C5D1Ev();
extern void _ZN8S19580C5D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY vtc_S19580C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C5[0]),
  (VTBL_ENTRY)&_ZN8S19580C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
Class_Descriptor cd_S19580C5 = {  "S19580C5", // class name
  0,0,//no base classes
  &(vtc_S19580C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19580C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19580C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C4  : virtual S19580C5 {
  void *s19580c4f0;
  ::S19580C5 s19580c4f1;
  void *s19580c4f2;
  virtual  ~S19580C4(); // _ZN8S19580C4D2Ev
  virtual void  v13(); // _ZN8S19580C43v13Ev
  virtual void  v14(); // _ZN8S19580C43v14Ev
  virtual void  v15(); // _ZN8S19580C43v15Ev
  S19580C4(); // tgen
};
//SIG(-1 S19580C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S19580C4 ::~S19580C4(){ note_dtor("S19580C4", this);}
void  S19580C4 ::v13(){vfunc_called(this, "_ZN8S19580C43v13Ev");}
void  S19580C4 ::v14(){vfunc_called(this, "_ZN8S19580C43v14Ev");}
void  S19580C4 ::v15(){vfunc_called(this, "_ZN8S19580C43v15Ev");}
S19580C4 ::S19580C4(){ note_ctor("S19580C4", this);} // tgen

static void Test_S19580C4()
{
  extern Class_Descriptor cd_S19580C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19580C4, buf);
    S19580C4 *dp, &lv = *(dp=new (buf) S19580C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19580C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C4)");
    check_base_class_offset(lv, (S19580C5*), 0, "S19580C4");
    check_field_offset(lv, s19580c4f0, ABISELECT(8,4), "S19580C4.s19580c4f0");
    check_field_offset(lv, s19580c4f1, ABISELECT(16,8), "S19580C4.s19580c4f1");
    check_field_offset(lv, s19580c4f2, ABISELECT(24,12), "S19580C4.s19580c4f2");
    test_class_info(&lv, &cd_S19580C4);
    dp->~S19580C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C4(Test_S19580C4, "S19580C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19580C4C1Ev();
extern void _ZN8S19580C4D2Ev();
Name_Map name_map_S19580C4[] = {
  NSPAIR(_ZN8S19580C4C1Ev),
  NSPAIR(_ZN8S19580C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
static Base_Class bases_S19580C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C4[];
extern void _ZN8S19580C4D1Ev();
extern void _ZN8S19580C4D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C4[];
static  VTT_ENTRY vtt_S19580C4[] = {
  {&(_ZTV8S19580C4[9]),  9,19},
  {&(_ZTV8S19580C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
Class_Descriptor cd_S19580C4 = {  "S19580C4", // class name
  bases_S19580C4, 1,
  &(vtc_S19580C4[0]), // expected_vtbl_contents
  &(vtt_S19580C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19580C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19580C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C3  : virtual S19580C4 {
  virtual  ~S19580C3(); // _ZN8S19580C3D2Ev
  virtual void  v16(); // _ZN8S19580C33v16Ev
  S19580C3(); // tgen
};
//SIG(-1 S19580C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S19580C3 ::~S19580C3(){ note_dtor("S19580C3", this);}
void  S19580C3 ::v16(){vfunc_called(this, "_ZN8S19580C33v16Ev");}
S19580C3 ::S19580C3(){ note_ctor("S19580C3", this);} // tgen

static void Test_S19580C3()
{
  extern Class_Descriptor cd_S19580C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19580C3, buf);
    S19580C3 *dp, &lv = *(dp=new (buf) S19580C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19580C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C3)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C3");
    check_base_class_offset(lv, (S19580C4*), ABISELECT(8,4), "S19580C3");
    test_class_info(&lv, &cd_S19580C3);
    dp->~S19580C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C3(Test_S19580C3, "S19580C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19580C3C1Ev();
extern void _ZN8S19580C3D2Ev();
Name_Map name_map_S19580C3[] = {
  NSPAIR(_ZN8S19580C3C1Ev),
  NSPAIR(_ZN8S19580C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
static Base_Class bases_S19580C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C3[];
extern void _ZN8S19580C3D1Ev();
extern void _ZN8S19580C3D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C3D1Ev,_ZThn4_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C3D0Ev,_ZThn4_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&_ZN8S19580C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C3[];
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__8S19580C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C3[] = {
  {&(_ZTV8S19580C3[10]),  10,40},
  {&(_ZTV8S19580C3[30]),  30,40},
  {&(_ZTV8S19580C3[10]),  10,40},
  {&(_tg__ZTV8S19580C4__8S19580C3[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__8S19580C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C3D0Ev,_ZThn4_N8S19580C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C3D1Ev,_ZThn4_N8S19580C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C3 = {  "S19580C3", // class name
  bases_S19580C3, 2,
  &(vtc_S19580C3[0]), // expected_vtbl_contents
  &(vtt_S19580C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19580C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19580C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C2  : S19580C3 {
  virtual void  v17(); // _ZN8S19580C23v17Ev
  ~S19580C2(); // tgen
  S19580C2(); // tgen
};
//SIG(-1 S19580C2) C1{ BC2{ VBC3{ VBC4{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC4 Fp} vd v10} v1}


void  S19580C2 ::v17(){vfunc_called(this, "_ZN8S19580C23v17Ev");}
S19580C2 ::~S19580C2(){ note_dtor("S19580C2", this);} // tgen
S19580C2 ::S19580C2(){ note_ctor("S19580C2", this);} // tgen

static void Test_S19580C2()
{
  extern Class_Descriptor cd_S19580C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19580C2, buf);
    S19580C2 *dp, &lv = *(dp=new (buf) S19580C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19580C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C2)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C2");
    check_base_class_offset(lv, (S19580C4*)(S19580C3*), ABISELECT(8,4), "S19580C2");
    check_base_class_offset(lv, (S19580C3*), 0, "S19580C2");
    test_class_info(&lv, &cd_S19580C2);
    dp->~S19580C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C2(Test_S19580C2, "S19580C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19580C2C1Ev();
extern void _ZN8S19580C2D1Ev();
Name_Map name_map_S19580C2[] = {
  NSPAIR(_ZN8S19580C2C1Ev),
  NSPAIR(_ZN8S19580C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
static Base_Class bases_S19580C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19580C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C2[];
extern void _ZN8S19580C2D1Ev();
extern void _ZN8S19580C2D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C23v17Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C2D1Ev,_ZThn4_N8S19580C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C2D0Ev,_ZThn4_N8S19580C2D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C2[0]),
  (VTBL_ENTRY)&_ZN8S19580C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C23v17Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19580C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C2[];
extern void _ZN8S19580C3D1Ev();
extern void _ZN8S19580C3D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C3__8S19580C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&_ZN8S19580C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C3D1Ev,_ZThn4_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C3D0Ev,_ZThn4_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3__8S19580C2[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__8S19580C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C2[] = {
  {&(_ZTV8S19580C2[10]),  10,41},
  {&(_tg__ZTV8S19580C3__8S19580C2[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C3__8S19580C2[12]),  12,22},
  {&(_tg__ZTV8S19580C3__8S19580C2[10]),  10,18},
  {&(_ZTV8S19580C2[31]),  31,41},
  {&(_ZTV8S19580C2[10]),  10,41},
  {&(_tg__ZTV8S19580C4__8S19580C2[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__8S19580C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C2[];
extern  VTBL_ENTRY _ZTV8S19580C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C2[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C3D0Ev,_ZThn4_N8S19580C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C3D1Ev,_ZThn4_N8S19580C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C2D0Ev,_ZThn4_N8S19580C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C2D1Ev,_ZThn4_N8S19580C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C2 = {  "S19580C2", // class name
  bases_S19580C2, 3,
  &(vtc_S19580C2[0]), // expected_vtbl_contents
  &(vtt_S19580C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19580C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19580C2),41, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C2),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C7  : S19580C4 {
  ::S19580C4 s19580c7f0[6];
  virtual void  v18(); // _ZN8S19580C73v18Ev
  ~S19580C7(); // tgen
  S19580C7(); // tgen
};
//SIG(-1 S19580C7) C1{ BC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} v1 FC2[6]}


void  S19580C7 ::v18(){vfunc_called(this, "_ZN8S19580C73v18Ev");}
S19580C7 ::~S19580C7(){ note_dtor("S19580C7", this);} // tgen
S19580C7 ::S19580C7(){ note_ctor("S19580C7", this);} // tgen

static void Test_S19580C7()
{
  extern Class_Descriptor cd_S19580C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S19580C7, buf);
    S19580C7 *dp, &lv = *(dp=new (buf) S19580C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S19580C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C7)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C7");
    check_base_class_offset(lv, (S19580C4*), 0, "S19580C7");
    check_field_offset(lv, s19580c7f0, ABISELECT(32,16), "S19580C7.s19580c7f0");
    test_class_info(&lv, &cd_S19580C7);
    dp->~S19580C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C7(Test_S19580C7, "S19580C7", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN8S19580C7C1Ev();
extern void _ZN8S19580C7D1Ev();
Name_Map name_map_S19580C7[] = {
  NSPAIR(_ZN8S19580C7C1Ev),
  NSPAIR(_ZN8S19580C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
static Base_Class bases_S19580C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C7[];
extern void _ZN8S19580C7D1Ev();
extern void _ZN8S19580C7D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY vtc_S19580C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&_ZN8S19580C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C7D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern VTBL_ENTRY _ZTV8S19580C7[];
extern void _ZN8S19580C4D1Ev();
extern void _ZN8S19580C4D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C7[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
static  VTT_ENTRY vtt_S19580C7[] = {
  {&(_ZTV8S19580C7[9]),  9,20},
  {&(_tg__ZTV8S19580C4__8S19580C7[9]),  9,19},
  {&(_tg__ZTV8S19580C4__8S19580C7[9]),  9,19},
  {&(_ZTV8S19580C7[9]),  9,20},
};
extern VTBL_ENTRY _ZTI8S19580C7[];
extern  VTBL_ENTRY _ZTV8S19580C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C7[];
Class_Descriptor cd_S19580C7 = {  "S19580C7", // class name
  bases_S19580C7, 2,
  &(vtc_S19580C7[0]), // expected_vtbl_contents
  &(vtt_S19580C7[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI8S19580C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19580C7),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C7),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C8  : virtual S19580C7 , virtual S19580C3 {
  ::S15319C7 s19580c8f0;
  virtual  ~S19580C8(); // _ZN8S19580C8D2Ev
  virtual void  v19(); // _ZN8S19580C83v19Ev
  virtual void  v20(); // _ZN8S19580C83v20Ev
  virtual void  v21(); // _ZN8S19580C83v21Ev
  S19580C8(); // tgen
};
//SIG(-1 S19580C8) C1{ VBC2{ BC3{ VBC4{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC4 Fp} v12 FC3[6]} VBC5{ VBC3 vd v13} vd v1 v2 v3 FC6{}}


 S19580C8 ::~S19580C8(){ note_dtor("S19580C8", this);}
void  S19580C8 ::v19(){vfunc_called(this, "_ZN8S19580C83v19Ev");}
void  S19580C8 ::v20(){vfunc_called(this, "_ZN8S19580C83v20Ev");}
void  S19580C8 ::v21(){vfunc_called(this, "_ZN8S19580C83v21Ev");}
S19580C8 ::S19580C8(){ note_ctor("S19580C8", this);} // tgen

static void Test_S19580C8()
{
  extern Class_Descriptor cd_S19580C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[35];
    init_test(&cd_S19580C8, buf);
    S19580C8 *dp, &lv = *(dp=new (buf) S19580C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,136), "sizeof(S19580C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C8)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*)(S19580C7*), ABISELECT(16,8), "S19580C8");
    /*is_ambiguous_... S19580C8::S19580C4 */ AMB_check_base_class_offset(lv, (S19580C5*)(S19580C4*), ABISELECT(16,8), "S19580C8");
    check_base_class_offset(lv, (S19580C4*)(S19580C7*), ABISELECT(16,8), "S19580C8");
    check_base_class_offset(lv, (S19580C7*), ABISELECT(16,8), "S19580C8");
    check_base_class_offset(lv, (S19580C4*)(S19580C3*), ABISELECT(240,120), "S19580C8");
    check_base_class_offset(lv, (S19580C3*), 0, "S19580C8");
    check_field_offset(lv, s19580c8f0, ABISELECT(8,4), "S19580C8.s19580c8f0");
    test_class_info(&lv, &cd_S19580C8);
    dp->~S19580C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C8(Test_S19580C8, "S19580C8", ABISELECT(272,136));

#else // __cplusplus

extern void _ZN8S19580C8C1Ev();
extern void _ZN8S19580C8D2Ev();
Name_Map name_map_S19580C8[] = {
  NSPAIR(_ZN8S19580C8C1Ev),
  NSPAIR(_ZN8S19580C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C7;
extern VTBL_ENTRY _ZTI8S19580C7[];
extern  VTBL_ENTRY _ZTV8S19580C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C7[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
static Base_Class bases_S19580C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19580C7,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19580C4,    ABISELECT(240,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19580C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C8[];
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void _ZN8S19580C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C8D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C8D1Ev,_ZThn8_N8S19580C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C8D0Ev,_ZThn8_N8S19580C8D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZThn240_N8S19580C8D1Ev,_ZThn120_N8S19580C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void ABISELECT(_ZThn240_N8S19580C8D0Ev,_ZThn120_N8S19580C8D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C8[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  ABISELECT(240,120),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C8[];
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void _ZN8S19580C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C7D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C48S19580C7__8S19580C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void _ZN8S19580C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C3D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C3__8S19580C8[] = {
  ABISELECT(16,8),
  ABISELECT(240,120),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn240_N8S19580C3D1Ev,_ZThn120_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn240_N8S19580C3D0Ev,_ZThn120_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3__8S19580C8[] = {
  0,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C3__8S19580C8[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C8[] = {
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__A1__8S19580C8[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C8[] = {
  {&(_ZTV8S19580C8[13]),  13,70},
  {&(_ZTV8S19580C8[37]),  37,70},
  {&(_ZTV8S19580C8[37]),  37,70},
  {&(_ZTV8S19580C8[13]),  13,70},
  {&(_ZTV8S19580C8[60]),  60,70},
  {&(_tg__ZTV8S19580C7__8S19580C8[9]),  9,20},
  {&(_tg__ZTV8S19580C48S19580C7__8S19580C8[9]),  9,19},
  {&(_tg__ZTV8S19580C48S19580C7__8S19580C8[9]),  9,19},
  {&(_tg__ZTV8S19580C7__8S19580C8[9]),  9,20},
  {&(_tg__ZTV8S19580C3__8S19580C8[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C3__8S19580C8[12]),  12,22},
  {&(_tg__ZTV8S19580C5__8S19580C3__8S19580C8[8]),  8,15},
  {&(_tg__ZTV8S19580C4__A1__8S19580C8[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__A1__8S19580C8[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C8[];
extern  VTBL_ENTRY _ZTV8S19580C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C8[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19580C3D0Ev,_ZThn120_N8S19580C3D0Ev),
  (VTBL_ENTRY)_ZN8S19580C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19580C3D1Ev,_ZThn120_N8S19580C3D1Ev),
  (VTBL_ENTRY)_ZN8S19580C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19580C8D0Ev,_ZThn120_N8S19580C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C8D0Ev,_ZThn8_N8S19580C8D0Ev),
  (VTBL_ENTRY)_ZN8S19580C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S19580C8D1Ev,_ZThn120_N8S19580C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C8D1Ev,_ZThn8_N8S19580C8D1Ev),
  (VTBL_ENTRY)_ZN8S19580C8D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C8 = {  "S19580C8", // class name
  bases_S19580C8, 5,
  &(vtc_S19580C8[0]), // expected_vtbl_contents
  &(vtt_S19580C8[0]), // expected_vtt_contents
  ABISELECT(272,136), // object size
  NSPAIRA(_ZTI8S19580C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19580C8),70, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C8),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C6  : virtual S19580C7 , virtual S19580C8 {
  virtual  ~S19580C6(); // _ZN8S19580C6D2Ev
  virtual void  v22(); // _ZN8S19580C63v22Ev
  S19580C6(); // tgen
};
//SIG(-1 S19580C6) C1{ VBC2{ BC3{ VBC4{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC4 Fp} v10 FC3[6]} VBC5{ VBC2 VBC6{ VBC3 vd v11} vd v12 v13 v14 FC7{}} vd v1}


 S19580C6 ::~S19580C6(){ note_dtor("S19580C6", this);}
void  S19580C6 ::v22(){vfunc_called(this, "_ZN8S19580C63v22Ev");}
S19580C6 ::S19580C6(){ note_ctor("S19580C6", this);} // tgen

static void Test_S19580C6()
{
  extern Class_Descriptor cd_S19580C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[36];
    init_test(&cd_S19580C6, buf);
    S19580C6 *dp, &lv = *(dp=new (buf) S19580C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,140), "sizeof(S19580C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C6)");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*)(S19580C7*), 0, "S19580C6");
    /*is_ambiguous_... S19580C6::S19580C4 */ AMB_check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C6");
    check_base_class_offset(lv, (S19580C4*)(S19580C7*), ABISELECT(8,4), "S19580C6");
    check_base_class_offset(lv, (S19580C7*), ABISELECT(8,4), "S19580C6");
    check_base_class_offset(lv, (S19580C7*)(S19580C8*), ABISELECT(8,4), "S19580C6");
    check_base_class_offset(lv, (S19580C4*)(S19580C3*), ABISELECT(248,124), "S19580C6");
    check_base_class_offset(lv, (S19580C3*)(S19580C8*), ABISELECT(232,116), "S19580C6");
    check_base_class_offset(lv, (S19580C8*), ABISELECT(232,116), "S19580C6");
    test_class_info(&lv, &cd_S19580C6);
    dp->~S19580C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C6(Test_S19580C6, "S19580C6", ABISELECT(280,140));

#else // __cplusplus

extern void _ZN8S19580C6C1Ev();
extern void _ZN8S19580C6D2Ev();
Name_Map name_map_S19580C6[] = {
  NSPAIR(_ZN8S19580C6C1Ev),
  NSPAIR(_ZN8S19580C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C7;
extern VTBL_ENTRY _ZTI8S19580C7[];
extern  VTBL_ENTRY _ZTV8S19580C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C7[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
extern Class_Descriptor cd_S19580C8;
extern VTBL_ENTRY _ZTI8S19580C8[];
extern  VTBL_ENTRY _ZTV8S19580C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C8[];
static Base_Class bases_S19580C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19580C7,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19580C4,    ABISELECT(248,124), //bcp->offset
    72, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19580C3,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19580C8,    ABISELECT(232,116), //bcp->offset
    45, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C6[];
extern void _ZN8S19580C6D1Ev();
extern void _ZN8S19580C6D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C63v22Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C6D1Ev,_ZThn4_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C6D0Ev,_ZThn4_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn232_N8S19580C6D1Ev,_ZThn116_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn232_N8S19580C6D0Ev,_ZThn116_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn248_N8S19580C6D1Ev,_ZThn124_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn248_N8S19580C6D0Ev,_ZThn124_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY vtc_S19580C6[] = {
  ABISELECT(248,124),
  ABISELECT(232,116),
  ABISELECT(232,116),
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&_ZN8S19580C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C63v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-232,-116),
  ABISELECT(16,8),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
  0,
  0,
  0,
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern VTBL_ENTRY _ZTV8S19580C6[];
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void _ZN8S19580C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C7D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C48S19580C7__8S19580C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C48S19580C7__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C7__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void _ZN8S19580C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C8D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C8__8S19580C6[] = {
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-232,-116),
  ABISELECT(16,8),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C8__8S19580C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C8__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C8D1Ev,_ZThn8_N8S19580C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C8D0Ev,_ZThn8_N8S19580C8D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C8__8S19580C6[] = {
  0,
  0,
  0,
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void _ZN8S19580C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C3D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C3__8S19580C6[] = {
  ABISELECT(-232,-116),
  ABISELECT(16,8),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3__8S19580C6[] = {
  0,
  0,
  0,
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C3__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,116),
  ABISELECT(232,116),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C6[] = {
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  ABISELECT(-248,-124),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__A1__8S19580C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(248,124),
  ABISELECT(248,124),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C6[] = {
  {&(_ZTV8S19580C6[13]),  13,94},
  {&(_ZTV8S19580C6[34]),  34,94},
  {&(_ZTV8S19580C6[13]),  13,94},
  {&(_ZTV8S19580C6[61]),  61,94},
  {&(_ZTV8S19580C6[61]),  61,94},
  {&(_ZTV8S19580C6[84]),  84,94},
  {&(_tg__ZTV8S19580C7__8S19580C6[9]),  9,20},
  {&(_tg__ZTV8S19580C48S19580C7__8S19580C6[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C48S19580C7__8S19580C6[8]),  8,15},
  {&(_tg__ZTV8S19580C5__8S19580C7__8S19580C6[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C6[13]),  13,24},
  {&(_tg__ZTV8S19580C7__8S19580C8__8S19580C6[13]),  13,24},
  {&(_tg__ZTV8S19580C5__8S19580C8__8S19580C6[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C6[13]),  13,24},
  {&(_tg__ZTV8S19580C4__A1__8S19580C8__8S19580C6[12]),  12,22},
  {&(_tg__ZTV8S19580C3__8S19580C6[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C3__8S19580C6[12]),  12,22},
  {&(_tg__ZTV8S19580C5__8S19580C3__8S19580C6[8]),  8,15},
  {&(_tg__ZTV8S19580C4__A1__8S19580C6[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__A1__8S19580C6[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C6[];
extern  VTBL_ENTRY _ZTV8S19580C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C6[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev),
  (VTBL_ENTRY)_ZN8S19580C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev),
  (VTBL_ENTRY)_ZN8S19580C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C8D0Ev,_ZThn8_N8S19580C8D0Ev),
  (VTBL_ENTRY)_ZN8S19580C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C8D1Ev,_ZThn8_N8S19580C8D1Ev),
  (VTBL_ENTRY)_ZN8S19580C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19580C6D0Ev,_ZThn124_N8S19580C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19580C6D0Ev,_ZThn116_N8S19580C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C6D0Ev,_ZThn4_N8S19580C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19580C6D1Ev,_ZThn124_N8S19580C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19580C6D1Ev,_ZThn116_N8S19580C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C6D1Ev,_ZThn4_N8S19580C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C6 = {  "S19580C6", // class name
  bases_S19580C6, 6,
  &(vtc_S19580C6[0]), // expected_vtbl_contents
  &(vtt_S19580C6[0]), // expected_vtt_contents
  ABISELECT(280,140), // object size
  NSPAIRA(_ZTI8S19580C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19580C6),94, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C6),20, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19580C1  : virtual S19580C2 , virtual S19580C6 {
  char s19580c1f0;
  virtual  ~S19580C1(); // _ZN8S19580C1D2Ev
  virtual void  v1(); // _ZN8S19580C12v1Ev
  virtual void  v2(); // _ZN8S19580C12v2Ev
  virtual void  v3(); // _ZN8S19580C12v3Ev
  virtual void  v4(); // _ZN8S19580C12v4Ev
  virtual void  v5(); // _ZN8S19580C12v5Ev
  virtual void  v6(); // _ZN8S19580C12v6Ev
  virtual void  v7(); // _ZN8S19580C12v7Ev
  S19580C1(); // tgen
};
//SIG(1 S19580C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ vd v8 v9 v10 v11 v12} vd v13 v14 v15 Fp FC5 Fp} vd v16} v17} VBC6{ VBC7{ BC4 v18 FC4[6]} VBC8{ VBC7 VBC3 vd v19 v20 v21 FC9{}} vd v22} vd v1 v2 v3 v4 v5 v6 v7 Fc}


 S19580C1 ::~S19580C1(){ note_dtor("S19580C1", this);}
void  S19580C1 ::v1(){vfunc_called(this, "_ZN8S19580C12v1Ev");}
void  S19580C1 ::v2(){vfunc_called(this, "_ZN8S19580C12v2Ev");}
void  S19580C1 ::v3(){vfunc_called(this, "_ZN8S19580C12v3Ev");}
void  S19580C1 ::v4(){vfunc_called(this, "_ZN8S19580C12v4Ev");}
void  S19580C1 ::v5(){vfunc_called(this, "_ZN8S19580C12v5Ev");}
void  S19580C1 ::v6(){vfunc_called(this, "_ZN8S19580C12v6Ev");}
void  S19580C1 ::v7(){vfunc_called(this, "_ZN8S19580C12v7Ev");}
S19580C1 ::S19580C1(){ note_ctor("S19580C1", this);} // tgen

static void Test_S19580C1()
{
  extern Class_Descriptor cd_S19580C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[38];
    init_test(&cd_S19580C1, buf);
    S19580C1 *dp, &lv = *(dp=new (buf) S19580C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,148), "sizeof(S19580C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19580C1)");
    /*is_ambiguous_... S19580C1::S19580C4 */ AMB_check_base_class_offset(lv, (S19580C5*)(S19580C4*), 0, "S19580C1");
    check_base_class_offset(lv, (S19580C5*)(S19580C4*)(S19580C7*), 0, "S19580C1");
    check_base_class_offset(lv, (S19580C4*)(S19580C3*)(S19580C2*), ABISELECT(16,8), "S19580C1");
    /*is_ambiguous_... S19580C1::S19580C3 */ AMB_check_base_class_offset(lv, (S19580C4*)(S19580C3*), ABISELECT(16,8), "S19580C1");
    check_base_class_offset(lv, (S19580C3*)(S19580C2*), 0, "S19580C1");
    check_base_class_offset(lv, (S19580C2*), 0, "S19580C1");
    check_base_class_offset(lv, (S19580C4*)(S19580C7*), ABISELECT(56,28), "S19580C1");
    check_base_class_offset(lv, (S19580C7*)(S19580C6*), ABISELECT(56,28), "S19580C1");
    check_base_class_offset(lv, (S19580C7*)(S19580C8*), ABISELECT(56,28), "S19580C1");
    check_base_class_offset(lv, (S19580C3*)(S19580C8*), ABISELECT(280,140), "S19580C1");
    check_base_class_offset(lv, (S19580C8*)(S19580C6*), ABISELECT(280,140), "S19580C1");
    check_base_class_offset(lv, (S19580C6*), ABISELECT(48,24), "S19580C1");
    check_field_offset(lv, s19580c1f0, ABISELECT(8,4), "S19580C1.s19580c1f0");
    test_class_info(&lv, &cd_S19580C1);
    dp->~S19580C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19580C1(Test_S19580C1, "S19580C1", ABISELECT(296,148));

#else // __cplusplus

extern void _ZN8S19580C1C1Ev();
extern void _ZN8S19580C1D2Ev();
Name_Map name_map_S19580C1[] = {
  NSPAIR(_ZN8S19580C1C1Ev),
  NSPAIR(_ZN8S19580C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19580C5;
extern VTBL_ENTRY _ZTI8S19580C5[];
extern  VTBL_ENTRY _ZTV8S19580C5[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
extern Class_Descriptor cd_S19580C2;
extern VTBL_ENTRY _ZTI8S19580C2[];
extern  VTBL_ENTRY _ZTV8S19580C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C2[];
extern Class_Descriptor cd_S19580C4;
extern VTBL_ENTRY _ZTI8S19580C4[];
extern  VTBL_ENTRY _ZTV8S19580C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C4[];
extern Class_Descriptor cd_S19580C7;
extern VTBL_ENTRY _ZTI8S19580C7[];
extern  VTBL_ENTRY _ZTV8S19580C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C7[];
extern Class_Descriptor cd_S19580C3;
extern VTBL_ENTRY _ZTI8S19580C3[];
extern  VTBL_ENTRY _ZTV8S19580C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C3[];
extern Class_Descriptor cd_S19580C8;
extern VTBL_ENTRY _ZTI8S19580C8[];
extern  VTBL_ENTRY _ZTV8S19580C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C8[];
extern Class_Descriptor cd_S19580C6;
extern VTBL_ENTRY _ZTI8S19580C6[];
extern  VTBL_ENTRY _ZTV8S19580C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C6[];
static Base_Class bases_S19580C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19580C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19580C4,    ABISELECT(16,8), //bcp->offset
    33, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19580C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19580C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19580C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19580C7,    ABISELECT(56,28), //bcp->offset
    77, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19580C3,    ABISELECT(280,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19580C8,    ABISELECT(280,140), //bcp->offset
    101, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19580C6,    ABISELECT(48,24), //bcp->offset
    55, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19580C1[];
extern void _ZN8S19580C1D1Ev();
extern void _ZN8S19580C1D0Ev();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C23v17Ev();
extern void _ZN8S19580C12v1Ev();
extern void _ZN8S19580C12v2Ev();
extern void _ZN8S19580C12v3Ev();
extern void _ZN8S19580C12v4Ev();
extern void _ZN8S19580C12v5Ev();
extern void _ZN8S19580C12v6Ev();
extern void _ZN8S19580C12v7Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C1D1Ev,_ZThn8_N8S19580C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C1D0Ev,_ZThn8_N8S19580C1D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19580C1D1Ev,_ZThn24_N8S19580C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19580C1D0Ev,_ZThn24_N8S19580C1D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C63v22Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19580C1D1Ev,_ZThn28_N8S19580C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19580C1D0Ev,_ZThn28_N8S19580C1D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
extern void ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19580C1D1Ev,_ZThn140_N8S19580C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19580C1D0Ev,_ZThn140_N8S19580C1D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
static  VTBL_ENTRY vtc_S19580C1[] = {
  ABISELECT(280,140),
  ABISELECT(280,140),
  ABISELECT(56,28),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&_ZN8S19580C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19580C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C23v17Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19580C12v7Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(232,116),
  ABISELECT(232,116),
  ABISELECT(-48,-24),
  ABISELECT(8,4),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C63v22Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-280,-140),
  ABISELECT(-264,-132),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  (VTBL_ENTRY)&(_ZTI8S19580C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
};
extern VTBL_ENTRY _ZTV8S19580C1[];
extern void ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev)();
extern void _ZN8S19580C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev)();
extern void _ZN8S19580C2D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C2__8S19580C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C23v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void _ZN8S19580C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C3D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C38S19580C2__8S19580C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C38S19580C2__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19580C2D1Ev,_ZThn8_N8S19580C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19580C2D0Ev,_ZThn8_N8S19580C2D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C2__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19580C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C4__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void _ZN8S19580C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void _ZN8S19580C6D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C63v22Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C6__8S19580C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(232,116),
  ABISELECT(232,116),
  ABISELECT(-48,-24),
  ABISELECT(8,4),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C63v22Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn8_N8S19580C6D1Ev,_ZThn4_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn8_N8S19580C6D0Ev,_ZThn4_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C6__8S19580C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C6__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZThn232_N8S19580C6D1Ev,_ZThn116_N8S19580C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void ABISELECT(_ZThn232_N8S19580C6D0Ev,_ZThn116_N8S19580C6D0Ev)() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C8__8S19580C6__8S19580C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-280,-140),
  ABISELECT(-264,-132),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-232,-116),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C6__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S19580C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void _ZN8S19580C7D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C7D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void _ZN8S19580C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C4D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C48S19580C7__A1__8S19580C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C48S19580C7__A1__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19580C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C7__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S19580C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void _ZN8S19580C8D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C8D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
extern void _ZN8S19580C83v19Ev();
extern void _ZN8S19580C83v20Ev();
extern void _ZN8S19580C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C8__8S19580C1[] = {
  0,
  ABISELECT(-224,-112),
  0,
  ABISELECT(-280,-140),
  ABISELECT(-264,-132),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19580C83v21Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
extern void _ZN8S19580C73v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C7__8S19580C8__8S19580C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19580C73v18Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C8__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__A1__8S19580C8__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(264,132),
  ABISELECT(264,132),
  (VTBL_ENTRY)&(_ZTI8S19580C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void _ZN8S19580C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C3D0Ev() __attribute__((weak));
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C3__A1__8S19580C1[] = {
  ABISELECT(-280,-140),
  ABISELECT(-264,-132),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  ABISELECT(-280,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
extern void _ZN8S19580C43v13Ev();
extern void _ZN8S19580C43v14Ev();
extern void _ZN8S19580C43v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C4__8S19580C3__A1__8S19580C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(264,132),
  ABISELECT(264,132),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v13Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19580C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev)();
extern void _ZN8S19580C52v8Ev();
extern void _ZN8S19580C52v9Ev();
extern void _ZN8S19580C53v10Ev();
extern void _ZN8S19580C53v11Ev();
extern void _ZN8S19580C53v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19580C5__8S19580C3__A1__8S19580C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(280,140),
  ABISELECT(280,140),
  (VTBL_ENTRY)&(_ZTI8S19580C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19580C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19580C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19580C53v12Ev,
};
static  VTT_ENTRY vtt_S19580C1[] = {
  {&(_ZTV8S19580C1[17]),  17,128},
  {&(_ZTV8S19580C1[17]),  17,128},
  {&(_ZTV8S19580C1[45]),  45,128},
  {&(_ZTV8S19580C1[17]),  17,128},
  {&(_ZTV8S19580C1[69]),  69,128},
  {&(_ZTV8S19580C1[90]),  90,128},
  {&(_ZTV8S19580C1[117]),  117,128},
  {&(_ZTV8S19580C1[117]),  117,128},
  {&(_tg__ZTV8S19580C2__8S19580C1[10]),  10,19},
  {&(_tg__ZTV8S19580C38S19580C2__8S19580C1[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C38S19580C2__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C38S19580C2__8S19580C1[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C2__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C2__8S19580C1[10]),  10,19},
  {&(_tg__ZTV8S19580C4__8S19580C1[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C4__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C6__8S19580C1[13]),  13,21},
  {&(_tg__ZTV8S19580C7__8S19580C6__8S19580C1[13]),  13,24},
  {&(_tg__ZTV8S19580C5__8S19580C6__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C6__8S19580C1[16]),  16,27},
  {&(_tg__ZTV8S19580C8__8S19580C6__8S19580C1[16]),  16,27},
  {&(_tg__ZTV8S19580C4__A1__8S19580C6__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C7__8S19580C1[9]),  9,20},
  {&(_tg__ZTV8S19580C48S19580C7__A1__8S19580C1[9]),  9,19},
  {&(_tg__ZTV8S19580C5__8S19580C48S19580C7__A1__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C5__8S19580C7__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C1[13]),  13,24},
  {&(_tg__ZTV8S19580C7__8S19580C8__8S19580C1[13]),  13,24},
  {&(_tg__ZTV8S19580C5__8S19580C8__8S19580C1[8]),  8,15},
  {&(_tg__ZTV8S19580C8__8S19580C1[13]),  13,24},
  {&(_tg__ZTV8S19580C4__A1__8S19580C8__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C3__A1__8S19580C1[10]),  10,18},
  {&(_tg__ZTV8S19580C4__8S19580C3__A1__8S19580C1[12]),  12,22},
  {&(_tg__ZTV8S19580C5__8S19580C3__A1__8S19580C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19580C1[];
extern  VTBL_ENTRY _ZTV8S19580C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19580C1[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D0Ev,_ZTv0_n12_N8S19580C8D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C8D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C8D1Ev,_ZTv0_n12_N8S19580C8D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C8D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D0Ev,_ZTv0_n12_N8S19580C7D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C7D1Ev,_ZTv0_n12_N8S19580C7D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C7D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C6D0Ev,_ZTv0_n12_N8S19580C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19580C6D0Ev,_ZThn116_N8S19580C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C6D0Ev,_ZThn4_N8S19580C6D0Ev),
  (VTBL_ENTRY)_ZN8S19580C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C6D1Ev,_ZTv0_n12_N8S19580C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S19580C6D1Ev,_ZThn116_N8S19580C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19580C6D1Ev,_ZThn4_N8S19580C6D1Ev),
  (VTBL_ENTRY)_ZN8S19580C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D0Ev,_ZTv0_n12_N8S19580C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  (VTBL_ENTRY)_ZN8S19580C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C4D1Ev,_ZTv0_n12_N8S19580C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  (VTBL_ENTRY)_ZN8S19580C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D0Ev,_ZTv0_n12_N8S19580C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S19580C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D0Ev,_ZThn8_N8S19580C3D0Ev),
  (VTBL_ENTRY)_ZN8S19580C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C3D1Ev,_ZTv0_n12_N8S19580C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S19580C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C3D1Ev,_ZThn8_N8S19580C3D1Ev),
  (VTBL_ENTRY)_ZN8S19580C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C2D0Ev,_ZTv0_n12_N8S19580C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C2D0Ev,_ZThn8_N8S19580C2D0Ev),
  (VTBL_ENTRY)_ZN8S19580C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C2D1Ev,_ZTv0_n12_N8S19580C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C2D1Ev,_ZThn8_N8S19580C2D1Ev),
  (VTBL_ENTRY)_ZN8S19580C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C1D0Ev,_ZTv0_n12_N8S19580C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19580C1D0Ev,_ZThn140_N8S19580C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19580C1D0Ev,_ZThn28_N8S19580C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19580C1D0Ev,_ZThn24_N8S19580C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C1D0Ev,_ZThn8_N8S19580C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19580C1D1Ev,_ZTv0_n12_N8S19580C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19580C1D1Ev,_ZThn140_N8S19580C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19580C1D1Ev,_ZThn28_N8S19580C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19580C1D1Ev,_ZThn24_N8S19580C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19580C1D1Ev,_ZThn8_N8S19580C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19580C1 = {  "S19580C1", // class name
  bases_S19580C1, 9,
  &(vtc_S19580C1[0]), // expected_vtbl_contents
  &(vtt_S19580C1[0]), // expected_vtt_contents
  ABISELECT(296,148), // object size
  NSPAIRA(_ZTI8S19580C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19580C1),128, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19580C1),34, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20198C2  {
  void *s20198c2f0[6];
  int s20198c2f1;
  virtual void  v4(); // _ZN8S20198C22v4Ev
  virtual void  v5(); // _ZN8S20198C22v5Ev
  virtual void  v6(); // _ZN8S20198C22v6Ev
  virtual void  v7(); // _ZN8S20198C22v7Ev
  virtual void  v8(); // _ZN8S20198C22v8Ev
  virtual void  v9(); // _ZN8S20198C22v9Ev
  ~S20198C2(); // tgen
  S20198C2(); // tgen
};
//SIG(-1 S20198C2) C1{ v1 v2 v3 v4 v5 v6 Fp[6] Fi}


void  S20198C2 ::v4(){vfunc_called(this, "_ZN8S20198C22v4Ev");}
void  S20198C2 ::v5(){vfunc_called(this, "_ZN8S20198C22v5Ev");}
void  S20198C2 ::v6(){vfunc_called(this, "_ZN8S20198C22v6Ev");}
void  S20198C2 ::v7(){vfunc_called(this, "_ZN8S20198C22v7Ev");}
void  S20198C2 ::v8(){vfunc_called(this, "_ZN8S20198C22v8Ev");}
void  S20198C2 ::v9(){vfunc_called(this, "_ZN8S20198C22v9Ev");}
S20198C2 ::~S20198C2(){ note_dtor("S20198C2", this);} // tgen
S20198C2 ::S20198C2(){ note_ctor("S20198C2", this);} // tgen

static void Test_S20198C2()
{
  extern Class_Descriptor cd_S20198C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20198C2, buf);
    S20198C2 *dp, &lv = *(dp=new (buf) S20198C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20198C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20198C2)");
    check_field_offset(lv, s20198c2f0, ABISELECT(8,4), "S20198C2.s20198c2f0");
    check_field_offset(lv, s20198c2f1, ABISELECT(56,28), "S20198C2.s20198c2f1");
    test_class_info(&lv, &cd_S20198C2);
    dp->~S20198C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C2(Test_S20198C2, "S20198C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20198C2C1Ev();
extern void _ZN8S20198C2D1Ev();
Name_Map name_map_S20198C2[] = {
  NSPAIR(_ZN8S20198C2C1Ev),
  NSPAIR(_ZN8S20198C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20198C2[];
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY vtc_S20198C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C2[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
Class_Descriptor cd_S20198C2 = {  "S20198C2", // class name
  0,0,//no base classes
  &(vtc_S20198C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20198C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20198C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20198C3  : virtual S20198C2 {
  int s20198c3f0;
  ::S20405C5_nt s20198c3f1;
  virtual  ~S20198C3(); // _ZN8S20198C3D2Ev
  virtual void  v10(); // _ZN8S20198C33v10Ev
  virtual void  v11(); // _ZN8S20198C33v11Ev
  virtual void  v12(); // _ZN8S20198C33v12Ev
  virtual void  v13(); // _ZN8S20198C33v13Ev
  virtual void  v14(); // _ZN8S20198C33v14Ev
  S20198C3(); // tgen
};
//SIG(-1 S20198C3) C1{ VBC2{ v6 v7 v8 v9 v10 v11 Fp[6] Fi} vd v1 v2 v3 v4 v5 Fi FU3{ m}}


 S20198C3 ::~S20198C3(){ note_dtor("S20198C3", this);}
void  S20198C3 ::v10(){vfunc_called(this, "_ZN8S20198C33v10Ev");}
void  S20198C3 ::v11(){vfunc_called(this, "_ZN8S20198C33v11Ev");}
void  S20198C3 ::v12(){vfunc_called(this, "_ZN8S20198C33v12Ev");}
void  S20198C3 ::v13(){vfunc_called(this, "_ZN8S20198C33v13Ev");}
void  S20198C3 ::v14(){vfunc_called(this, "_ZN8S20198C33v14Ev");}
S20198C3 ::S20198C3(){ note_ctor("S20198C3", this);} // tgen

static void Test_S20198C3()
{
  extern Class_Descriptor cd_S20198C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S20198C3, buf);
    S20198C3 *dp, &lv = *(dp=new (buf) S20198C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20198C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20198C3)");
    check_base_class_offset(lv, (S20198C2*), ABISELECT(16,12), "S20198C3");
    check_field_offset(lv, s20198c3f0, ABISELECT(8,4), "S20198C3.s20198c3f0");
    check_field_offset(lv, s20198c3f1, ABISELECT(12,8), "S20198C3.s20198c3f1");
    test_class_info(&lv, &cd_S20198C3);
    dp->~S20198C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C3(Test_S20198C3, "S20198C3", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20198C3C1Ev();
extern void _ZN8S20198C3D2Ev();
Name_Map name_map_S20198C3[] = {
  NSPAIR(_ZN8S20198C3C1Ev),
  NSPAIR(_ZN8S20198C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20198C2;
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
static Base_Class bases_S20198C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20198C2,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20198C3[];
extern void _ZN8S20198C3D1Ev();
extern void _ZN8S20198C3D0Ev();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY vtc_S20198C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern VTBL_ENTRY _ZTV8S20198C3[];
static  VTT_ENTRY vtt_S20198C3[] = {
  {&(_ZTV8S20198C3[3]),  3,24},
  {&(_ZTV8S20198C3[18]),  18,24},
};
extern VTBL_ENTRY _ZTI8S20198C3[];
extern  VTBL_ENTRY _ZTV8S20198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C3[];
Class_Descriptor cd_S20198C3 = {  "S20198C3", // class name
  bases_S20198C3, 1,
  &(vtc_S20198C3[0]), // expected_vtbl_contents
  &(vtt_S20198C3[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20198C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20198C3),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20198C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20198C5  : virtual S20198C2 , virtual S20198C3 {
  virtual  ~S20198C5(); // _ZN8S20198C5D2Ev
  virtual void  v15(); // _ZN8S20198C53v15Ev
  S20198C5(); // tgen
};
//SIG(-1 S20198C5) C1{ VBC2{ v2 v3 v4 v5 v6 v7 Fp[6] Fi} VBC3{ VBC2 vd v8 v9 v10 v11 v12 Fi FU4{ m}} vd v1}


 S20198C5 ::~S20198C5(){ note_dtor("S20198C5", this);}
void  S20198C5 ::v15(){vfunc_called(this, "_ZN8S20198C53v15Ev");}
S20198C5 ::S20198C5(){ note_ctor("S20198C5", this);} // tgen

static void Test_S20198C5()
{
  extern Class_Descriptor cd_S20198C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20198C5, buf);
    S20198C5 *dp, &lv = *(dp=new (buf) S20198C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20198C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20198C5)");
    check_base_class_offset(lv, (S20198C2*), ABISELECT(8,4), "S20198C5");
    check_base_class_offset(lv, (S20198C2*)(S20198C3*), ABISELECT(8,4), "S20198C5");
    check_base_class_offset(lv, (S20198C3*), ABISELECT(72,36), "S20198C5");
    test_class_info(&lv, &cd_S20198C5);
    dp->~S20198C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C5(Test_S20198C5, "S20198C5", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20198C5C1Ev();
extern void _ZN8S20198C5D2Ev();
Name_Map name_map_S20198C5[] = {
  NSPAIR(_ZN8S20198C5C1Ev),
  NSPAIR(_ZN8S20198C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20198C2;
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
extern Class_Descriptor cd_S20198C3;
extern VTBL_ENTRY _ZTI8S20198C3[];
extern  VTBL_ENTRY _ZTV8S20198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C3[];
static Base_Class bases_S20198C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20198C2,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20198C3,    ABISELECT(72,36), //bcp->offset
    21, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20198C5[];
extern void _ZN8S20198C5D1Ev();
extern void _ZN8S20198C5D0Ev();
extern void _ZN8S20198C53v15Ev();
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev)();
extern void ABISELECT(_ZThn72_N8S20198C5D1Ev,_ZThn36_N8S20198C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev)();
extern void ABISELECT(_ZThn72_N8S20198C5D0Ev,_ZThn36_N8S20198C5D0Ev)() __attribute__((weak));
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY vtc_S20198C5[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&_ZN8S20198C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C53v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern VTBL_ENTRY _ZTV8S20198C5[];
extern void _ZN8S20198C3D1Ev();
extern void _ZN8S20198C3D0Ev();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C5[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C3__8S20198C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
static  VTT_ENTRY vtt_S20198C5[] = {
  {&(_ZTV8S20198C5[4]),  4,37},
  {&(_ZTV8S20198C5[15]),  15,37},
  {&(_ZTV8S20198C5[30]),  30,37},
  {&(_tg__ZTV8S20198C3__8S20198C5[3]),  3,10},
  {&(_tg__ZTV8S20198C2__8S20198C3__8S20198C5[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20198C5[];
extern  VTBL_ENTRY _ZTV8S20198C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C5[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20198C5D0Ev,_ZThn36_N8S20198C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20198C5D1Ev,_ZThn36_N8S20198C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20198C5 = {  "S20198C5", // class name
  bases_S20198C5, 2,
  &(vtc_S20198C5[0]), // expected_vtbl_contents
  &(vtt_S20198C5[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20198C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20198C5),37, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20198C5),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20198C6  : virtual S20198C2 , virtual S20198C3 {
  virtual  ~S20198C6(); // _ZN8S20198C6D2Ev
  virtual void  v16(); // _ZN8S20198C63v16Ev
  virtual void  v17(); // _ZN8S20198C63v17Ev
  virtual void  v18(); // _ZN8S20198C63v18Ev
  virtual void  v19(); // _ZN8S20198C63v19Ev
  virtual void  v20(); // _ZN8S20198C63v20Ev
  virtual void  v21(); // _ZN8S20198C63v21Ev
  virtual void  v22(); // _ZN8S20198C63v22Ev
  virtual void  v23(); // _ZN8S20198C63v23Ev
  virtual void  v24(); // _ZN8S20198C63v24Ev
  S20198C6(); // tgen
};
//SIG(-1 S20198C6) C1{ VBC2{ v10 v11 v12 v13 v14 v15 Fp[6] Fi} VBC3{ VBC2 vd v16 v17 v18 v19 v20 Fi FU4{ m}} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S20198C6 ::~S20198C6(){ note_dtor("S20198C6", this);}
void  S20198C6 ::v16(){vfunc_called(this, "_ZN8S20198C63v16Ev");}
void  S20198C6 ::v17(){vfunc_called(this, "_ZN8S20198C63v17Ev");}
void  S20198C6 ::v18(){vfunc_called(this, "_ZN8S20198C63v18Ev");}
void  S20198C6 ::v19(){vfunc_called(this, "_ZN8S20198C63v19Ev");}
void  S20198C6 ::v20(){vfunc_called(this, "_ZN8S20198C63v20Ev");}
void  S20198C6 ::v21(){vfunc_called(this, "_ZN8S20198C63v21Ev");}
void  S20198C6 ::v22(){vfunc_called(this, "_ZN8S20198C63v22Ev");}
void  S20198C6 ::v23(){vfunc_called(this, "_ZN8S20198C63v23Ev");}
void  S20198C6 ::v24(){vfunc_called(this, "_ZN8S20198C63v24Ev");}
S20198C6 ::S20198C6(){ note_ctor("S20198C6", this);} // tgen

static void Test_S20198C6()
{
  extern Class_Descriptor cd_S20198C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S20198C6, buf);
    S20198C6 *dp, &lv = *(dp=new (buf) S20198C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S20198C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20198C6)");
    check_base_class_offset(lv, (S20198C2*), ABISELECT(8,4), "S20198C6");
    check_base_class_offset(lv, (S20198C2*)(S20198C3*), ABISELECT(8,4), "S20198C6");
    check_base_class_offset(lv, (S20198C3*), ABISELECT(72,36), "S20198C6");
    test_class_info(&lv, &cd_S20198C6);
    dp->~S20198C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C6(Test_S20198C6, "S20198C6", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S20198C6C1Ev();
extern void _ZN8S20198C6D2Ev();
Name_Map name_map_S20198C6[] = {
  NSPAIR(_ZN8S20198C6C1Ev),
  NSPAIR(_ZN8S20198C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20198C2;
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
extern Class_Descriptor cd_S20198C3;
extern VTBL_ENTRY _ZTI8S20198C3[];
extern  VTBL_ENTRY _ZTV8S20198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C3[];
static Base_Class bases_S20198C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20198C2,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20198C3,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20198C6[];
extern void _ZN8S20198C6D1Ev();
extern void _ZN8S20198C6D0Ev();
extern void _ZN8S20198C63v16Ev();
extern void _ZN8S20198C63v17Ev();
extern void _ZN8S20198C63v18Ev();
extern void _ZN8S20198C63v19Ev();
extern void _ZN8S20198C63v20Ev();
extern void _ZN8S20198C63v21Ev();
extern void _ZN8S20198C63v22Ev();
extern void _ZN8S20198C63v23Ev();
extern void _ZN8S20198C63v24Ev();
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev)();
extern void ABISELECT(_ZThn72_N8S20198C6D1Ev,_ZThn36_N8S20198C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev)();
extern void ABISELECT(_ZThn72_N8S20198C6D0Ev,_ZThn36_N8S20198C6D0Ev)() __attribute__((weak));
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY vtc_S20198C6[] = {
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&_ZN8S20198C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern VTBL_ENTRY _ZTV8S20198C6[];
extern void _ZN8S20198C3D1Ev();
extern void _ZN8S20198C3D0Ev();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C6[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C3__8S20198C6[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
static  VTT_ENTRY vtt_S20198C6[] = {
  {&(_ZTV8S20198C6[4]),  4,45},
  {&(_ZTV8S20198C6[23]),  23,45},
  {&(_ZTV8S20198C6[38]),  38,45},
  {&(_tg__ZTV8S20198C3__8S20198C6[3]),  3,10},
  {&(_tg__ZTV8S20198C2__8S20198C3__8S20198C6[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S20198C6[];
extern  VTBL_ENTRY _ZTV8S20198C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C6[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20198C6D0Ev,_ZThn36_N8S20198C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20198C6D1Ev,_ZThn36_N8S20198C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20198C6 = {  "S20198C6", // class name
  bases_S20198C6, 2,
  &(vtc_S20198C6[0]), // expected_vtbl_contents
  &(vtt_S20198C6[0]), // expected_vtt_contents
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S20198C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20198C6),45, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20198C6),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20198C1  : virtual S20198C2 , virtual S20198C3 , virtual S20198C5 , S20198C6 {
  void *s20198c1f0;
  long double s20198c1f1;
  virtual  ~S20198C1(); // _ZN8S20198C1D2Ev
  virtual void  v1(); // _ZN8S20198C12v1Ev
  virtual void  v2(); // _ZN8S20198C12v2Ev
  virtual void  v3(); // _ZN8S20198C12v3Ev
  S20198C1(); // tgen
};
//SIG(1 S20198C1) C1{ VBC2{ v4 v5 v6 v7 v8 v9 Fp[6] Fi} VBC3{ VBC2 vd v10 v11 v12 v13 v14 Fi FU4{ m}} VBC5{ VBC2 VBC3 vd v15} BC6{ VBC2 VBC3 vd v16 v17 v18 v19 v20 v21 v22 v23 v24} vd v1 v2 v3 Fp FD}


 S20198C1 ::~S20198C1(){ note_dtor("S20198C1", this);}
void  S20198C1 ::v1(){vfunc_called(this, "_ZN8S20198C12v1Ev");}
void  S20198C1 ::v2(){vfunc_called(this, "_ZN8S20198C12v2Ev");}
void  S20198C1 ::v3(){vfunc_called(this, "_ZN8S20198C12v3Ev");}
S20198C1 ::S20198C1(){ note_ctor("S20198C1", this);} // tgen

static void Test_S20198C1()
{
  extern Class_Descriptor cd_S20198C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,18)];
    init_test(&cd_S20198C1, buf);
    S20198C1 *dp, &lv = *(dp=new (buf) S20198C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,68), "sizeof(S20198C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20198C1)");
    check_base_class_offset(lv, (S20198C2*), ABISELECT(32,20), "S20198C1");
    check_base_class_offset(lv, (S20198C2*)(S20198C3*), ABISELECT(32,20), "S20198C1");
    check_base_class_offset(lv, (S20198C2*)(S20198C5*), ABISELECT(32,20), "S20198C1");
    check_base_class_offset(lv, (S20198C2*)(S20198C6*), ABISELECT(32,20), "S20198C1");
    check_base_class_offset(lv, (S20198C3*), ABISELECT(96,52), "S20198C1");
    check_base_class_offset(lv, (S20198C3*)(S20198C5*), ABISELECT(96,52), "S20198C1");
    check_base_class_offset(lv, (S20198C3*)(S20198C6*), ABISELECT(96,52), "S20198C1");
    check_base_class_offset(lv, (S20198C5*), ABISELECT(112,64), "S20198C1");
    check_base_class_offset(lv, (S20198C6*), 0, "S20198C1");
    check_field_offset(lv, s20198c1f0, ABISELECT(8,4), "S20198C1.s20198c1f0");
    check_field_offset(lv, s20198c1f1, ABISELECT(16,8), "S20198C1.s20198c1f1");
    test_class_info(&lv, &cd_S20198C1);
    dp->~S20198C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20198C1(Test_S20198C1, "S20198C1", ABISELECT(128,68));

#else // __cplusplus

extern void _ZN8S20198C1C1Ev();
extern void _ZN8S20198C1D2Ev();
Name_Map name_map_S20198C1[] = {
  NSPAIR(_ZN8S20198C1C1Ev),
  NSPAIR(_ZN8S20198C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20198C2;
extern VTBL_ENTRY _ZTI8S20198C2[];
extern  VTBL_ENTRY _ZTV8S20198C2[];
extern Class_Descriptor cd_S20198C3;
extern VTBL_ENTRY _ZTI8S20198C3[];
extern  VTBL_ENTRY _ZTV8S20198C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C3[];
extern Class_Descriptor cd_S20198C5;
extern VTBL_ENTRY _ZTI8S20198C5[];
extern  VTBL_ENTRY _ZTV8S20198C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C5[];
extern Class_Descriptor cd_S20198C6;
extern VTBL_ENTRY _ZTI8S20198C6[];
extern  VTBL_ENTRY _ZTV8S20198C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C6[];
static Base_Class bases_S20198C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20198C2,    ABISELECT(32,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20198C3,    ABISELECT(96,52), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20198C5,    ABISELECT(112,64), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20198C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20198C1[];
extern void _ZN8S20198C1D1Ev();
extern void _ZN8S20198C1D0Ev();
extern void _ZN8S20198C63v16Ev();
extern void _ZN8S20198C63v17Ev();
extern void _ZN8S20198C63v18Ev();
extern void _ZN8S20198C63v19Ev();
extern void _ZN8S20198C63v20Ev();
extern void _ZN8S20198C63v21Ev();
extern void _ZN8S20198C63v22Ev();
extern void _ZN8S20198C63v23Ev();
extern void _ZN8S20198C63v24Ev();
extern void _ZN8S20198C12v1Ev();
extern void _ZN8S20198C12v2Ev();
extern void _ZN8S20198C12v3Ev();
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S20198C1D1Ev,_ZTv0_n16_N8S20198C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20198C1D1Ev,_ZThn52_N8S20198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20198C1D0Ev,_ZTv0_n16_N8S20198C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S20198C1D0Ev,_ZThn52_N8S20198C1D0Ev)() __attribute__((weak));
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S20198C1D1Ev,_ZTv0_n20_N8S20198C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20198C1D1Ev,_ZThn64_N8S20198C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20198C1D0Ev,_ZTv0_n20_N8S20198C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20198C1D0Ev,_ZThn64_N8S20198C1D0Ev)() __attribute__((weak));
extern void _ZN8S20198C53v15Ev();
static  VTBL_ENTRY vtc_S20198C1[] = {
  ABISELECT(112,64),
  ABISELECT(96,52),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C1[0]),
  (VTBL_ENTRY)&_ZN8S20198C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20198C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20198C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20198C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20198C1[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C1D1Ev,_ZTv0_n16_N8S20198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C1D0Ev,_ZTv0_n16_N8S20198C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
  0,
  ABISELECT(-112,-64),
  ABISELECT(-16,-12),
  ABISELECT(-80,-44),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S20198C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20198C1D1Ev,_ZTv0_n20_N8S20198C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20198C1D0Ev,_ZTv0_n20_N8S20198C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C53v15Ev,
};
extern VTBL_ENTRY _ZTV8S20198C1[];
extern void _ZN8S20198C6D1Ev();
extern void _ZN8S20198C6D0Ev();
extern void _ZN8S20198C63v16Ev();
extern void _ZN8S20198C63v17Ev();
extern void _ZN8S20198C63v18Ev();
extern void _ZN8S20198C63v19Ev();
extern void _ZN8S20198C63v20Ev();
extern void _ZN8S20198C63v21Ev();
extern void _ZN8S20198C63v22Ev();
extern void _ZN8S20198C63v23Ev();
extern void _ZN8S20198C63v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C6__8S20198C1[] = {
  ABISELECT(96,52),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&_ZN8S20198C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v18Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v19Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20198C63v24Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C6__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev)();
extern void ABISELECT(_ZThn96_N8S20198C6D1Ev,_ZThn52_N8S20198C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev)();
extern void ABISELECT(_ZThn96_N8S20198C6D0Ev,_ZThn52_N8S20198C6D0Ev)() __attribute__((weak));
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C6__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-64,-32),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20198C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern void _ZN8S20198C3D1Ev();
extern void _ZN8S20198C3D0Ev();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C1[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C3__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20198C3[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern void _ZN8S20198C5D1Ev();
extern void _ZN8S20198C5D0Ev();
extern void _ZN8S20198C53v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C5__8S20198C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&_ZN8S20198C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20198C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20198C53v15Ev,
};
extern void _ZN8S20198C22v4Ev();
extern void _ZN8S20198C22v5Ev();
extern void _ZN8S20198C22v6Ev();
extern void _ZN8S20198C22v7Ev();
extern void _ZN8S20198C22v8Ev();
extern void _ZN8S20198C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C2__8S20198C5__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&_ZN8S20198C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20198C22v9Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev)();
extern void _ZN8S20198C33v10Ev();
extern void _ZN8S20198C33v11Ev();
extern void _ZN8S20198C33v12Ev();
extern void _ZN8S20198C33v13Ev();
extern void _ZN8S20198C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S20198C3__8S20198C5__8S20198C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(-64,-32),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S20198C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C5D1Ev,_ZTv0_n16_N8S20198C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20198C5D0Ev,_ZTv0_n16_N8S20198C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20198C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20198C33v14Ev,
};
static  VTT_ENTRY vtt_S20198C1[] = {
  {&(_ZTV8S20198C1[5]),  5,58},
  {&(_tg__ZTV8S20198C6__8S20198C1[4]),  4,15},
  {&(_tg__ZTV8S20198C2__8S20198C6__8S20198C1[8]),  8,14},
  {&(_tg__ZTV8S20198C3__8S20198C6__8S20198C1[9]),  9,16},
  {&(_ZTV8S20198C1[27]),  27,58},
  {&(_ZTV8S20198C1[42]),  42,58},
  {&(_ZTV8S20198C1[55]),  55,58},
  {&(_tg__ZTV8S20198C3__8S20198C1[3]),  3,10},
  {&(_tg__ZTV8S20198C2__8S20198C3__8S20198C1[8]),  8,14},
  {&(_tg__ZTV8S20198C5__8S20198C1[4]),  4,7},
  {&(_tg__ZTV8S20198C2__8S20198C5__8S20198C1[8]),  8,14},
  {&(_tg__ZTV8S20198C3__8S20198C5__8S20198C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20198C1[];
extern  VTBL_ENTRY _ZTV8S20198C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20198C1[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C6D0Ev,_ZTv0_n16_N8S20198C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20198C6D0Ev,_ZThn52_N8S20198C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C6D1Ev,_ZTv0_n16_N8S20198C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20198C6D1Ev,_ZThn52_N8S20198C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20198C1D0Ev,_ZTv0_n20_N8S20198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20198C1D0Ev,_ZThn64_N8S20198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20198C1D1Ev,_ZTv0_n20_N8S20198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20198C1D1Ev,_ZThn64_N8S20198C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C1D0Ev,_ZTv0_n16_N8S20198C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20198C1D0Ev,_ZThn52_N8S20198C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20198C1D1Ev,_ZTv0_n16_N8S20198C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20198C1D1Ev,_ZThn52_N8S20198C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20198C1 = {  "S20198C1", // class name
  bases_S20198C1, 4,
  &(vtc_S20198C1[0]), // expected_vtbl_contents
  &(vtt_S20198C1[0]), // expected_vtt_contents
  ABISELECT(128,68), // object size
  NSPAIRA(_ZTI8S20198C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20198C1),58, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20198C1),12, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S503C5_nt  {
  void *s503c5f0[2];
  ::S2121C19_nt s503c5f1;
  void *s503c5f2;
  virtual  ~S503C5_nt(); // _ZN9S503C5_ntD1Ev
  virtual void  v2(); // _ZN9S503C5_nt2v2Ev
  virtual void  v3(); // _ZN9S503C5_nt2v3Ev
  virtual void  v4(); // _ZN9S503C5_nt2v4Ev
  virtual void  v5(); // _ZN9S503C5_nt2v5Ev
  virtual void  v6(); // _ZN9S503C5_nt2v6Ev
  virtual void  v7(); // _ZN9S503C5_nt2v7Ev
  virtual void  v8(); // _ZN9S503C5_nt2v8Ev
  virtual void  v9(); // _ZN9S503C5_nt2v9Ev
  virtual void  v10(); // _ZN9S503C5_nt3v10Ev
  virtual void  v11(); // _ZN9S503C5_nt3v11Ev
  S503C5_nt(); // tgen
};
//SIG(-1 S503C5_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp[2] FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} Fp}


 S503C5_nt ::~S503C5_nt(){ note_dtor("S503C5_nt", this);}
void  S503C5_nt ::v2(){vfunc_called(this, "_ZN9S503C5_nt2v2Ev");}
void  S503C5_nt ::v3(){vfunc_called(this, "_ZN9S503C5_nt2v3Ev");}
void  S503C5_nt ::v4(){vfunc_called(this, "_ZN9S503C5_nt2v4Ev");}
void  S503C5_nt ::v5(){vfunc_called(this, "_ZN9S503C5_nt2v5Ev");}
void  S503C5_nt ::v6(){vfunc_called(this, "_ZN9S503C5_nt2v6Ev");}
void  S503C5_nt ::v7(){vfunc_called(this, "_ZN9S503C5_nt2v7Ev");}
void  S503C5_nt ::v8(){vfunc_called(this, "_ZN9S503C5_nt2v8Ev");}
void  S503C5_nt ::v9(){vfunc_called(this, "_ZN9S503C5_nt2v9Ev");}
void  S503C5_nt ::v10(){vfunc_called(this, "_ZN9S503C5_nt3v10Ev");}
void  S503C5_nt ::v11(){vfunc_called(this, "_ZN9S503C5_nt3v11Ev");}
S503C5_nt ::S503C5_nt(){ note_ctor("S503C5_nt", this);} // tgen

//skip512 S503C5_nt

#else // __cplusplus

extern void _ZN9S503C5_ntC1Ev();
extern void _ZN9S503C5_ntD1Ev();
Name_Map name_map_S503C5_nt[] = {
  NSPAIR(_ZN9S503C5_ntC1Ev),
  NSPAIR(_ZN9S503C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern void _ZN9S503C5_ntD1Ev();
extern void _ZN9S503C5_ntD0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
static  VTBL_ENTRY vtc_S503C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S503C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S503C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S503C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI9S503C5_nt[];
VTBL_ENTRY *P__ZTI9S503C5_nt = _ZTI9S503C5_nt; 
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
Class_Descriptor cd_S503C5_nt = {  "S503C5_nt", // class name
  0,0,//no base classes
  &(vtc_S503C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI9S503C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S503C5_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S503C4  : S503C5_nt {
  void *s503c4f0[2];
  ::S2121C26 s503c4f1;
  virtual  ~S503C4(); // _ZN6S503C4D1Ev
  virtual void  v12(); // _ZN6S503C43v12Ev
  virtual void  v13(); // _ZN6S503C43v13Ev
  virtual void  v14(); // _ZN6S503C43v14Ev
  virtual void  v15(); // _ZN6S503C43v15Ev
  S503C4(); // tgen
};
//SIG(-1 S503C4) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] FC3{ m FC4{ m Fp Fi FC5{ m}} Fi} Fp} vd v1 v2 v3 v4 Fp[2] FC6{ m Fp Fi FC7{ m} FC8{ m}}}


 S503C4 ::~S503C4(){ note_dtor("S503C4", this);}
void  S503C4 ::v12(){vfunc_called(this, "_ZN6S503C43v12Ev");}
void  S503C4 ::v13(){vfunc_called(this, "_ZN6S503C43v13Ev");}
void  S503C4 ::v14(){vfunc_called(this, "_ZN6S503C43v14Ev");}
void  S503C4 ::v15(){vfunc_called(this, "_ZN6S503C43v15Ev");}
S503C4 ::S503C4(){ note_ctor("S503C4", this);} // tgen

static void Test_S503C4()
{
  extern Class_Descriptor cd_S503C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S503C4, buf);
    S503C4 *dp, &lv = *(dp=new (buf) S503C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S503C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S503C4)");
    check_base_class_offset(lv, (S503C5_nt*), 0, "S503C4");
    check_field_offset(lv, s503c4f0, ABISELECT(56,32), "S503C4.s503c4f0");
    check_field_offset(lv, s503c4f1, ABISELECT(72,40), "S503C4.s503c4f1");
    test_class_info(&lv, &cd_S503C4);
    dp->~S503C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS503C4(Test_S503C4, "S503C4", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S503C4C1Ev();
extern void _ZN6S503C4D1Ev();
Name_Map name_map_S503C4[] = {
  NSPAIR(_ZN6S503C4C1Ev),
  NSPAIR(_ZN6S503C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S503C5_nt;
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
static Base_Class bases_S503C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S503C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S503C4[];
extern void _ZN6S503C4D1Ev();
extern void _ZN6S503C4D0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
extern void _ZN6S503C43v12Ev();
extern void _ZN6S503C43v13Ev();
extern void _ZN6S503C43v14Ev();
extern void _ZN6S503C43v15Ev();
static  VTBL_ENTRY vtc_S503C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S503C4[0]),
  (VTBL_ENTRY)&_ZN6S503C4D1Ev,
  (VTBL_ENTRY)&_ZN6S503C4D0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN6S503C43v12Ev,
  (VTBL_ENTRY)&_ZN6S503C43v13Ev,
  (VTBL_ENTRY)&_ZN6S503C43v14Ev,
  (VTBL_ENTRY)&_ZN6S503C43v15Ev,
};
extern VTBL_ENTRY _ZTI6S503C4[];
extern  VTBL_ENTRY _ZTV6S503C4[];
Class_Descriptor cd_S503C4 = {  "S503C4", // class name
  bases_S503C4, 1,
  &(vtc_S503C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S503C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S503C4),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S503C3  : S503C4 {
  virtual  ~S503C3(); // _ZN6S503C3D1Ev
  virtual void  v16(); // _ZN6S503C33v16Ev
  S503C3(); // tgen
};
//SIG(-1 S503C3) C1{ BC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} Fp} vd v12 v13 v14 v15 Fp[2] FC7{ m Fp Fi FC8{ m} FC9{ m}}} vd v1}


 S503C3 ::~S503C3(){ note_dtor("S503C3", this);}
void  S503C3 ::v16(){vfunc_called(this, "_ZN6S503C33v16Ev");}
S503C3 ::S503C3(){ note_ctor("S503C3", this);} // tgen

static void Test_S503C3()
{
  extern Class_Descriptor cd_S503C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S503C3, buf);
    S503C3 *dp, &lv = *(dp=new (buf) S503C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S503C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S503C3)");
    check_base_class_offset(lv, (S503C5_nt*)(S503C4*), 0, "S503C3");
    check_base_class_offset(lv, (S503C4*), 0, "S503C3");
    test_class_info(&lv, &cd_S503C3);
    dp->~S503C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS503C3(Test_S503C3, "S503C3", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S503C3C1Ev();
extern void _ZN6S503C3D1Ev();
Name_Map name_map_S503C3[] = {
  NSPAIR(_ZN6S503C3C1Ev),
  NSPAIR(_ZN6S503C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S503C5_nt;
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
extern Class_Descriptor cd_S503C4;
extern VTBL_ENTRY _ZTI6S503C4[];
extern  VTBL_ENTRY _ZTV6S503C4[];
static Base_Class bases_S503C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S503C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S503C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S503C3[];
extern void _ZN6S503C3D1Ev();
extern void _ZN6S503C3D0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
extern void _ZN6S503C43v12Ev();
extern void _ZN6S503C43v13Ev();
extern void _ZN6S503C43v14Ev();
extern void _ZN6S503C43v15Ev();
extern void _ZN6S503C33v16Ev();
static  VTBL_ENTRY vtc_S503C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S503C3[0]),
  (VTBL_ENTRY)&_ZN6S503C3D1Ev,
  (VTBL_ENTRY)&_ZN6S503C3D0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN6S503C43v12Ev,
  (VTBL_ENTRY)&_ZN6S503C43v13Ev,
  (VTBL_ENTRY)&_ZN6S503C43v14Ev,
  (VTBL_ENTRY)&_ZN6S503C43v15Ev,
  (VTBL_ENTRY)&_ZN6S503C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S503C3[];
extern  VTBL_ENTRY _ZTV6S503C3[];
Class_Descriptor cd_S503C3 = {  "S503C3", // class name
  bases_S503C3, 2,
  &(vtc_S503C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S503C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S503C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S503C2  : S503C3 {
  virtual  ~S503C2(); // _ZN6S503C2D1Ev
  virtual void  v17(); // _ZN6S503C23v17Ev
  S503C2(); // tgen
};
//SIG(-1 S503C2) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC5{ m FC6{ m Fp Fi FC7{ m}} Fi} Fp} vd v12 v13 v14 v15 Fp[2] FC8{ m Fp Fi FC9{ m} FC10{ m}}} vd v16} vd v1}


 S503C2 ::~S503C2(){ note_dtor("S503C2", this);}
void  S503C2 ::v17(){vfunc_called(this, "_ZN6S503C23v17Ev");}
S503C2 ::S503C2(){ note_ctor("S503C2", this);} // tgen

static void Test_S503C2()
{
  extern Class_Descriptor cd_S503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S503C2, buf);
    S503C2 *dp, &lv = *(dp=new (buf) S503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S503C2)");
    check_base_class_offset(lv, (S503C5_nt*)(S503C4*)(S503C3*), 0, "S503C2");
    check_base_class_offset(lv, (S503C4*)(S503C3*), 0, "S503C2");
    check_base_class_offset(lv, (S503C3*), 0, "S503C2");
    test_class_info(&lv, &cd_S503C2);
    dp->~S503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS503C2(Test_S503C2, "S503C2", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S503C2C1Ev();
extern void _ZN6S503C2D1Ev();
Name_Map name_map_S503C2[] = {
  NSPAIR(_ZN6S503C2C1Ev),
  NSPAIR(_ZN6S503C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S503C5_nt;
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
extern Class_Descriptor cd_S503C4;
extern VTBL_ENTRY _ZTI6S503C4[];
extern  VTBL_ENTRY _ZTV6S503C4[];
extern Class_Descriptor cd_S503C3;
extern VTBL_ENTRY _ZTI6S503C3[];
extern  VTBL_ENTRY _ZTV6S503C3[];
static Base_Class bases_S503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S503C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S503C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S503C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S503C2[];
extern void _ZN6S503C2D1Ev();
extern void _ZN6S503C2D0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
extern void _ZN6S503C43v12Ev();
extern void _ZN6S503C43v13Ev();
extern void _ZN6S503C43v14Ev();
extern void _ZN6S503C43v15Ev();
extern void _ZN6S503C33v16Ev();
extern void _ZN6S503C23v17Ev();
static  VTBL_ENTRY vtc_S503C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S503C2[0]),
  (VTBL_ENTRY)&_ZN6S503C2D1Ev,
  (VTBL_ENTRY)&_ZN6S503C2D0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN6S503C43v12Ev,
  (VTBL_ENTRY)&_ZN6S503C43v13Ev,
  (VTBL_ENTRY)&_ZN6S503C43v14Ev,
  (VTBL_ENTRY)&_ZN6S503C43v15Ev,
  (VTBL_ENTRY)&_ZN6S503C33v16Ev,
  (VTBL_ENTRY)&_ZN6S503C23v17Ev,
};
extern VTBL_ENTRY _ZTI6S503C2[];
extern  VTBL_ENTRY _ZTV6S503C2[];
Class_Descriptor cd_S503C2 = {  "S503C2", // class name
  bases_S503C2, 3,
  &(vtc_S503C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S503C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S503C2),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S503C1  : S503C2 {
  virtual  ~S503C1(); // _ZN6S503C1D1Ev
  virtual void  v1(); // _ZN6S503C12v1Ev
  S503C1(); // tgen
};
//SIG(1 S503C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fp[2] FC6{ m FC7{ m Fp Fi FC8{ m}} Fi} Fp} vd v12 v13 v14 v15 Fp[2] FC9{ m Fp Fi FC10{ m} FC11{ m}}} vd v16} vd v17} vd v1}


 S503C1 ::~S503C1(){ note_dtor("S503C1", this);}
void  S503C1 ::v1(){vfunc_called(this, "_ZN6S503C12v1Ev");}
S503C1 ::S503C1(){ note_ctor("S503C1", this);} // tgen

static void Test_S503C1()
{
  extern Class_Descriptor cd_S503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S503C1, buf);
    S503C1 *dp, &lv = *(dp=new (buf) S503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S503C1)");
    check_base_class_offset(lv, (S503C5_nt*)(S503C4*)(S503C3*)(S503C2*), 0, "S503C1");
    check_base_class_offset(lv, (S503C4*)(S503C3*)(S503C2*), 0, "S503C1");
    check_base_class_offset(lv, (S503C3*)(S503C2*), 0, "S503C1");
    check_base_class_offset(lv, (S503C2*), 0, "S503C1");
    test_class_info(&lv, &cd_S503C1);
    dp->~S503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS503C1(Test_S503C1, "S503C1", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN6S503C1C1Ev();
extern void _ZN6S503C1D1Ev();
Name_Map name_map_S503C1[] = {
  NSPAIR(_ZN6S503C1C1Ev),
  NSPAIR(_ZN6S503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S503C5_nt;
extern VTBL_ENTRY _ZTI9S503C5_nt[];
extern  VTBL_ENTRY _ZTV9S503C5_nt[];
extern Class_Descriptor cd_S503C4;
extern VTBL_ENTRY _ZTI6S503C4[];
extern  VTBL_ENTRY _ZTV6S503C4[];
extern Class_Descriptor cd_S503C3;
extern VTBL_ENTRY _ZTI6S503C3[];
extern  VTBL_ENTRY _ZTV6S503C3[];
extern Class_Descriptor cd_S503C2;
extern VTBL_ENTRY _ZTI6S503C2[];
extern  VTBL_ENTRY _ZTV6S503C2[];
static Base_Class bases_S503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S503C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S503C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S503C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S503C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S503C1[];
extern void _ZN6S503C1D1Ev();
extern void _ZN6S503C1D0Ev();
extern void _ZN9S503C5_nt2v2Ev();
extern void _ZN9S503C5_nt2v3Ev();
extern void _ZN9S503C5_nt2v4Ev();
extern void _ZN9S503C5_nt2v5Ev();
extern void _ZN9S503C5_nt2v6Ev();
extern void _ZN9S503C5_nt2v7Ev();
extern void _ZN9S503C5_nt2v8Ev();
extern void _ZN9S503C5_nt2v9Ev();
extern void _ZN9S503C5_nt3v10Ev();
extern void _ZN9S503C5_nt3v11Ev();
extern void _ZN6S503C43v12Ev();
extern void _ZN6S503C43v13Ev();
extern void _ZN6S503C43v14Ev();
extern void _ZN6S503C43v15Ev();
extern void _ZN6S503C33v16Ev();
extern void _ZN6S503C23v17Ev();
extern void _ZN6S503C12v1Ev();
static  VTBL_ENTRY vtc_S503C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S503C1[0]),
  (VTBL_ENTRY)&_ZN6S503C1D1Ev,
  (VTBL_ENTRY)&_ZN6S503C1D0Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S503C5_nt3v11Ev,
  (VTBL_ENTRY)&_ZN6S503C43v12Ev,
  (VTBL_ENTRY)&_ZN6S503C43v13Ev,
  (VTBL_ENTRY)&_ZN6S503C43v14Ev,
  (VTBL_ENTRY)&_ZN6S503C43v15Ev,
  (VTBL_ENTRY)&_ZN6S503C33v16Ev,
  (VTBL_ENTRY)&_ZN6S503C23v17Ev,
  (VTBL_ENTRY)&_ZN6S503C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S503C1[];
extern  VTBL_ENTRY _ZTV6S503C1[];
Class_Descriptor cd_S503C1 = {  "S503C1", // class name
  bases_S503C1, 4,
  &(vtc_S503C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI6S503C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S503C1),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C7  {
  virtual void  v1(); // _ZN8S19434C72v1Ev
  ~S19434C7(); // tgen
  S19434C7(); // tgen
};
//SIG(-1 S19434C7) C1{ v1}


void  S19434C7 ::v1(){vfunc_called(this, "_ZN8S19434C72v1Ev");}
S19434C7 ::~S19434C7(){ note_dtor("S19434C7", this);} // tgen
S19434C7 ::S19434C7(){ note_ctor("S19434C7", this);} // tgen

static void Test_S19434C7()
{
  extern Class_Descriptor cd_S19434C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19434C7, buf);
    S19434C7 *dp, &lv = *(dp=new (buf) S19434C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19434C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C7)");
    test_class_info(&lv, &cd_S19434C7);
    dp->~S19434C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C7(Test_S19434C7, "S19434C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19434C7C1Ev();
extern void _ZN8S19434C7D1Ev();
Name_Map name_map_S19434C7[] = {
  NSPAIR(_ZN8S19434C7C1Ev),
  NSPAIR(_ZN8S19434C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19434C7[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C7[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
Class_Descriptor cd_S19434C7 = {  "S19434C7", // class name
  0,0,//no base classes
  &(vtc_S19434C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19434C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19434C7),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C6  : virtual S2121C38 , S19434C7 , virtual S2121C28 {
  ~S19434C6(); // tgen
  S19434C6(); // tgen
};
//SIG(-1 S19434C6) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S19434C6 ::~S19434C6(){ note_dtor("S19434C6", this);} // tgen
S19434C6 ::S19434C6(){ note_ctor("S19434C6", this);} // tgen

static void Test_S19434C6()
{
  extern Class_Descriptor cd_S19434C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19434C6, buf);
    S19434C6 *dp, &lv = *(dp=new (buf) S19434C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19434C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C6)");
    check_base_class_offset(lv, (S2121C38*), 0, "S19434C6");
    check_base_class_offset(lv, (S19434C7*), 0, "S19434C6");
    check_base_class_offset(lv, (S2121C28*), 0, "S19434C6");
    test_class_info(&lv, &cd_S19434C6);
    dp->~S19434C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C6(Test_S19434C6, "S19434C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19434C6C1Ev();
extern void _ZN8S19434C6D1Ev();
Name_Map name_map_S19434C6[] = {
  NSPAIR(_ZN8S19434C6C1Ev),
  NSPAIR(_ZN8S19434C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S19434C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C6[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S19434C6[];
static  VTT_ENTRY vtt_S19434C6[] = {
  {&(_ZTV8S19434C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
Class_Descriptor cd_S19434C6 = {  "S19434C6", // class name
  bases_S19434C6, 3,
  &(vtc_S19434C6[0]), // expected_vtbl_contents
  &(vtt_S19434C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19434C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19434C6),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C6),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C4  : S2121C38 , S19434C6 {
  virtual void  v2(); // _ZN8S19434C42v2Ev
  ~S19434C4(); // tgen
  S19434C4(); // tgen
};
//SIG(-1 S19434C4) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S19434C4 ::v2(){vfunc_called(this, "_ZN8S19434C42v2Ev");}
S19434C4 ::~S19434C4(){ note_dtor("S19434C4", this);} // tgen
S19434C4 ::S19434C4(){ note_ctor("S19434C4", this);} // tgen

static void Test_S19434C4()
{
  extern Class_Descriptor cd_S19434C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19434C4, buf);
    S19434C4 *dp, &lv = *(dp=new (buf) S19434C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19434C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C4)");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S19434C4");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*), ABISELECT(8,4), "S19434C4");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*), 0, "S19434C4");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*), 0, "S19434C4");
    check_base_class_offset(lv, (S19434C6*), 0, "S19434C4");
    test_class_info(&lv, &cd_S19434C4);
    dp->~S19434C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C4(Test_S19434C4, "S19434C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19434C4C1Ev();
extern void _ZN8S19434C4D1Ev();
Name_Map name_map_S19434C4[] = {
  NSPAIR(_ZN8S19434C4C1Ev),
  NSPAIR(_ZN8S19434C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
static Base_Class bases_S19434C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19434C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C4[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY vtc_S19434C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19434C4[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__8S19434C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C4[] = {
  {&(_ZTV8S19434C4[4]),  4,6},
  {&(_tg__ZTV8S19434C6__8S19434C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
Class_Descriptor cd_S19434C4 = {  "S19434C4", // class name
  bases_S19434C4, 5,
  &(vtc_S19434C4[0]), // expected_vtbl_contents
  &(vtt_S19434C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19434C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19434C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C4),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C3  : virtual S19434C4 {
  int s19434c3f0;
  ~S19434C3(); // tgen
  S19434C3(); // tgen
};
//SIG(-1 S19434C3) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S19434C3 ::~S19434C3(){ note_dtor("S19434C3", this);} // tgen
S19434C3 ::S19434C3(){ note_ctor("S19434C3", this);} // tgen

static void Test_S19434C3()
{
  extern Class_Descriptor cd_S19434C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19434C3, buf);
    S19434C3 *dp, &lv = *(dp=new (buf) S19434C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19434C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C3)");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), 0, "S19434C3");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), ABISELECT(12,8), "S19434C3");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), 0, "S19434C3");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), 0, "S19434C3");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), 0, "S19434C3");
    check_base_class_offset(lv, (S19434C4*), 0, "S19434C3");
    check_field_offset(lv, s19434c3f0, ABISELECT(8,4), "S19434C3.s19434c3f0");
    test_class_info(&lv, &cd_S19434C3);
    dp->~S19434C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C3(Test_S19434C3, "S19434C3", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19434C3C1Ev();
extern void _ZN8S19434C3D1Ev();
Name_Map name_map_S19434C3[] = {
  NSPAIR(_ZN8S19434C3C1Ev),
  NSPAIR(_ZN8S19434C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
static Base_Class bases_S19434C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19434C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C3[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY vtc_S19434C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C3[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern VTBL_ENTRY _ZTV8S19434C3[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C3[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__8S19434C3[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C3[] = {
  {&(_ZTV8S19434C3[7]),  7,9},
  {&(_ZTV8S19434C3[7]),  7,9},
  {&(_tg__ZTV8S19434C4__8S19434C3[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__8S19434C3[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19434C3[];
extern  VTBL_ENTRY _ZTV8S19434C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C3[];
Class_Descriptor cd_S19434C3 = {  "S19434C3", // class name
  bases_S19434C3, 6,
  &(vtc_S19434C3[0]), // expected_vtbl_contents
  &(vtt_S19434C3[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19434C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19434C3),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C3),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C11  : S19434C6 , S19434C7 {
  ~S19434C11(); // tgen
  S19434C11(); // tgen
};
//SIG(-1 S19434C11) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S19434C11 ::~S19434C11(){ note_dtor("S19434C11", this);} // tgen
S19434C11 ::S19434C11(){ note_ctor("S19434C11", this);} // tgen

static void Test_S19434C11()
{
  extern Class_Descriptor cd_S19434C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19434C11, buf);
    S19434C11 *dp, &lv = *(dp=new (buf) S19434C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19434C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C11)");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*), 0, "S19434C11");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*), 0, "S19434C11");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*), 0, "S19434C11");
    check_base_class_offset(lv, (S19434C6*), 0, "S19434C11");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*), ABISELECT(8,4), "S19434C11");
    test_class_info(&lv, &cd_S19434C11);
    dp->~S19434C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C11(Test_S19434C11, "S19434C11", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19434C11C1Ev();
extern void _ZN9S19434C11D1Ev();
Name_Map name_map_S19434C11[] = {
  NSPAIR(_ZN9S19434C11C1Ev),
  NSPAIR(_ZN9S19434C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
static Base_Class bases_S19434C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19434C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19434C7,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19434C11[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV9S19434C11[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__9S19434C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C11[] = {
  {&(_ZTV9S19434C11[4]),  4,8},
  {&(_tg__ZTV8S19434C6__9S19434C11[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
Class_Descriptor cd_S19434C11 = {  "S19434C11", // class name
  bases_S19434C11, 5,
  &(vtc_S19434C11[0]), // expected_vtbl_contents
  &(vtt_S19434C11[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19434C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19434C11),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19434C11),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C12  : S19434C7 , S2121C28 , virtual S2121C38 {
  ~S19434C12(); // tgen
  S19434C12(); // tgen
};
//SIG(-1 S19434C12) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S19434C12 ::~S19434C12(){ note_dtor("S19434C12", this);} // tgen
S19434C12 ::S19434C12(){ note_ctor("S19434C12", this);} // tgen

static void Test_S19434C12()
{
  extern Class_Descriptor cd_S19434C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19434C12, buf);
    S19434C12 *dp, &lv = *(dp=new (buf) S19434C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19434C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C12)");
    check_base_class_offset(lv, (S19434C7*), 0, "S19434C12");
    check_base_class_offset(lv, (S2121C28*), 0, "S19434C12");
    check_base_class_offset(lv, (S2121C38*), 0, "S19434C12");
    test_class_info(&lv, &cd_S19434C12);
    dp->~S19434C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C12(Test_S19434C12, "S19434C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19434C12C1Ev();
extern void _ZN9S19434C12D1Ev();
Name_Map name_map_S19434C12[] = {
  NSPAIR(_ZN9S19434C12C1Ev),
  NSPAIR(_ZN9S19434C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S19434C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19434C12[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV9S19434C12[];
static  VTT_ENTRY vtt_S19434C12[] = {
  {&(_ZTV9S19434C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
Class_Descriptor cd_S19434C12 = {  "S19434C12", // class name
  bases_S19434C12, 3,
  &(vtc_S19434C12[0]), // expected_vtbl_contents
  &(vtt_S19434C12[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19434C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19434C12),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19434C12),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C10  : virtual S2121C38 , virtual S19434C11 , virtual S19434C4 , virtual S19434C12 , S19434C7 {
  ~S19434C10(); // tgen
  S19434C10(); // tgen
};
//SIG(-1 S19434C10) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S19434C10 ::~S19434C10(){ note_dtor("S19434C10", this);} // tgen
S19434C10 ::S19434C10(){ note_ctor("S19434C10", this);} // tgen

static void Test_S19434C10()
{
  extern Class_Descriptor cd_S19434C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19434C10, buf);
    S19434C10 *dp, &lv = *(dp=new (buf) S19434C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19434C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C10)");
    /*is_ambiguous_... S19434C10::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S19434C10");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C11*), 0, "S19434C10");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), 0, "S19434C10");
    check_base_class_offset(lv, (S2121C38*)(S19434C12*), 0, "S19434C10");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C11*), ABISELECT(8,4), "S19434C10");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C11*), 0, "S19434C10");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), 0, "S19434C10");
    check_base_class_offset(lv, (S19434C6*)(S19434C11*), ABISELECT(8,4), "S19434C10");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C11*), ABISELECT(16,8), "S19434C10");
    check_base_class_offset(lv, (S19434C11*), ABISELECT(8,4), "S19434C10");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), ABISELECT(24,12), "S19434C10");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), ABISELECT(24,12), "S19434C10");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), ABISELECT(24,12), "S19434C10");
    check_base_class_offset(lv, (S19434C4*), ABISELECT(24,12), "S19434C10");
    check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(32,16), "S19434C10");
    check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(32,16), "S19434C10");
    check_base_class_offset(lv, (S19434C12*), ABISELECT(32,16), "S19434C10");
    /*is_ambiguous_... S19434C10::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*), 0, "S19434C10");
    test_class_info(&lv, &cd_S19434C10);
    dp->~S19434C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C10(Test_S19434C10, "S19434C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S19434C10C1Ev();
extern void _ZN9S19434C10D1Ev();
Name_Map name_map_S19434C10[] = {
  NSPAIR(_ZN9S19434C10C1Ev),
  NSPAIR(_ZN9S19434C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C11;
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
static Base_Class bases_S19434C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19434C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C11,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19434C4,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19434C10[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C10[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV9S19434C10[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C69S19434C11__9S19434C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__A1__9S19434C10[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C10[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C10[] = {
  {&(_ZTV9S19434C10[7]),  7,30},
  {&(_ZTV9S19434C10[13]),  13,30},
  {&(_ZTV9S19434C10[16]),  16,30},
  {&(_ZTV9S19434C10[23]),  23,30},
  {&(_ZTV9S19434C10[29]),  29,30},
  {&(_tg__ZTV9S19434C11__9S19434C10[4]),  4,5},
  {&(_tg__ZTV8S19434C69S19434C11__9S19434C10[4]),  4,5},
  {&(_tg__ZTV8S19434C4__9S19434C10[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__A1__9S19434C10[4]),  4,5},
  {&(_tg__ZTV9S19434C12__9S19434C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
Class_Descriptor cd_S19434C10 = {  "S19434C10", // class name
  bases_S19434C10, 14,
  &(vtc_S19434C10[0]), // expected_vtbl_contents
  &(vtt_S19434C10[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S19434C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19434C10),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19434C10),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C9  : S19434C10 , virtual S2121C24 , S19434C6 , S2121C28 , S19434C12 {
  virtual  ~S19434C9(); // _ZN8S19434C9D2Ev
  S19434C9(); // tgen
};
//SIG(-1 S19434C9) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S19434C9 ::~S19434C9(){ note_dtor("S19434C9", this);}
S19434C9 ::S19434C9(){ note_ctor("S19434C9", this);} // tgen

static void Test_S19434C9()
{
  extern Class_Descriptor cd_S19434C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S19434C9, buf);
    S19434C9 *dp, &lv = *(dp=new (buf) S19434C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S19434C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C9)");
    /*is_ambiguous_... S19434C10::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C10*), 0, "S19434C9");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C11*), 0, "S19434C9");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C6*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*), 0, "S19434C9");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C11*), ABISELECT(24,12), "S19434C9");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C11*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), ABISELECT(40,20), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C6*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S19434C6*)(S19434C11*), ABISELECT(24,12), "S19434C9");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C11*), ABISELECT(32,16), "S19434C9");
    check_base_class_offset(lv, (S19434C11*)(S19434C10*), ABISELECT(24,12), "S19434C9");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), ABISELECT(40,20), "S19434C9");
    check_base_class_offset(lv, (S19434C4*)(S19434C10*), ABISELECT(40,20), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(48,24), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(48,24), "S19434C9");
    check_base_class_offset(lv, (S19434C12*)(S19434C10*), ABISELECT(48,24), "S19434C9");
    /*is_ambiguous_... S19434C10::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C10*), 0, "S19434C9");
    check_base_class_offset(lv, (S19434C10*), 0, "S19434C9");
    check_base_class_offset(lv, (S2121C24*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C6*), ABISELECT(8,4), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C6*), ABISELECT(8,4), "S19434C9");
    /*is_ambiguous_... S19434C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(16,8), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(16,8), "S19434C9");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C12*), ABISELECT(16,8), "S19434C9");
    test_class_info(&lv, &cd_S19434C9);
    dp->~S19434C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C9(Test_S19434C9, "S19434C9", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S19434C9C1Ev();
extern void _ZN8S19434C9D2Ev();
Name_Map name_map_S19434C9[] = {
  NSPAIR(_ZN8S19434C9C1Ev),
  NSPAIR(_ZN8S19434C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C11;
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C10;
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
static Base_Class bases_S19434C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19434C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C11,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19434C4,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19434C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19434C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C9[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C9D1Ev();
extern void _ZN8S19434C9D0Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C9[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S19434C9[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C10__8S19434C9[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C10__8S19434C9[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__9S19434C10__8S19434C9[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C10__8S19434C9[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C10__8S19434C9[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__A2__8S19434C9[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__A__8S19434C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C9[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C69S19434C11__8S19434C9[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C9[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__A1__8S19434C9[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C9[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C9[] = {
  {&(_ZTV8S19434C9[8]),  8,42},
  {&(_tg__ZTV9S19434C10__8S19434C9[7]),  7,8},
  {&(_tg__ZTV9S19434C11__9S19434C10__8S19434C9[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__9S19434C10__8S19434C9[2]),  2,3},
  {&(_tg__ZTV8S19434C4__9S19434C10__8S19434C9[6]),  6,8},
  {&(_tg__ZTV9S19434C12__9S19434C10__8S19434C9[4]),  4,5},
  {&(_tg__ZTV8S19434C6__A2__8S19434C9[4]),  4,5},
  {&(_tg__ZTV9S19434C12__A__8S19434C9[3]),  3,4},
  {&(_ZTV8S19434C9[25]),  25,42},
  {&(_ZTV8S19434C9[28]),  28,42},
  {&(_ZTV8S19434C9[35]),  35,42},
  {&(_ZTV8S19434C9[41]),  41,42},
  {&(_ZTV8S19434C9[15]),  15,42},
  {&(_ZTV8S19434C9[19]),  19,42},
  {&(_tg__ZTV9S19434C11__8S19434C9[4]),  4,5},
  {&(_tg__ZTV8S19434C69S19434C11__8S19434C9[4]),  4,5},
  {&(_tg__ZTV8S19434C4__8S19434C9[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__A1__8S19434C9[4]),  4,5},
  {&(_tg__ZTV9S19434C12__8S19434C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19434C9[];
extern  VTBL_ENTRY _ZTV8S19434C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C9[];
Class_Descriptor cd_S19434C9 = {  "S19434C9", // class name
  bases_S19434C9, 22,
  &(vtc_S19434C9[0]), // expected_vtbl_contents
  &(vtt_S19434C9[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S19434C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19434C9),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C9),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C2  : S19434C3 , S19434C9 {
  int s19434c2f0;
  virtual  ~S19434C2(); // _ZN8S19434C2D2Ev
  S19434C2(); // tgen
};
//SIG(-1 S19434C2) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} BC8{ BC9{ VBC4 VBC10{ BC5 BC6} VBC3 VBC11{ BC6 BC7 VBC4} BC6} VBC12{ m} BC5 BC7 BC11 vd} vd Fi}


 S19434C2 ::~S19434C2(){ note_dtor("S19434C2", this);}
S19434C2 ::S19434C2(){ note_ctor("S19434C2", this);} // tgen

static void Test_S19434C2()
{
  extern Class_Descriptor cd_S19434C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19434C2, buf);
    S19434C2 *dp, &lv = *(dp=new (buf) S19434C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19434C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19434C2)");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), 0, "S19434C2");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), ABISELECT(44,24), "S19434C2");
    /*is_ambiguous_... S19434C10::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C10*)(S19434C9*), ABISELECT(44,24), "S19434C2");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C11*), ABISELECT(44,24), "S19434C2");
    /*is_ambiguous_... S19434C2::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*), ABISELECT(44,24), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C9*), ABISELECT(44,24), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*)(S19434C9*), ABISELECT(44,24), "S19434C2");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), 0, "S19434C2");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), 0, "S19434C2");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C11*), 0, "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C9*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C4*)(S19434C3*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C4*)(S19434C10*)(S19434C9*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C3*), 0, "S19434C2");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C11*), ABISELECT(48,24), "S19434C2");
    check_base_class_offset(lv, (S19434C6*)(S19434C11*), ABISELECT(48,24), "S19434C2");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C11*), ABISELECT(56,28), "S19434C2");
    check_base_class_offset(lv, (S19434C11*)(S19434C10*)(S19434C9*), ABISELECT(48,24), "S19434C2");
    /*is_ambiguous_... S19434C2::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(64,32), "S19434C2");
    /*is_ambiguous_... S19434C2::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(64,32), "S19434C2");
    check_base_class_offset(lv, (S19434C12*)(S19434C10*)(S19434C9*), ABISELECT(64,32), "S19434C2");
    /*is_ambiguous_... S19434C10::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C10*)(S19434C9*), ABISELECT(16,8), "S19434C2");
    check_base_class_offset(lv, (S19434C10*)(S19434C9*), ABISELECT(16,8), "S19434C2");
    check_base_class_offset(lv, (S2121C24*)(S19434C9*), 0, "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C9*), ABISELECT(24,12), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C6*)(S19434C9*), ABISELECT(24,12), "S19434C2");
    /*is_ambiguous_... S19434C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C9*), ABISELECT(16,8), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*)(S19434C9*), ABISELECT(32,16), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*)(S19434C9*), ABISELECT(32,16), "S19434C2");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C12*)(S19434C9*), ABISELECT(32,16), "S19434C2");
    check_base_class_offset(lv, (S19434C9*), ABISELECT(16,8), "S19434C2");
    check_field_offset(lv, s19434c2f0, ABISELECT(40,20), "S19434C2.s19434c2f0");
    test_class_info(&lv, &cd_S19434C2);
    dp->~S19434C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C2(Test_S19434C2, "S19434C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S19434C2C1Ev();
extern void _ZN8S19434C2D2Ev();
Name_Map name_map_S19434C2[] = {
  NSPAIR(_ZN8S19434C2C1Ev),
  NSPAIR(_ZN8S19434C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
extern Class_Descriptor cd_S19434C3;
extern VTBL_ENTRY _ZTI8S19434C3[];
extern  VTBL_ENTRY _ZTV8S19434C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C3[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C11;
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C10;
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C9;
extern VTBL_ENTRY _ZTI8S19434C9[];
extern  VTBL_ENTRY _ZTV8S19434C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C9[];
static Base_Class bases_S19434C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(44,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19434C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19434C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19434C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(56,28), //bcp->offset
    40, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19434C11,    ABISELECT(48,24), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(64,32), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19434C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(24,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(32,16), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19434C9,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C2[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void _ZN8S19434C2D1Ev();
extern void _ZN8S19434C2D0Ev();
extern void _ZN8S19434C72v1Ev();
extern void ABISELECT(_ZThn16_N8S19434C2D1Ev,_ZThn8_N8S19434C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19434C2D0Ev,_ZThn8_N8S19434C2D0Ev)();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C2[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19434C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19434C2D1Ev,_ZThn8_N8S19434C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19434C2D0Ev,_ZThn8_N8S19434C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(12,8),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-20,-8),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S19434C2[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C3__8S19434C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C3[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C9D1Ev();
extern void _ZN8S19434C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C9__8S19434C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D0Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C108S19434C9__8S19434C2[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(28,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C108S19434C9__8S19434C2[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__9S19434C108S19434C9__8S19434C2[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C108S19434C9__8S19434C2[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C108S19434C9__8S19434C2[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C9__A2__8S19434C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C128S19434C9__A1__8S19434C2[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C9__8S19434C2[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__8S19434C9__8S19434C2[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C9__8S19434C2[] = {
  0,
  0,
  0,
  ABISELECT(44,24),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C9__8S19434C2[] = {
  0,
  ABISELECT(-20,-8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__A2__8S19434C9__8S19434C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(20,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__A__8S19434C9__8S19434C2[] = {
  ABISELECT(12,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C2[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__8S19434C2[] = {
  0,
  ABISELECT(44,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C2[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C69S19434C11__A1__8S19434C2[] = {
  ABISELECT(-48,-24),
  ABISELECT(-4,0),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C2[] = {
  ABISELECT(-20,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C2[] = {
  {&(_ZTV8S19434C2[10]),  10,48},
  {&(_tg__ZTV8S19434C3__8S19434C2[7]),  7,9},
  {&(_tg__ZTV8S19434C3__8S19434C2[7]),  7,9},
  {&(_tg__ZTV8S19434C9__8S19434C2[8]),  8,11},
  {&(_tg__ZTV9S19434C108S19434C9__8S19434C2[7]),  7,8},
  {&(_tg__ZTV9S19434C11__9S19434C108S19434C9__8S19434C2[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__9S19434C108S19434C9__8S19434C2[2]),  2,3},
  {&(_tg__ZTV8S19434C4__9S19434C108S19434C9__8S19434C2[6]),  6,8},
  {&(_tg__ZTV9S19434C12__9S19434C108S19434C9__8S19434C2[4]),  4,5},
  {&(_tg__ZTV8S19434C68S19434C9__A2__8S19434C2[4]),  4,5},
  {&(_tg__ZTV9S19434C128S19434C9__A1__8S19434C2[3]),  3,4},
  {&(_tg__ZTV9S19434C11__8S19434C9__8S19434C2[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__8S19434C9__8S19434C2[2]),  2,3},
  {&(_tg__ZTV8S19434C4__8S19434C9__8S19434C2[6]),  6,8},
  {&(_tg__ZTV9S19434C12__8S19434C9__8S19434C2[4]),  4,5},
  {&(_tg__ZTV8S19434C6__A2__8S19434C9__8S19434C2[4]),  4,5},
  {&(_tg__ZTV9S19434C12__A__8S19434C9__8S19434C2[3]),  3,4},
  {&(_ZTV8S19434C2[10]),  10,48},
  {&(_ZTV8S19434C2[22]),  22,48},
  {&(_ZTV8S19434C2[39]),  39,48},
  {&(_ZTV8S19434C2[42]),  42,48},
  {&(_ZTV8S19434C2[47]),  47,48},
  {&(_ZTV8S19434C2[29]),  29,48},
  {&(_ZTV8S19434C2[33]),  33,48},
  {&(_tg__ZTV8S19434C4__8S19434C2[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__8S19434C2[4]),  4,5},
  {&(_tg__ZTV9S19434C11__8S19434C2[4]),  4,5},
  {&(_tg__ZTV8S19434C69S19434C11__A1__8S19434C2[4]),  4,5},
  {&(_tg__ZTV9S19434C12__8S19434C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19434C2[];
extern  VTBL_ENTRY _ZTV8S19434C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C2[];
Class_Descriptor cd_S19434C2 = {  "S19434C2", // class name
  bases_S19434C2, 24,
  &(vtc_S19434C2[0]), // expected_vtbl_contents
  &(vtt_S19434C2[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S19434C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19434C2),48, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C2),29, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19434C1  : virtual S19434C2 , S19434C10 , S6282C14_nt , S19434C6 {
  long double s19434c1f0;
  ~S19434C1(); // tgen
  S19434C1(); // tgen
};
//SIG(1 S19434C1) C1{ VBC2{ BC3{ VBC4{ BC5{ m} BC6{ VBC5 BC7{ v1} VBC8{ m}} v2} Fi} BC9{ BC10{ VBC5 VBC11{ BC6 BC7} VBC4 VBC12{ BC7 BC8 VBC5} BC7} VBC13{ m} BC6 BC8 BC12 vd} vd Fi} BC10 BC14{ vd m Fi} BC6 FD}


S19434C1 ::~S19434C1(){ note_dtor("S19434C1", this);} // tgen
S19434C1 ::S19434C1(){ note_ctor("S19434C1", this);} // tgen

static void Test_S19434C1()
{
  extern Class_Descriptor cd_S19434C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19434C1, buf);
    S19434C1 *dp, &lv = *(dp=new (buf) S19434C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19434C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19434C1)");
    /*is_ambiguous_... S19434C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C4*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C4*), 0, "S19434C1");
    /*is_ambiguous_... S19434C10::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C10*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C11*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*), 0, "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C6*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C12*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C10*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S19434C6*), 0, "S19434C1");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C4*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C4*), 0, "S19434C1");
    check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C11*), 0, "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C6*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C6*), 0, "S19434C1");
    check_base_class_offset(lv, (S19434C6*)(S19434C4*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S19434C4*)(S19434C3*)(S19434C2*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S19434C4*)(S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(48,28), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C4*)(S19434C10*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S19434C3*)(S19434C2*), ABISELECT(48,28), "S19434C1");
    check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C11*), ABISELECT(96,52), "S19434C1");
    check_base_class_offset(lv, (S19434C6*)(S19434C11*), ABISELECT(96,52), "S19434C1");
    /*is_ambiguous_... S19434C11::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C11*), ABISELECT(104,56), "S19434C1");
    check_base_class_offset(lv, (S19434C11*)(S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(96,52), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C11*)(S19434C10*), ABISELECT(96,52), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*), ABISELECT(112,60), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*), ABISELECT(112,60), "S19434C1");
    check_base_class_offset(lv, (S19434C12*)(S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(112,60), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C12*)(S19434C10*), ABISELECT(112,60), "S19434C1");
    /*is_ambiguous_... S19434C10::S19434C7 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(64,36), "S19434C1");
    check_base_class_offset(lv, (S19434C10*)(S19434C9*)(S19434C2*), ABISELECT(64,36), "S19434C1");
    check_base_class_offset(lv, (S2121C24*)(S19434C9*)(S19434C2*), 0, "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C6*)(S19434C9*)(S19434C2*), ABISELECT(72,40), "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C6*)(S19434C9*)(S19434C2*), ABISELECT(72,40), "S19434C1");
    /*is_ambiguous_... S19434C9::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C9*)(S19434C2*), ABISELECT(64,36), "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C12*)(S19434C9*)(S19434C2*), ABISELECT(80,44), "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S2121C28*)(S19434C12*)(S19434C9*)(S19434C2*), ABISELECT(80,44), "S19434C1");
    /*is_ambiguous_... S19434C9::S19434C12 */ AMB_check_base_class_offset(lv, (S19434C12*)(S19434C9*)(S19434C2*), ABISELECT(80,44), "S19434C1");
    check_base_class_offset(lv, (S19434C9*)(S19434C2*), ABISELECT(64,36), "S19434C1");
    check_base_class_offset(lv, (S19434C2*), ABISELECT(48,28), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C10*), 0, "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C10 */ AMB_check_base_class_offset(lv, (S19434C10*), 0, "S19434C1");
    check_base_class_offset(lv, (S6282C14_nt*), ABISELECT(8,4), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C7*)(S19434C6*), ABISELECT(24,12), "S19434C1");
    /*is_ambiguous_... S19434C1::S19434C6 */ AMB_check_base_class_offset(lv, (S19434C6*), ABISELECT(24,12), "S19434C1");
    check_field_offset(lv, s19434c1f0, ABISELECT(32,16), "S19434C1.s19434c1f0");
    test_class_info(&lv, &cd_S19434C1);
    dp->~S19434C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19434C1(Test_S19434C1, "S19434C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19434C1C1Ev();
extern void _ZN8S19434C1D1Ev();
Name_Map name_map_S19434C1[] = {
  NSPAIR(_ZN8S19434C1C1Ev),
  NSPAIR(_ZN8S19434C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C4;
extern VTBL_ENTRY _ZTI8S19434C4[];
extern  VTBL_ENTRY _ZTV8S19434C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C4[];
extern Class_Descriptor cd_S19434C3;
extern VTBL_ENTRY _ZTI8S19434C3[];
extern  VTBL_ENTRY _ZTV8S19434C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C3[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C11;
extern VTBL_ENTRY _ZTI9S19434C11[];
extern  VTBL_ENTRY _ZTV9S19434C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C11[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C10;
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S19434C12;
extern VTBL_ENTRY _ZTI9S19434C12[];
extern  VTBL_ENTRY _ZTV9S19434C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C12[];
extern Class_Descriptor cd_S19434C9;
extern VTBL_ENTRY _ZTI8S19434C9[];
extern  VTBL_ENTRY _ZTV8S19434C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C9[];
extern Class_Descriptor cd_S19434C2;
extern VTBL_ENTRY _ZTI8S19434C2[];
extern  VTBL_ENTRY _ZTV8S19434C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C2[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C10;
extern VTBL_ENTRY _ZTI9S19434C10[];
extern  VTBL_ENTRY _ZTV9S19434C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19434C10[];
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S19434C7;
extern VTBL_ENTRY _ZTI8S19434C7[];
extern  VTBL_ENTRY _ZTV8S19434C7[];
extern Class_Descriptor cd_S19434C6;
extern VTBL_ENTRY _ZTI8S19434C6[];
extern  VTBL_ENTRY _ZTV8S19434C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C6[];
static Base_Class bases_S19434C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19434C6,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19434C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19434C3,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(104,56), //bcp->offset
    62, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19434C11,    ABISELECT(96,52), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(112,60), //bcp->offset
    65, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19434C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19434C7,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(72,40), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19434C7,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19434C12,    ABISELECT(80,44), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19434C9,    ABISELECT(64,36), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19434C2,    ABISELECT(48,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19434C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19434C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6282C14_nt,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19434C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19434C6,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19434C1[];
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C1D1Ev();
extern void _ZN8S19434C1D0Ev();
extern void ABISELECT(_ZThn8_N8S19434C1D1Ev,_ZThn4_N8S19434C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19434C1D0Ev,_ZThn4_N8S19434C1D0Ev)();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void ABISELECT(_ZTv0_n88_N8S19434C1D1Ev,_ZTv0_n44_N8S19434C1D1Ev)();
extern void ABISELECT(_ZThn48_N8S19434C1D1Ev,_ZThn28_N8S19434C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19434C1D0Ev,_ZTv0_n44_N8S19434C1D0Ev)();
extern void ABISELECT(_ZThn48_N8S19434C1D0Ev,_ZThn28_N8S19434C1D0Ev)() __attribute__((weak));
extern void _ZN8S19434C72v1Ev();
extern void ABISELECT(_ZTvn16_n88_N8S19434C1D1Ev,_ZTvn8_n44_N8S19434C1D1Ev)();
extern void ABISELECT(_ZTvn16_n88_N8S19434C1D0Ev,_ZTvn8_n44_N8S19434C1D0Ev)();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY vtc_S19434C1[] = {
  0,
  ABISELECT(48,28),
  ABISELECT(112,60),
  ABISELECT(48,28),
  0,
  ABISELECT(96,52),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19434C1D1Ev,_ZThn4_N8S19434C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19434C1D0Ev,_ZThn4_N8S19434C1D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19434C1D1Ev,_ZTv0_n44_N8S19434C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19434C1D0Ev,_ZTv0_n44_N8S19434C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  ABISELECT(32,16),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19434C1D1Ev,_ZTvn8_n44_N8S19434C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n88_N8S19434C1D0Ev,_ZTvn8_n44_N8S19434C1D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19434C1[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S19434C1[];
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C10__A1__8S19434C1[] = {
  ABISELECT(112,60),
  ABISELECT(48,28),
  0,
  ABISELECT(96,52),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C10__A1__8S19434C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__9S19434C10__A1__8S19434C1[] = {
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C10__A1__8S19434C1[] = {
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C10__A1__8S19434C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__A3__8S19434C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
extern void _ZN8S19434C2D1Ev();
extern void _ZN8S19434C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C2__8S19434C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(64,32),
  ABISELECT(48,24),
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19434C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C2D0Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C38S19434C2__8S19434C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C3[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C9D1Ev();
extern void _ZN8S19434C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  ABISELECT(32,16),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19434C9D0Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C108S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  ABISELECT(32,16),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__9S19434C108S19434C98S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__9S19434C108S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__9S19434C108S19434C98S19434C2__8S19434C1[] = {
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__9S19434C108S19434C98S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19434C10[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C98S19434C2__A2__8S19434C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C128S19434C98S19434C2__A1__8S19434C1[] = {
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C98S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A1__8S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C98S19434C2__8S19434C1[] = {
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C98S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C6__A2__8S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__A__8S19434C98S19434C2__8S19434C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C9[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void ABISELECT(_ZThn16_N8S19434C2D1Ev,_ZThn8_N8S19434C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19434C2D0Ev,_ZThn8_N8S19434C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19434C9__8S19434C2__8S19434C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  ABISELECT(32,16),
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19434C2D1Ev,_ZThn8_N8S19434C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19434C2D0Ev,_ZThn8_N8S19434C2D0Ev),
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C79S19434C11__A2__8S19434C2__8S19434C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C2__8S19434C1[] = {
  0,
  ABISELECT(-112,-60),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C9__A2__8S19434C2__8S19434C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-72,-40),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C128S19434C9__A1__8S19434C2__8S19434C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19434C2[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
extern void _ZN8S19434C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C4__8S19434C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C4[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
  (VTBL_ENTRY)&_ZN8S19434C42v2Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C68S19434C4__8S19434C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C11__8S19434C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C11[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19434C69S19434C11__A1__8S19434C1[] = {
  ABISELECT(-96,-52),
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19434C6[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
extern void _ZN8S19434C72v1Ev();
static  VTBL_ENTRY _tg__ZTV9S19434C12__8S19434C1[] = {
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19434C12[0]),
  (VTBL_ENTRY)&_ZN8S19434C72v1Ev,
};
static  VTT_ENTRY vtt_S19434C1[] = {
  {&(_ZTV8S19434C1[9]),  9,70},
  {&(_tg__ZTV9S19434C10__A1__8S19434C1[7]),  7,8},
  {&(_tg__ZTV9S19434C11__9S19434C10__A1__8S19434C1[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__9S19434C10__A1__8S19434C1[2]),  2,3},
  {&(_tg__ZTV8S19434C4__9S19434C10__A1__8S19434C1[6]),  6,8},
  {&(_tg__ZTV9S19434C12__9S19434C10__A1__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C6__A3__8S19434C1[4]),  4,5},
  {&(_ZTV8S19434C1[32]),  32,70},
  {&(_ZTV8S19434C1[32]),  32,70},
  {&(_ZTV8S19434C1[44]),  44,70},
  {&(_ZTV8S19434C1[61]),  61,70},
  {&(_ZTV8S19434C1[64]),  64,70},
  {&(_ZTV8S19434C1[69]),  69,70},
  {&(_ZTV8S19434C1[51]),  51,70},
  {&(_ZTV8S19434C1[55]),  55,70},
  {&(_ZTV8S19434C1[20]),  20,70},
  {&(_tg__ZTV8S19434C2__8S19434C1[10]),  10,14},
  {&(_tg__ZTV8S19434C38S19434C2__8S19434C1[7]),  7,9},
  {&(_tg__ZTV8S19434C38S19434C2__8S19434C1[7]),  7,9},
  {&(_tg__ZTV8S19434C98S19434C2__8S19434C1[8]),  8,11},
  {&(_tg__ZTV9S19434C108S19434C98S19434C2__8S19434C1[7]),  7,8},
  {&(_tg__ZTV9S19434C11__9S19434C108S19434C98S19434C2__8S19434C1[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__9S19434C108S19434C98S19434C2__8S19434C1[2]),  2,3},
  {&(_tg__ZTV8S19434C4__9S19434C108S19434C98S19434C2__8S19434C1[6]),  6,8},
  {&(_tg__ZTV9S19434C12__9S19434C108S19434C98S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C68S19434C98S19434C2__A2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C128S19434C98S19434C2__A1__8S19434C1[3]),  3,4},
  {&(_tg__ZTV9S19434C11__8S19434C98S19434C2__8S19434C1[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A1__8S19434C98S19434C2__8S19434C1[2]),  2,3},
  {&(_tg__ZTV8S19434C4__8S19434C98S19434C2__8S19434C1[6]),  6,8},
  {&(_tg__ZTV9S19434C12__8S19434C98S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C6__A2__8S19434C98S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C12__A__8S19434C98S19434C2__8S19434C1[3]),  3,4},
  {&(_tg__ZTV8S19434C2__8S19434C1[10]),  10,14},
  {&(_tg__ZTV8S19434C9__8S19434C2__8S19434C1[8]),  8,11},
  {&(_tg__ZTV9S19434C11__8S19434C2__8S19434C1[5]),  5,6},
  {&(_tg__ZTV8S19434C79S19434C11__A2__8S19434C2__8S19434C1[2]),  2,3},
  {&(_tg__ZTV9S19434C12__8S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C68S19434C9__A2__8S19434C2__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C128S19434C9__A1__8S19434C2__8S19434C1[3]),  3,4},
  {&(_tg__ZTV8S19434C4__8S19434C1[4]),  4,6},
  {&(_tg__ZTV8S19434C68S19434C4__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C11__8S19434C1[4]),  4,5},
  {&(_tg__ZTV8S19434C69S19434C11__A1__8S19434C1[4]),  4,5},
  {&(_tg__ZTV9S19434C12__8S19434C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19434C1[];
extern  VTBL_ENTRY _ZTV8S19434C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19434C1[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19434C1D0Ev,_ZTv0_n44_N8S19434C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19434C1D0Ev,_ZThn28_N8S19434C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19434C1D1Ev,_ZTv0_n44_N8S19434C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19434C1D1Ev,_ZThn28_N8S19434C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19434C1 = {  "S19434C1", // class name
  bases_S19434C1, 30,
  &(vtc_S19434C1[0]), // expected_vtbl_contents
  &(vtt_S19434C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19434C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19434C1),70, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19434C1),45, //virtual table table var
  23, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21535C2  {
  char s21535c2f0[3];
  short s21535c2f1[2];
  int s21535c2f2[4];
  ::S2121C13_nt s21535c2f3;
  void  mf21535c2(); // _ZN8S21535C29mf21535c2Ev
  virtual  ~S21535C2(); // _ZN8S21535C2D1Ev
  S21535C2(); // tgen
};
//SIG(-1 S21535C2) C1{ vd m Fc[3] Fs[2] Fi[4] FC2{ m FC3{ m FL[2]}}}


void  S21535C2 ::mf21535c2(){}
 S21535C2 ::~S21535C2(){ note_dtor("S21535C2", this);}
S21535C2 ::S21535C2(){ note_ctor("S21535C2", this);} // tgen

static void Test_S21535C2()
{
  extern Class_Descriptor cd_S21535C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,12)];
    init_test(&cd_S21535C2, buf);
    S21535C2 *dp, &lv = *(dp=new (buf) S21535C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S21535C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21535C2)");
    check_field_offset(lv, s21535c2f0, ABISELECT(8,4), "S21535C2.s21535c2f0");
    check_field_offset(lv, s21535c2f1, ABISELECT(12,8), "S21535C2.s21535c2f1");
    check_field_offset(lv, s21535c2f2, ABISELECT(16,12), "S21535C2.s21535c2f2");
    check_field_offset(lv, s21535c2f3, ABISELECT(32,28), "S21535C2.s21535c2f3");
    test_class_info(&lv, &cd_S21535C2);
    dp->~S21535C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21535C2(Test_S21535C2, "S21535C2", ABISELECT(48,44));

#else // __cplusplus

extern void _ZN8S21535C2C1Ev();
extern void _ZN8S21535C2D1Ev();
Name_Map name_map_S21535C2[] = {
  NSPAIR(_ZN8S21535C2C1Ev),
  NSPAIR(_ZN8S21535C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21535C2[];
extern void _ZN8S21535C2D1Ev();
extern void _ZN8S21535C2D0Ev();
static  VTBL_ENTRY vtc_S21535C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21535C2[0]),
  (VTBL_ENTRY)&_ZN8S21535C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21535C2D0Ev,
};
extern VTBL_ENTRY _ZTI8S21535C2[];
extern  VTBL_ENTRY _ZTV8S21535C2[];
Class_Descriptor cd_S21535C2 = {  "S21535C2", // class name
  0,0,//no base classes
  &(vtc_S21535C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,44), // object size
  NSPAIRA(_ZTI8S21535C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21535C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21535C5  {
  ::S2185C10_nt s21535c5f0;
  ::S2121C26 s21535c5f1;
  void  mf21535c5(); // _ZN8S21535C59mf21535c5Ev
  virtual  ~S21535C5(); // _ZN8S21535C5D1Ev
  S21535C5(); // tgen
};
//SIG(-1 S21535C5) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC5{ m} FC6{ m}}}


void  S21535C5 ::mf21535c5(){}
 S21535C5 ::~S21535C5(){ note_dtor("S21535C5", this);}
S21535C5 ::S21535C5(){ note_ctor("S21535C5", this);} // tgen

static void Test_S21535C5()
{
  extern Class_Descriptor cd_S21535C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S21535C5, buf);
    S21535C5 *dp, &lv = *(dp=new (buf) S21535C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S21535C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21535C5)");
    check_field_offset(lv, s21535c5f0, ABISELECT(8,4), "S21535C5.s21535c5f0");
    check_field_offset(lv, s21535c5f1, ABISELECT(24,16), "S21535C5.s21535c5f1");
    test_class_info(&lv, &cd_S21535C5);
    dp->~S21535C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21535C5(Test_S21535C5, "S21535C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN8S21535C5C1Ev();
extern void _ZN8S21535C5D1Ev();
Name_Map name_map_S21535C5[] = {
  NSPAIR(_ZN8S21535C5C1Ev),
  NSPAIR(_ZN8S21535C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21535C5[];
extern void _ZN8S21535C5D1Ev();
extern void _ZN8S21535C5D0Ev();
static  VTBL_ENTRY vtc_S21535C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21535C5[0]),
  (VTBL_ENTRY)&_ZN8S21535C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21535C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S21535C5[];
extern  VTBL_ENTRY _ZTV8S21535C5[];
Class_Descriptor cd_S21535C5 = {  "S21535C5", // class name
  0,0,//no base classes
  &(vtc_S21535C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI8S21535C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21535C5),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21535C1  {
  ::S21535C2 s21535c1f0;
  ::S21535C5 s21535c1f1;
  void *s21535c1f2[2];
  int s21535c1f3[5];
  short s21535c1f4;
  void *s21535c1f5;
  int s21535c1f6;
  ::S21811C16 s21535c1f7;
  void *s21535c1f8;
  void  mf21535c1(); // _ZN8S21535C19mf21535c1Ev
  virtual  ~S21535C1(); // _ZN8S21535C1D1Ev
  S21535C1(); // tgen
};
//SIG(1 S21535C1) C1{ vd m FC2{ vd m Fc[3] Fs[2] Fi[4] FC3{ m FC4{ m FL[2]}}} FC5{ vd m FC6{ m Fp Fi FC7{ m}} FC8{ m Fp Fi FC9{ m} FC10{ m}}} Fp[2] Fi[5] Fs Fp Fi FC11{ m Fp Fi[2] FC10} Fp}


void  S21535C1 ::mf21535c1(){}
 S21535C1 ::~S21535C1(){ note_dtor("S21535C1", this);}
S21535C1 ::S21535C1(){ note_ctor("S21535C1", this);} // tgen

static void Test_S21535C1()
{
  extern Class_Descriptor cd_S21535C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,35)];
    init_test(&cd_S21535C1, buf);
    S21535C1 *dp, &lv = *(dp=new (buf) S21535C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,136), "sizeof(S21535C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21535C1)");
    check_field_offset(lv, s21535c1f0, ABISELECT(8,4), "S21535C1.s21535c1f0");
    check_field_offset(lv, s21535c1f1, ABISELECT(56,48), "S21535C1.s21535c1f1");
    check_field_offset(lv, s21535c1f2, ABISELECT(96,76), "S21535C1.s21535c1f2");
    check_field_offset(lv, s21535c1f3, ABISELECT(112,84), "S21535C1.s21535c1f3");
    check_field_offset(lv, s21535c1f4, ABISELECT(132,104), "S21535C1.s21535c1f4");
    check_field_offset(lv, s21535c1f5, ABISELECT(136,108), "S21535C1.s21535c1f5");
    check_field_offset(lv, s21535c1f6, ABISELECT(144,112), "S21535C1.s21535c1f6");
    check_field_offset(lv, s21535c1f7, ABISELECT(152,116), "S21535C1.s21535c1f7");
    check_field_offset(lv, s21535c1f8, ABISELECT(176,132), "S21535C1.s21535c1f8");
    test_class_info(&lv, &cd_S21535C1);
    dp->~S21535C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21535C1(Test_S21535C1, "S21535C1", ABISELECT(184,136));

#else // __cplusplus

extern void _ZN8S21535C1C1Ev();
extern void _ZN8S21535C1D1Ev();
Name_Map name_map_S21535C1[] = {
  NSPAIR(_ZN8S21535C1C1Ev),
  NSPAIR(_ZN8S21535C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21535C1[];
extern void _ZN8S21535C1D1Ev();
extern void _ZN8S21535C1D0Ev();
static  VTBL_ENTRY vtc_S21535C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21535C1[0]),
  (VTBL_ENTRY)&_ZN8S21535C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21535C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21535C1[];
extern  VTBL_ENTRY _ZTV8S21535C1[];
Class_Descriptor cd_S21535C1 = {  "S21535C1", // class name
  0,0,//no base classes
  &(vtc_S21535C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,136), // object size
  NSPAIRA(_ZTI8S21535C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21535C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19577C5  {
  virtual  ~S19577C5(); // _ZN8S19577C5D1Ev
  virtual void  v6(); // _ZN8S19577C52v6Ev
  virtual void  v7(); // _ZN8S19577C52v7Ev
  virtual void  v8(); // _ZN8S19577C52v8Ev
  virtual void  v9(); // _ZN8S19577C52v9Ev
  virtual void  v10(); // _ZN8S19577C53v10Ev
  S19577C5(); // tgen
};
//SIG(-1 S19577C5) C1{ vd v1 v2 v3 v4 v5}


 S19577C5 ::~S19577C5(){ note_dtor("S19577C5", this);}
void  S19577C5 ::v6(){vfunc_called(this, "_ZN8S19577C52v6Ev");}
void  S19577C5 ::v7(){vfunc_called(this, "_ZN8S19577C52v7Ev");}
void  S19577C5 ::v8(){vfunc_called(this, "_ZN8S19577C52v8Ev");}
void  S19577C5 ::v9(){vfunc_called(this, "_ZN8S19577C52v9Ev");}
void  S19577C5 ::v10(){vfunc_called(this, "_ZN8S19577C53v10Ev");}
S19577C5 ::S19577C5(){ note_ctor("S19577C5", this);} // tgen

static void Test_S19577C5()
{
  extern Class_Descriptor cd_S19577C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19577C5, buf);
    S19577C5 *dp, &lv = *(dp=new (buf) S19577C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19577C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C5)");
    test_class_info(&lv, &cd_S19577C5);
    dp->~S19577C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C5(Test_S19577C5, "S19577C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19577C5C1Ev();
extern void _ZN8S19577C5D1Ev();
Name_Map name_map_S19577C5[] = {
  NSPAIR(_ZN8S19577C5C1Ev),
  NSPAIR(_ZN8S19577C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19577C5[];
extern void _ZN8S19577C5D1Ev();
extern void _ZN8S19577C5D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
static  VTBL_ENTRY vtc_S19577C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C5[0]),
  (VTBL_ENTRY)&_ZN8S19577C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
Class_Descriptor cd_S19577C5 = {  "S19577C5", // class name
  0,0,//no base classes
  &(vtc_S19577C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19577C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19577C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19577C4  : virtual S19577C5 {
  void *s19577c4f0;
  ::S19577C5 s19577c4f1;
  void *s19577c4f2;
  virtual  ~S19577C4(); // _ZN8S19577C4D2Ev
  virtual void  v11(); // _ZN8S19577C43v11Ev
  virtual void  v12(); // _ZN8S19577C43v12Ev
  virtual void  v13(); // _ZN8S19577C43v13Ev
  S19577C4(); // tgen
};
//SIG(-1 S19577C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S19577C4 ::~S19577C4(){ note_dtor("S19577C4", this);}
void  S19577C4 ::v11(){vfunc_called(this, "_ZN8S19577C43v11Ev");}
void  S19577C4 ::v12(){vfunc_called(this, "_ZN8S19577C43v12Ev");}
void  S19577C4 ::v13(){vfunc_called(this, "_ZN8S19577C43v13Ev");}
S19577C4 ::S19577C4(){ note_ctor("S19577C4", this);} // tgen

static void Test_S19577C4()
{
  extern Class_Descriptor cd_S19577C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19577C4, buf);
    S19577C4 *dp, &lv = *(dp=new (buf) S19577C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19577C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C4)");
    check_base_class_offset(lv, (S19577C5*), 0, "S19577C4");
    check_field_offset(lv, s19577c4f0, ABISELECT(8,4), "S19577C4.s19577c4f0");
    check_field_offset(lv, s19577c4f1, ABISELECT(16,8), "S19577C4.s19577c4f1");
    check_field_offset(lv, s19577c4f2, ABISELECT(24,12), "S19577C4.s19577c4f2");
    test_class_info(&lv, &cd_S19577C4);
    dp->~S19577C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C4(Test_S19577C4, "S19577C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19577C4C1Ev();
extern void _ZN8S19577C4D2Ev();
Name_Map name_map_S19577C4[] = {
  NSPAIR(_ZN8S19577C4C1Ev),
  NSPAIR(_ZN8S19577C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
static Base_Class bases_S19577C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19577C4[];
extern void _ZN8S19577C4D1Ev();
extern void _ZN8S19577C4D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY vtc_S19577C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&_ZN8S19577C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19577C4[];
static  VTT_ENTRY vtt_S19577C4[] = {
  {&(_ZTV8S19577C4[9]),  9,19},
  {&(_ZTV8S19577C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S19577C4[];
extern  VTBL_ENTRY _ZTV8S19577C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C4[];
Class_Descriptor cd_S19577C4 = {  "S19577C4", // class name
  bases_S19577C4, 1,
  &(vtc_S19577C4[0]), // expected_vtbl_contents
  &(vtt_S19577C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19577C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19577C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19577C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19577C3  : virtual S19577C4 {
  virtual  ~S19577C3(); // _ZN8S19577C3D2Ev
  virtual void  v14(); // _ZN8S19577C33v14Ev
  S19577C3(); // tgen
};
//SIG(-1 S19577C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S19577C3 ::~S19577C3(){ note_dtor("S19577C3", this);}
void  S19577C3 ::v14(){vfunc_called(this, "_ZN8S19577C33v14Ev");}
S19577C3 ::S19577C3(){ note_ctor("S19577C3", this);} // tgen

static void Test_S19577C3()
{
  extern Class_Descriptor cd_S19577C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19577C3, buf);
    S19577C3 *dp, &lv = *(dp=new (buf) S19577C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19577C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C3)");
    check_base_class_offset(lv, (S19577C5*)(S19577C4*), 0, "S19577C3");
    check_base_class_offset(lv, (S19577C4*), ABISELECT(8,4), "S19577C3");
    test_class_info(&lv, &cd_S19577C3);
    dp->~S19577C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C3(Test_S19577C3, "S19577C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19577C3C1Ev();
extern void _ZN8S19577C3D2Ev();
Name_Map name_map_S19577C3[] = {
  NSPAIR(_ZN8S19577C3C1Ev),
  NSPAIR(_ZN8S19577C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
extern Class_Descriptor cd_S19577C4;
extern VTBL_ENTRY _ZTI8S19577C4[];
extern  VTBL_ENTRY _ZTV8S19577C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C4[];
static Base_Class bases_S19577C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19577C4,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19577C3[];
extern void _ZN8S19577C3D1Ev();
extern void _ZN8S19577C3D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
extern void ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19577C3D1Ev,_ZThn4_N8S19577C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19577C3D0Ev,_ZThn4_N8S19577C3D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY vtc_S19577C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&_ZN8S19577C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19577C3[];
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void _ZN8S19577C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C4D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C5__8S19577C4__8S19577C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
};
static  VTT_ENTRY vtt_S19577C3[] = {
  {&(_ZTV8S19577C3[10]),  10,40},
  {&(_ZTV8S19577C3[30]),  30,40},
  {&(_ZTV8S19577C3[10]),  10,40},
  {&(_tg__ZTV8S19577C4__8S19577C3[9]),  9,19},
  {&(_tg__ZTV8S19577C5__8S19577C4__8S19577C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19577C3[];
extern  VTBL_ENTRY _ZTV8S19577C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C3[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19577C3D0Ev,_ZThn4_N8S19577C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19577C3D1Ev,_ZThn4_N8S19577C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19577C3 = {  "S19577C3", // class name
  bases_S19577C3, 2,
  &(vtc_S19577C3[0]), // expected_vtbl_contents
  &(vtt_S19577C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19577C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19577C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19577C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19577C2  : S19577C3 {
  int s19577c2f0;
  virtual  ~S19577C2(); // _ZN8S19577C2D2Ev
  virtual void  v15(); // _ZN8S19577C23v15Ev
  virtual void  v16(); // _ZN8S19577C23v16Ev
  S19577C2(); // tgen
};
//SIG(-1 S19577C2) C1{ BC2{ VBC3{ VBC4{ vd v3 v4 v5 v6 v7} vd v8 v9 v10 Fp FC4 Fp} vd v11} vd v1 v2 Fi}


 S19577C2 ::~S19577C2(){ note_dtor("S19577C2", this);}
void  S19577C2 ::v15(){vfunc_called(this, "_ZN8S19577C23v15Ev");}
void  S19577C2 ::v16(){vfunc_called(this, "_ZN8S19577C23v16Ev");}
S19577C2 ::S19577C2(){ note_ctor("S19577C2", this);} // tgen

static void Test_S19577C2()
{
  extern Class_Descriptor cd_S19577C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19577C2, buf);
    S19577C2 *dp, &lv = *(dp=new (buf) S19577C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19577C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C2)");
    check_base_class_offset(lv, (S19577C5*)(S19577C4*), 0, "S19577C2");
    check_base_class_offset(lv, (S19577C4*)(S19577C3*), ABISELECT(16,8), "S19577C2");
    check_base_class_offset(lv, (S19577C3*), 0, "S19577C2");
    check_field_offset(lv, s19577c2f0, ABISELECT(8,4), "S19577C2.s19577c2f0");
    test_class_info(&lv, &cd_S19577C2);
    dp->~S19577C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C2(Test_S19577C2, "S19577C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19577C2C1Ev();
extern void _ZN8S19577C2D2Ev();
Name_Map name_map_S19577C2[] = {
  NSPAIR(_ZN8S19577C2C1Ev),
  NSPAIR(_ZN8S19577C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
extern Class_Descriptor cd_S19577C4;
extern VTBL_ENTRY _ZTI8S19577C4[];
extern  VTBL_ENTRY _ZTV8S19577C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C4[];
extern Class_Descriptor cd_S19577C3;
extern VTBL_ENTRY _ZTI8S19577C3[];
extern  VTBL_ENTRY _ZTV8S19577C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C3[];
static Base_Class bases_S19577C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19577C4,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19577C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19577C2[];
extern void _ZN8S19577C2D1Ev();
extern void _ZN8S19577C2D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
extern void _ZN8S19577C23v15Ev();
extern void _ZN8S19577C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19577C2D1Ev,_ZThn8_N8S19577C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19577C2D0Ev,_ZThn8_N8S19577C2D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY vtc_S19577C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C2[0]),
  (VTBL_ENTRY)&_ZN8S19577C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19577C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19577C2[];
extern void _ZN8S19577C3D1Ev();
extern void _ZN8S19577C3D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C3__8S19577C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&_ZN8S19577C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19577C3D1Ev,_ZThn8_N8S19577C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19577C3D0Ev,_ZThn8_N8S19577C3D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C3__8S19577C2[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void _ZN8S19577C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C4D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C5__8S19577C4__8S19577C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
};
static  VTT_ENTRY vtt_S19577C2[] = {
  {&(_ZTV8S19577C2[10]),  10,42},
  {&(_tg__ZTV8S19577C3__8S19577C2[10]),  10,18},
  {&(_tg__ZTV8S19577C4__8S19577C3__8S19577C2[12]),  12,22},
  {&(_tg__ZTV8S19577C3__8S19577C2[10]),  10,18},
  {&(_ZTV8S19577C2[32]),  32,42},
  {&(_ZTV8S19577C2[10]),  10,42},
  {&(_tg__ZTV8S19577C4__8S19577C2[9]),  9,19},
  {&(_tg__ZTV8S19577C5__8S19577C4__8S19577C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19577C2[];
extern  VTBL_ENTRY _ZTV8S19577C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C2[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C3D0Ev,_ZThn8_N8S19577C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C3D1Ev,_ZThn8_N8S19577C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C2D0Ev,_ZThn8_N8S19577C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C2D1Ev,_ZThn8_N8S19577C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19577C2 = {  "S19577C2", // class name
  bases_S19577C2, 3,
  &(vtc_S19577C2[0]), // expected_vtbl_contents
  &(vtt_S19577C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19577C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19577C2),42, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19577C2),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19577C6  : S19577C5 {
  ::S19577C5 s19577c6f0;
  virtual  ~S19577C6(); // _ZN8S19577C6D1Ev
  virtual void  v17(); // _ZN8S19577C63v17Ev
  virtual void  v18(); // _ZN8S19577C63v18Ev
  virtual void  v19(); // _ZN8S19577C63v19Ev
  virtual void  v20(); // _ZN8S19577C63v20Ev
  virtual void  v21(); // _ZN8S19577C63v21Ev
  S19577C6(); // tgen
};
//SIG(-1 S19577C6) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC2}


 S19577C6 ::~S19577C6(){ note_dtor("S19577C6", this);}
void  S19577C6 ::v17(){vfunc_called(this, "_ZN8S19577C63v17Ev");}
void  S19577C6 ::v18(){vfunc_called(this, "_ZN8S19577C63v18Ev");}
void  S19577C6 ::v19(){vfunc_called(this, "_ZN8S19577C63v19Ev");}
void  S19577C6 ::v20(){vfunc_called(this, "_ZN8S19577C63v20Ev");}
void  S19577C6 ::v21(){vfunc_called(this, "_ZN8S19577C63v21Ev");}
S19577C6 ::S19577C6(){ note_ctor("S19577C6", this);} // tgen

static void Test_S19577C6()
{
  extern Class_Descriptor cd_S19577C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19577C6, buf);
    S19577C6 *dp, &lv = *(dp=new (buf) S19577C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19577C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19577C6)");
    check_base_class_offset(lv, (S19577C5*), 0, "S19577C6");
    check_field_offset(lv, s19577c6f0, ABISELECT(8,4), "S19577C6.s19577c6f0");
    test_class_info(&lv, &cd_S19577C6);
    dp->~S19577C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C6(Test_S19577C6, "S19577C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19577C6C1Ev();
extern void _ZN8S19577C6D1Ev();
Name_Map name_map_S19577C6[] = {
  NSPAIR(_ZN8S19577C6C1Ev),
  NSPAIR(_ZN8S19577C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
static Base_Class bases_S19577C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19577C6[];
extern void _ZN8S19577C6D1Ev();
extern void _ZN8S19577C6D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C63v17Ev();
extern void _ZN8S19577C63v18Ev();
extern void _ZN8S19577C63v19Ev();
extern void _ZN8S19577C63v20Ev();
extern void _ZN8S19577C63v21Ev();
static  VTBL_ENTRY vtc_S19577C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C6[0]),
  (VTBL_ENTRY)&_ZN8S19577C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v21Ev,
};
extern VTBL_ENTRY _ZTI8S19577C6[];
extern  VTBL_ENTRY _ZTV8S19577C6[];
Class_Descriptor cd_S19577C6 = {  "S19577C6", // class name
  bases_S19577C6, 1,
  &(vtc_S19577C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19577C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19577C6),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19577C1  : virtual S19577C2 , S19577C6 {
  void *s19577c1f0[7];
  long double s19577c1f1;
  char  :0;
  virtual  ~S19577C1(); // _ZN8S19577C1D2Ev
  virtual void  v1(); // _ZN8S19577C12v1Ev
  virtual void  v2(); // _ZN8S19577C12v2Ev
  virtual void  v3(); // _ZN8S19577C12v3Ev
  virtual void  v4(); // _ZN8S19577C12v4Ev
  virtual void  v5(); // _ZN8S19577C12v5Ev
  S19577C1(); // tgen
};
//SIG(1 S19577C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 Fp FC5 Fp} vd v14} vd v15 v16 Fi} BC6{ BC5 vd v17 v18 v19 v20 v21 FC5} vd v1 v2 v3 v4 v5 Fp[7] FD Fc:0}


 S19577C1 ::~S19577C1(){ note_dtor("S19577C1", this);}
void  S19577C1 ::v1(){vfunc_called(this, "_ZN8S19577C12v1Ev");}
void  S19577C1 ::v2(){vfunc_called(this, "_ZN8S19577C12v2Ev");}
void  S19577C1 ::v3(){vfunc_called(this, "_ZN8S19577C12v3Ev");}
void  S19577C1 ::v4(){vfunc_called(this, "_ZN8S19577C12v4Ev");}
void  S19577C1 ::v5(){vfunc_called(this, "_ZN8S19577C12v5Ev");}
S19577C1 ::S19577C1(){ note_ctor("S19577C1", this);} // tgen

static void Test_S19577C1()
{
  extern Class_Descriptor cd_S19577C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,19)];
    init_test(&cd_S19577C1, buf);
    S19577C1 *dp, &lv = *(dp=new (buf) S19577C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S19577C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19577C1)");
    check_base_class_offset(lv, (S19577C5*)(S19577C4*), ABISELECT(96,48), "S19577C1");
    check_base_class_offset(lv, (S19577C4*)(S19577C3*)(S19577C2*), ABISELECT(112,56), "S19577C1");
    check_base_class_offset(lv, (S19577C3*)(S19577C2*), ABISELECT(96,48), "S19577C1");
    check_base_class_offset(lv, (S19577C2*), ABISELECT(96,48), "S19577C1");
    check_base_class_offset(lv, (S19577C5*)(S19577C6*), 0, "S19577C1");
    check_base_class_offset(lv, (S19577C6*), 0, "S19577C1");
    check_field_offset(lv, s19577c1f0, ABISELECT(16,8), "S19577C1.s19577c1f0");
    check_field_offset(lv, s19577c1f1, ABISELECT(80,36), "S19577C1.s19577c1f1");
    test_class_info(&lv, &cd_S19577C1);
    dp->~S19577C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19577C1(Test_S19577C1, "S19577C1", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S19577C1C1Ev();
extern void _ZN8S19577C1D2Ev();
Name_Map name_map_S19577C1[] = {
  NSPAIR(_ZN8S19577C1C1Ev),
  NSPAIR(_ZN8S19577C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
extern Class_Descriptor cd_S19577C4;
extern VTBL_ENTRY _ZTI8S19577C4[];
extern  VTBL_ENTRY _ZTV8S19577C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C4[];
extern Class_Descriptor cd_S19577C3;
extern VTBL_ENTRY _ZTI8S19577C3[];
extern  VTBL_ENTRY _ZTV8S19577C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C3[];
extern Class_Descriptor cd_S19577C2;
extern VTBL_ENTRY _ZTI8S19577C2[];
extern  VTBL_ENTRY _ZTV8S19577C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C2[];
extern Class_Descriptor cd_S19577C5;
extern VTBL_ENTRY _ZTI8S19577C5[];
extern  VTBL_ENTRY _ZTV8S19577C5[];
extern Class_Descriptor cd_S19577C6;
extern VTBL_ENTRY _ZTI8S19577C6[];
extern  VTBL_ENTRY _ZTV8S19577C6[];
static Base_Class bases_S19577C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19577C5,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19577C4,    ABISELECT(112,56), //bcp->offset
    45, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19577C3,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19577C2,    ABISELECT(96,48), //bcp->offset
    22, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19577C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19577C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19577C1[];
extern void _ZN8S19577C1D1Ev();
extern void _ZN8S19577C1D0Ev();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C63v17Ev();
extern void _ZN8S19577C63v18Ev();
extern void _ZN8S19577C63v19Ev();
extern void _ZN8S19577C63v20Ev();
extern void _ZN8S19577C63v21Ev();
extern void _ZN8S19577C12v1Ev();
extern void _ZN8S19577C12v2Ev();
extern void _ZN8S19577C12v3Ev();
extern void _ZN8S19577C12v4Ev();
extern void _ZN8S19577C12v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S19577C1D1Ev,_ZThn48_N8S19577C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S19577C1D0Ev,_ZThn48_N8S19577C1D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
extern void _ZN8S19577C23v15Ev();
extern void _ZN8S19577C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S19577C1D1Ev,_ZThn56_N8S19577C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S19577C1D0Ev,_ZThn56_N8S19577C1D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY vtc_S19577C1[] = {
  ABISELECT(96,48),
  ABISELECT(112,56),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C1[0]),
  (VTBL_ENTRY)&_ZN8S19577C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19577C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19577C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19577C12v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19577C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19577C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern VTBL_ENTRY _ZTV8S19577C1[];
extern void ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev)();
extern void _ZN8S19577C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev)();
extern void _ZN8S19577C2D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
extern void _ZN8S19577C23v15Ev();
extern void _ZN8S19577C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C2__8S19577C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v15Ev,
  (VTBL_ENTRY)&_ZN8S19577C23v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev)();
extern void _ZN8S19577C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev)();
extern void _ZN8S19577C3D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C33v14Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C38S19577C2__8S19577C1[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19577C3D1Ev,_ZThn8_N8S19577C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19577C3D0Ev,_ZThn8_N8S19577C3D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C38S19577C2__8S19577C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19577C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19577C2D1Ev,_ZThn8_N8S19577C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19577C2D0Ev,_ZThn8_N8S19577C2D0Ev)() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C2__8S19577C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19577C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void _ZN8S19577C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C4D0Ev() __attribute__((weak));
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
extern void _ZN8S19577C43v11Ev();
extern void _ZN8S19577C43v12Ev();
extern void _ZN8S19577C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C4__8S19577C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v11Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v12Ev,
  (VTBL_ENTRY)&_ZN8S19577C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev)();
extern void _ZN8S19577C52v6Ev();
extern void _ZN8S19577C52v7Ev();
extern void _ZN8S19577C52v8Ev();
extern void _ZN8S19577C52v9Ev();
extern void _ZN8S19577C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19577C5__8S19577C4__8S19577C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19577C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19577C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19577C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19577C53v10Ev,
};
static  VTT_ENTRY vtt_S19577C1[] = {
  {&(_ZTV8S19577C1[5]),  5,67},
  {&(_ZTV8S19577C1[35]),  35,67},
  {&(_ZTV8S19577C1[57]),  57,67},
  {&(_ZTV8S19577C1[35]),  35,67},
  {&(_tg__ZTV8S19577C2__8S19577C1[10]),  10,20},
  {&(_tg__ZTV8S19577C38S19577C2__8S19577C1[10]),  10,18},
  {&(_tg__ZTV8S19577C4__8S19577C38S19577C2__8S19577C1[12]),  12,22},
  {&(_tg__ZTV8S19577C38S19577C2__8S19577C1[10]),  10,18},
  {&(_tg__ZTV8S19577C4__8S19577C2__8S19577C1[12]),  12,22},
  {&(_tg__ZTV8S19577C2__8S19577C1[10]),  10,20},
  {&(_tg__ZTV8S19577C4__8S19577C1[9]),  9,19},
  {&(_tg__ZTV8S19577C5__8S19577C4__8S19577C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S19577C1[];
extern  VTBL_ENTRY _ZTV8S19577C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19577C1[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D0Ev,_ZTv0_n12_N8S19577C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C4D1Ev,_ZTv0_n12_N8S19577C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19577C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D0Ev,_ZTv0_n12_N8S19577C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C3D0Ev,_ZThn8_N8S19577C3D0Ev),
  (VTBL_ENTRY)_ZN8S19577C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C3D1Ev,_ZTv0_n12_N8S19577C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C3D1Ev,_ZThn8_N8S19577C3D1Ev),
  (VTBL_ENTRY)_ZN8S19577C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C2D0Ev,_ZTv0_n12_N8S19577C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C2D0Ev,_ZThn8_N8S19577C2D0Ev),
  (VTBL_ENTRY)_ZN8S19577C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C2D1Ev,_ZTv0_n12_N8S19577C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19577C2D1Ev,_ZThn8_N8S19577C2D1Ev),
  (VTBL_ENTRY)_ZN8S19577C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C1D0Ev,_ZTv0_n12_N8S19577C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19577C1D0Ev,_ZThn56_N8S19577C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19577C1D0Ev,_ZThn48_N8S19577C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19577C1D1Ev,_ZTv0_n12_N8S19577C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19577C1D1Ev,_ZThn56_N8S19577C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S19577C1D1Ev,_ZThn48_N8S19577C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19577C1 = {  "S19577C1", // class name
  bases_S19577C1, 6,
  &(vtc_S19577C1[0]), // expected_vtbl_contents
  &(vtt_S19577C1[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S19577C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19577C1),67, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19577C1),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16827C11_nt  {
  void *s16827c11f0;
  void  mf16827c11(); // _ZN12S16827C11_nt10mf16827c11Ev
};
//SIG(-1 S16827C11_nt) C1{ m Fp}


void  S16827C11_nt ::mf16827c11(){}

//skip512 S16827C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16827C1  {
  int s16827c1f0;
  ::S21811C13_nt s16827c1f1;
  int s16827c1f2;
  ::S21811C16 s16827c1f3;
  ::S21811C7_nt s16827c1f4;
  ::S21811C16 s16827c1f5;
  ::S21811C7_nt s16827c1f6;
  ::S2121C37 s16827c1f7;
  ::S2185C10_nt s16827c1f8;
  ::S2185C10_nt s16827c1f9;
  ::S2185C10_nt s16827c1f10;
  int s16827c1f11;
  ::S2185C10_nt s16827c1f12;
  ::S2185C10_nt s16827c1f13;
  ::S2185C10_nt s16827c1f14;
  int s16827c1f15;
  ::S16827C11_nt s16827c1f16;
  void  mf16827c1(); // _ZN8S16827C19mf16827c1Ev
};
//SIG(1 S16827C1) C1{ m Fi FC2{ m Fp} Fi FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fp Fi[2] FC6{ m}} FC3 FC5 FC7{ m Fp Fi[2] FC6} FC8{ m Fp Fi FC6} FC8 FC8 Fi FC8 FC8 FC8 Fi FC9{ m Fp}}


void  S16827C1 ::mf16827c1(){}

static void Test_S16827C1()
{
  {
    init_simple_test("S16827C1");
    S16827C1 lv;
    check2(sizeof(lv), ABISELECT(264,176), "sizeof(S16827C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16827C1)");
    check_field_offset(lv, s16827c1f0, 0, "S16827C1.s16827c1f0");
    check_field_offset(lv, s16827c1f1, ABISELECT(8,4), "S16827C1.s16827c1f1");
    check_field_offset(lv, s16827c1f2, ABISELECT(16,8), "S16827C1.s16827c1f2");
    check_field_offset(lv, s16827c1f3, ABISELECT(24,12), "S16827C1.s16827c1f3");
    check_field_offset(lv, s16827c1f4, ABISELECT(48,28), "S16827C1.s16827c1f4");
    check_field_offset(lv, s16827c1f5, ABISELECT(72,44), "S16827C1.s16827c1f5");
    check_field_offset(lv, s16827c1f6, ABISELECT(96,60), "S16827C1.s16827c1f6");
    check_field_offset(lv, s16827c1f7, ABISELECT(120,76), "S16827C1.s16827c1f7");
    check_field_offset(lv, s16827c1f8, ABISELECT(144,92), "S16827C1.s16827c1f8");
    check_field_offset(lv, s16827c1f9, ABISELECT(160,104), "S16827C1.s16827c1f9");
    check_field_offset(lv, s16827c1f10, ABISELECT(176,116), "S16827C1.s16827c1f10");
    check_field_offset(lv, s16827c1f11, ABISELECT(192,128), "S16827C1.s16827c1f11");
    check_field_offset(lv, s16827c1f12, ABISELECT(200,132), "S16827C1.s16827c1f12");
    check_field_offset(lv, s16827c1f13, ABISELECT(216,144), "S16827C1.s16827c1f13");
    check_field_offset(lv, s16827c1f14, ABISELECT(232,156), "S16827C1.s16827c1f14");
    check_field_offset(lv, s16827c1f15, ABISELECT(248,168), "S16827C1.s16827c1f15");
    check_field_offset(lv, s16827c1f16, ABISELECT(256,172), "S16827C1.s16827c1f16");
  }
}
static Arrange_To_Call_Me vS16827C1(Test_S16827C1, "S16827C1", ABISELECT(264,176));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C3_nt  {
  void *s8480c3f0[3];
  void  mf8480c3(); // _ZN10S8480C3_nt8mf8480c3Ev
};
//SIG(-1 S8480C3_nt) C1{ m Fp[3]}


void  S8480C3_nt ::mf8480c3(){}

//skip512 S8480C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C2_nt  {
  ::S8480C3_nt s8480c2f0;
  unsigned int s8480c2f1:1;
  virtual  ~S8480C2_nt(); // _ZN10S8480C2_ntD1Ev
  virtual void  v1(); // _ZN10S8480C2_nt2v1Ev
  virtual void  v2(); // _ZN10S8480C2_nt2v2Ev
  virtual void  v3(); // _ZN10S8480C2_nt2v3Ev
  virtual void  v4(); // _ZN10S8480C2_nt2v4Ev
  virtual void  v5(); // _ZN10S8480C2_nt2v5Ev
  virtual void  v6(); // _ZN10S8480C2_nt2v6Ev
  virtual void  v7(); // _ZN10S8480C2_nt2v7Ev
  S8480C2_nt(); // tgen
};
//SIG(-1 S8480C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fp[3]} Fi:1}


 S8480C2_nt ::~S8480C2_nt(){ note_dtor("S8480C2_nt", this);}
void  S8480C2_nt ::v1(){vfunc_called(this, "_ZN10S8480C2_nt2v1Ev");}
void  S8480C2_nt ::v2(){vfunc_called(this, "_ZN10S8480C2_nt2v2Ev");}
void  S8480C2_nt ::v3(){vfunc_called(this, "_ZN10S8480C2_nt2v3Ev");}
void  S8480C2_nt ::v4(){vfunc_called(this, "_ZN10S8480C2_nt2v4Ev");}
void  S8480C2_nt ::v5(){vfunc_called(this, "_ZN10S8480C2_nt2v5Ev");}
void  S8480C2_nt ::v6(){vfunc_called(this, "_ZN10S8480C2_nt2v6Ev");}
void  S8480C2_nt ::v7(){vfunc_called(this, "_ZN10S8480C2_nt2v7Ev");}
S8480C2_nt ::S8480C2_nt(){ note_ctor("S8480C2_nt", this);} // tgen

//skip512 S8480C2_nt

#else // __cplusplus

extern void _ZN10S8480C2_ntC1Ev();
extern void _ZN10S8480C2_ntD1Ev();
Name_Map name_map_S8480C2_nt[] = {
  NSPAIR(_ZN10S8480C2_ntC1Ev),
  NSPAIR(_ZN10S8480C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8480C2_nt[];
extern void _ZN10S8480C2_ntD1Ev();
extern void _ZN10S8480C2_ntD0Ev();
extern void _ZN10S8480C2_nt2v1Ev();
extern void _ZN10S8480C2_nt2v2Ev();
extern void _ZN10S8480C2_nt2v3Ev();
extern void _ZN10S8480C2_nt2v4Ev();
extern void _ZN10S8480C2_nt2v5Ev();
extern void _ZN10S8480C2_nt2v6Ev();
extern void _ZN10S8480C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S8480C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8480C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8480C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S8480C2_nt[];
VTBL_ENTRY *P__ZTI10S8480C2_nt = _ZTI10S8480C2_nt; 
extern  VTBL_ENTRY _ZTV10S8480C2_nt[];
Class_Descriptor cd_S8480C2_nt = {  "S8480C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8480C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI10S8480C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8480C2_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C5  {
  char s8480c5f0[4];
  int s8480c5f1;
  short s8480c5f2[3];
  char s8480c5f3[2];
  int s8480c5f4[2];
};
//SIG(-1 S8480C5) C1{ Fc[4] Fi Fs[3] Fc[2] Fi[2]}



static void Test_S8480C5()
{
  {
    init_simple_test("S8480C5");
    S8480C5 lv;
    check2(sizeof(lv), 24, "sizeof(S8480C5)");
    check2(__alignof__(lv), 4, "__alignof__(S8480C5)");
    check_field_offset(lv, s8480c5f0, 0, "S8480C5.s8480c5f0");
    check_field_offset(lv, s8480c5f1, 4, "S8480C5.s8480c5f1");
    check_field_offset(lv, s8480c5f2, 8, "S8480C5.s8480c5f2");
    check_field_offset(lv, s8480c5f3, 14, "S8480C5.s8480c5f3");
    check_field_offset(lv, s8480c5f4, 16, "S8480C5.s8480c5f4");
  }
}
static Arrange_To_Call_Me vS8480C5(Test_S8480C5, "S8480C5", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C4  {
  ::S8480C5 s8480c4f0;
  ::S8480C5 s8480c4f1;
  ::S8480C5 s8480c4f2;
  ::S8480C5 s8480c4f3;
  int s8480c4f4[5];
};
//SIG(1 S8480C4) C1{ FC2{ Fc[4] Fi Fs[3] Fc[2] Fi[2]} FC2 FC2 FC2 Fi[5]}



static void Test_S8480C4()
{
  {
    init_simple_test("S8480C4");
    S8480C4 lv;
    check2(sizeof(lv), 116, "sizeof(S8480C4)");
    check2(__alignof__(lv), 4, "__alignof__(S8480C4)");
    check_field_offset(lv, s8480c4f0, 0, "S8480C4.s8480c4f0");
    check_field_offset(lv, s8480c4f1, 24, "S8480C4.s8480c4f1");
    check_field_offset(lv, s8480c4f2, 48, "S8480C4.s8480c4f2");
    check_field_offset(lv, s8480c4f3, 72, "S8480C4.s8480c4f3");
    check_field_offset(lv, s8480c4f4, 96, "S8480C4.s8480c4f4");
  }
}
static Arrange_To_Call_Me vS8480C4(Test_S8480C4, "S8480C4", 116);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C8_nt  {
  int s8480c8f0;
  void *s8480c8f1;
  int s8480c8f2;
};
//SIG(-1 S8480C8_nt) C1{ Fi Fp Fi}



//skip512 S8480C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S8480C8_nt[];
VTBL_ENTRY *P__ZTI10S8480C8_nt = _ZTI10S8480C8_nt; 
Class_Descriptor cd_S8480C8_nt = {  "S8480C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI10S8480C8_nt),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C7  {
  ::S8480C8_nt s8480c7f0;
  ::S8480C8_nt s8480c7f1;
  ::S8480C8_nt s8480c7f2;
  ::S8480C8_nt s8480c7f3;
};
//SIG(1 S8480C7) C1{ FC2{ Fi Fp Fi} FC2 FC2 FC2}



static void Test_S8480C7()
{
  {
    init_simple_test("S8480C7");
    S8480C7 lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S8480C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8480C7)");
    check_field_offset(lv, s8480c7f0, 0, "S8480C7.s8480c7f0");
    check_field_offset(lv, s8480c7f1, ABISELECT(24,12), "S8480C7.s8480c7f1");
    check_field_offset(lv, s8480c7f2, ABISELECT(48,24), "S8480C7.s8480c7f2");
    check_field_offset(lv, s8480c7f3, ABISELECT(72,36), "S8480C7.s8480c7f3");
  }
}
static Arrange_To_Call_Me vS8480C7(Test_S8480C7, "S8480C7", ABISELECT(96,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C6  {
  int s8480c6f0[6];
  ::S8480C7 s8480c6f1[2];
};
//SIG(-1 S8480C6) C1{ Fi[6] FC2{ FC3{ Fi Fp Fi} FC3 FC3 FC3}[2]}



static void Test_S8480C6()
{
  {
    init_simple_test("S8480C6");
    S8480C6 lv;
    check2(sizeof(lv), ABISELECT(216,120), "sizeof(S8480C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8480C6)");
    check_field_offset(lv, s8480c6f0, 0, "S8480C6.s8480c6f0");
    check_field_offset(lv, s8480c6f1, 24, "S8480C6.s8480c6f1");
  }
}
static Arrange_To_Call_Me vS8480C6(Test_S8480C6, "S8480C6", ABISELECT(216,120));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8480C1  : S8480C2_nt {
  ::S8480C4 s8480c1f0[2];
  ::S8480C6 s8480c1f1;
  ~S8480C1(); // tgen
  S8480C1(); // tgen
};
//SIG(1 S8480C1) C1{ BC2{ vd v1 v2 v3 v4 v5 v6 v7 FC3{ m Fp[3]} Fi:1} FC4{ FC5{ Fc[4] Fi Fs[3] Fc[2] Fi[2]} FC5 FC5 FC5 Fi[5]}[2] FC6{ Fi[6] FC7{ FC8{ Fi Fp Fi} FC8 FC8 FC8}[2]}}


S8480C1 ::~S8480C1(){ note_dtor("S8480C1", this);} // tgen
S8480C1 ::S8480C1(){ note_ctor("S8480C1", this);} // tgen

static void Test_S8480C1()
{
  extern Class_Descriptor cd_S8480C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(62,94)];
    init_test(&cd_S8480C1, buf);
    S8480C1 *dp, &lv = *(dp=new (buf) S8480C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(488,372), "sizeof(S8480C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8480C1)");
    check_base_class_offset(lv, (S8480C2_nt*), 0, "S8480C1");
    check_field_offset(lv, s8480c1f0, ABISELECT(36,20), "S8480C1.s8480c1f0");
    check_field_offset(lv, s8480c1f1, ABISELECT(272,252), "S8480C1.s8480c1f1");
    test_class_info(&lv, &cd_S8480C1);
    dp->~S8480C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8480C1(Test_S8480C1, "S8480C1", ABISELECT(488,372));

#else // __cplusplus

extern void _ZN7S8480C1C1Ev();
extern void _ZN7S8480C1D1Ev();
Name_Map name_map_S8480C1[] = {
  NSPAIR(_ZN7S8480C1C1Ev),
  NSPAIR(_ZN7S8480C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8480C2_nt;
extern VTBL_ENTRY _ZTI10S8480C2_nt[];
extern  VTBL_ENTRY _ZTV10S8480C2_nt[];
static Base_Class bases_S8480C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8480C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8480C1[];
extern void _ZN7S8480C1D1Ev();
extern void _ZN7S8480C1D0Ev();
extern void _ZN10S8480C2_nt2v1Ev();
extern void _ZN10S8480C2_nt2v2Ev();
extern void _ZN10S8480C2_nt2v3Ev();
extern void _ZN10S8480C2_nt2v4Ev();
extern void _ZN10S8480C2_nt2v5Ev();
extern void _ZN10S8480C2_nt2v6Ev();
extern void _ZN10S8480C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S8480C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8480C1[0]),
  (VTBL_ENTRY)&_ZN7S8480C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8480C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S8480C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI7S8480C1[];
extern  VTBL_ENTRY _ZTV7S8480C1[];
Class_Descriptor cd_S8480C1 = {  "S8480C1", // class name
  bases_S8480C1, 1,
  &(vtc_S8480C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(488,372), // object size
  NSPAIRA(_ZTI7S8480C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8480C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C7  {
  virtual void  v1(); // _ZN7S3502C72v1Ev
  ~S3502C7(); // tgen
  S3502C7(); // tgen
};
//SIG(-1 S3502C7) C1{ v1}


void  S3502C7 ::v1(){vfunc_called(this, "_ZN7S3502C72v1Ev");}
S3502C7 ::~S3502C7(){ note_dtor("S3502C7", this);} // tgen
S3502C7 ::S3502C7(){ note_ctor("S3502C7", this);} // tgen

static void Test_S3502C7()
{
  extern Class_Descriptor cd_S3502C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3502C7, buf);
    S3502C7 *dp, &lv = *(dp=new (buf) S3502C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3502C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C7)");
    test_class_info(&lv, &cd_S3502C7);
    dp->~S3502C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C7(Test_S3502C7, "S3502C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3502C7C1Ev();
extern void _ZN7S3502C7D1Ev();
Name_Map name_map_S3502C7[] = {
  NSPAIR(_ZN7S3502C7C1Ev),
  NSPAIR(_ZN7S3502C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3502C7[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C7[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
Class_Descriptor cd_S3502C7 = {  "S3502C7", // class name
  0,0,//no base classes
  &(vtc_S3502C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3502C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3502C7),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C6  : virtual S2121C38 , S3502C7 , virtual S2121C28 {
  ~S3502C6(); // tgen
  S3502C6(); // tgen
};
//SIG(-1 S3502C6) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S3502C6 ::~S3502C6(){ note_dtor("S3502C6", this);} // tgen
S3502C6 ::S3502C6(){ note_ctor("S3502C6", this);} // tgen

static void Test_S3502C6()
{
  extern Class_Descriptor cd_S3502C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3502C6, buf);
    S3502C6 *dp, &lv = *(dp=new (buf) S3502C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3502C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C6)");
    check_base_class_offset(lv, (S2121C38*), 0, "S3502C6");
    check_base_class_offset(lv, (S3502C7*), 0, "S3502C6");
    check_base_class_offset(lv, (S2121C28*), 0, "S3502C6");
    test_class_info(&lv, &cd_S3502C6);
    dp->~S3502C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C6(Test_S3502C6, "S3502C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3502C6C1Ev();
extern void _ZN7S3502C6D1Ev();
Name_Map name_map_S3502C6[] = {
  NSPAIR(_ZN7S3502C6C1Ev),
  NSPAIR(_ZN7S3502C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S3502C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C6[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3502C6[];
static  VTT_ENTRY vtt_S3502C6[] = {
  {&(_ZTV7S3502C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
Class_Descriptor cd_S3502C6 = {  "S3502C6", // class name
  bases_S3502C6, 3,
  &(vtc_S3502C6[0]), // expected_vtbl_contents
  &(vtt_S3502C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3502C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3502C6),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C6),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C5  : S3502C6 , S3502C7 {
  ~S3502C5(); // tgen
  S3502C5(); // tgen
};
//SIG(-1 S3502C5) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S3502C5 ::~S3502C5(){ note_dtor("S3502C5", this);} // tgen
S3502C5 ::S3502C5(){ note_ctor("S3502C5", this);} // tgen

static void Test_S3502C5()
{
  extern Class_Descriptor cd_S3502C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3502C5, buf);
    S3502C5 *dp, &lv = *(dp=new (buf) S3502C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3502C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C5)");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*), 0, "S3502C5");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*), 0, "S3502C5");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*), 0, "S3502C5");
    check_base_class_offset(lv, (S3502C6*), 0, "S3502C5");
    /*is_ambiguous_... S3502C5::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*), ABISELECT(8,4), "S3502C5");
    test_class_info(&lv, &cd_S3502C5);
    dp->~S3502C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C5(Test_S3502C5, "S3502C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3502C5C1Ev();
extern void _ZN7S3502C5D1Ev();
Name_Map name_map_S3502C5[] = {
  NSPAIR(_ZN7S3502C5C1Ev),
  NSPAIR(_ZN7S3502C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
static Base_Class bases_S3502C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3502C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3502C7,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C5[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3502C5[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C6__7S3502C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C5[] = {
  {&(_ZTV7S3502C5[4]),  4,8},
  {&(_tg__ZTV7S3502C6__7S3502C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3502C5[];
extern  VTBL_ENTRY _ZTV7S3502C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C5[];
Class_Descriptor cd_S3502C5 = {  "S3502C5", // class name
  bases_S3502C5, 5,
  &(vtc_S3502C5[0]), // expected_vtbl_contents
  &(vtt_S3502C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3502C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3502C5),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C9  : S2121C38 , S3502C6 {
  virtual void  v2(); // _ZN7S3502C92v2Ev
  ~S3502C9(); // tgen
  S3502C9(); // tgen
};
//SIG(-1 S3502C9) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S3502C9 ::v2(){vfunc_called(this, "_ZN7S3502C92v2Ev");}
S3502C9 ::~S3502C9(){ note_dtor("S3502C9", this);} // tgen
S3502C9 ::S3502C9(){ note_ctor("S3502C9", this);} // tgen

static void Test_S3502C9()
{
  extern Class_Descriptor cd_S3502C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3502C9, buf);
    S3502C9 *dp, &lv = *(dp=new (buf) S3502C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3502C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C9)");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S3502C9");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*), ABISELECT(8,4), "S3502C9");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*), 0, "S3502C9");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*), 0, "S3502C9");
    check_base_class_offset(lv, (S3502C6*), 0, "S3502C9");
    test_class_info(&lv, &cd_S3502C9);
    dp->~S3502C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C9(Test_S3502C9, "S3502C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3502C9C1Ev();
extern void _ZN7S3502C9D1Ev();
Name_Map name_map_S3502C9[] = {
  NSPAIR(_ZN7S3502C9C1Ev),
  NSPAIR(_ZN7S3502C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
static Base_Class bases_S3502C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3502C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C9[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY vtc_S3502C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S3502C9[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C6__7S3502C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C9[] = {
  {&(_ZTV7S3502C9[4]),  4,6},
  {&(_tg__ZTV7S3502C6__7S3502C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
Class_Descriptor cd_S3502C9 = {  "S3502C9", // class name
  bases_S3502C9, 5,
  &(vtc_S3502C9[0]), // expected_vtbl_contents
  &(vtt_S3502C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3502C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3502C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C10  : S3502C7 , S2121C28 , virtual S2121C38 {
  ~S3502C10(); // tgen
  S3502C10(); // tgen
};
//SIG(-1 S3502C10) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S3502C10 ::~S3502C10(){ note_dtor("S3502C10", this);} // tgen
S3502C10 ::S3502C10(){ note_ctor("S3502C10", this);} // tgen

static void Test_S3502C10()
{
  extern Class_Descriptor cd_S3502C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3502C10, buf);
    S3502C10 *dp, &lv = *(dp=new (buf) S3502C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3502C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C10)");
    check_base_class_offset(lv, (S3502C7*), 0, "S3502C10");
    check_base_class_offset(lv, (S2121C28*), 0, "S3502C10");
    check_base_class_offset(lv, (S2121C38*), 0, "S3502C10");
    test_class_info(&lv, &cd_S3502C10);
    dp->~S3502C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C10(Test_S3502C10, "S3502C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3502C10C1Ev();
extern void _ZN8S3502C10D1Ev();
Name_Map name_map_S3502C10[] = {
  NSPAIR(_ZN8S3502C10C1Ev),
  NSPAIR(_ZN8S3502C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S3502C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3502C10[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S3502C10[];
static  VTT_ENTRY vtt_S3502C10[] = {
  {&(_ZTV8S3502C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
Class_Descriptor cd_S3502C10 = {  "S3502C10", // class name
  bases_S3502C10, 3,
  &(vtc_S3502C10[0]), // expected_vtbl_contents
  &(vtt_S3502C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3502C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3502C10),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3502C10),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C3  : virtual S2121C38 , virtual S3502C5 , virtual S3502C9 , virtual S3502C10 , S3502C7 {
  ~S3502C3(); // tgen
  S3502C3(); // tgen
};
//SIG(-1 S3502C3) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S3502C3 ::~S3502C3(){ note_dtor("S3502C3", this);} // tgen
S3502C3 ::S3502C3(){ note_ctor("S3502C3", this);} // tgen

static void Test_S3502C3()
{
  extern Class_Descriptor cd_S3502C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3502C3, buf);
    S3502C3 *dp, &lv = *(dp=new (buf) S3502C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3502C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C3)");
    /*is_ambiguous_... S3502C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S3502C3");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C5*), 0, "S3502C3");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), 0, "S3502C3");
    check_base_class_offset(lv, (S2121C38*)(S3502C10*), 0, "S3502C3");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C5*), ABISELECT(8,4), "S3502C3");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C5*), 0, "S3502C3");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), 0, "S3502C3");
    check_base_class_offset(lv, (S3502C6*)(S3502C5*), ABISELECT(8,4), "S3502C3");
    /*is_ambiguous_... S3502C5::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C5*), ABISELECT(16,8), "S3502C3");
    check_base_class_offset(lv, (S3502C5*), ABISELECT(8,4), "S3502C3");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), ABISELECT(24,12), "S3502C3");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), ABISELECT(24,12), "S3502C3");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), ABISELECT(24,12), "S3502C3");
    check_base_class_offset(lv, (S3502C9*), ABISELECT(24,12), "S3502C3");
    check_base_class_offset(lv, (S3502C7*)(S3502C10*), ABISELECT(32,16), "S3502C3");
    check_base_class_offset(lv, (S2121C28*)(S3502C10*), ABISELECT(32,16), "S3502C3");
    check_base_class_offset(lv, (S3502C10*), ABISELECT(32,16), "S3502C3");
    /*is_ambiguous_... S3502C3::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*), 0, "S3502C3");
    test_class_info(&lv, &cd_S3502C3);
    dp->~S3502C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C3(Test_S3502C3, "S3502C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3502C3C1Ev();
extern void _ZN7S3502C3D1Ev();
Name_Map name_map_S3502C3[] = {
  NSPAIR(_ZN7S3502C3C1Ev),
  NSPAIR(_ZN7S3502C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C5;
extern VTBL_ENTRY _ZTI7S3502C5[];
extern  VTBL_ENTRY _ZTV7S3502C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
static Base_Class bases_S3502C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3502C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3502C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C9,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3502C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C3[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C3[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3502C3[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C5__7S3502C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__A1__7S3502C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C3[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C3[] = {
  {&(_ZTV7S3502C3[7]),  7,30},
  {&(_ZTV7S3502C3[13]),  13,30},
  {&(_ZTV7S3502C3[16]),  16,30},
  {&(_ZTV7S3502C3[23]),  23,30},
  {&(_ZTV7S3502C3[29]),  29,30},
  {&(_tg__ZTV7S3502C5__7S3502C3[4]),  4,5},
  {&(_tg__ZTV7S3502C67S3502C5__7S3502C3[4]),  4,5},
  {&(_tg__ZTV7S3502C9__7S3502C3[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__A1__7S3502C3[4]),  4,5},
  {&(_tg__ZTV8S3502C10__7S3502C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3502C3[];
extern  VTBL_ENTRY _ZTV7S3502C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C3[];
Class_Descriptor cd_S3502C3 = {  "S3502C3", // class name
  bases_S3502C3, 14,
  &(vtc_S3502C3[0]), // expected_vtbl_contents
  &(vtt_S3502C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3502C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3502C3),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C3),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C2  : S3502C3 , virtual S2121C24 , S3502C6 , S2121C28 , S3502C10 {
  virtual  ~S3502C2(); // _ZN7S3502C2D2Ev
  S3502C2(); // tgen
};
//SIG(-1 S3502C2) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S3502C2 ::~S3502C2(){ note_dtor("S3502C2", this);}
S3502C2 ::S3502C2(){ note_ctor("S3502C2", this);} // tgen

static void Test_S3502C2()
{
  extern Class_Descriptor cd_S3502C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3502C2, buf);
    S3502C2 *dp, &lv = *(dp=new (buf) S3502C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3502C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C2)");
    /*is_ambiguous_... S3502C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C3*), 0, "S3502C2");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C5*), 0, "S3502C2");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C10*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C6*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C10*), 0, "S3502C2");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C5*), ABISELECT(24,12), "S3502C2");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C5*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), ABISELECT(40,20), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C6*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S3502C6*)(S3502C5*), ABISELECT(24,12), "S3502C2");
    /*is_ambiguous_... S3502C5::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C5*), ABISELECT(32,16), "S3502C2");
    check_base_class_offset(lv, (S3502C5*)(S3502C3*), ABISELECT(24,12), "S3502C2");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), ABISELECT(40,20), "S3502C2");
    check_base_class_offset(lv, (S3502C9*)(S3502C3*), ABISELECT(40,20), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C10*), ABISELECT(48,24), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C10*), ABISELECT(48,24), "S3502C2");
    check_base_class_offset(lv, (S3502C10*)(S3502C3*), ABISELECT(48,24), "S3502C2");
    /*is_ambiguous_... S3502C3::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C3*), 0, "S3502C2");
    check_base_class_offset(lv, (S3502C3*), 0, "S3502C2");
    check_base_class_offset(lv, (S2121C24*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C6*), ABISELECT(8,4), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S3502C6*), ABISELECT(8,4), "S3502C2");
    /*is_ambiguous_... S3502C2::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C10*), ABISELECT(16,8), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C10*), ABISELECT(16,8), "S3502C2");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C10*), ABISELECT(16,8), "S3502C2");
    test_class_info(&lv, &cd_S3502C2);
    dp->~S3502C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C2(Test_S3502C2, "S3502C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3502C2C1Ev();
extern void _ZN7S3502C2D2Ev();
Name_Map name_map_S3502C2[] = {
  NSPAIR(_ZN7S3502C2C1Ev),
  NSPAIR(_ZN7S3502C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C5;
extern VTBL_ENTRY _ZTI7S3502C5[];
extern  VTBL_ENTRY _ZTV7S3502C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C3;
extern VTBL_ENTRY _ZTI7S3502C3[];
extern  VTBL_ENTRY _ZTV7S3502C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C3[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
static Base_Class bases_S3502C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3502C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3502C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C5,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C9,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3502C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3502C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3502C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3502C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C2[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C2D1Ev();
extern void _ZN7S3502C2D0Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C2[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3502C2D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3502C2[];
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C3__7S3502C2[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C3__7S3502C2[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C77S3502C5__A1__7S3502C3__7S3502C2[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C3__7S3502C2[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C3__7S3502C2[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C6__A2__7S3502C2[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__A__7S3502C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C2[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C5__7S3502C2[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C2[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__A1__7S3502C2[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C2[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C2[] = {
  {&(_ZTV7S3502C2[8]),  8,42},
  {&(_tg__ZTV7S3502C3__7S3502C2[7]),  7,8},
  {&(_tg__ZTV7S3502C5__7S3502C3__7S3502C2[5]),  5,6},
  {&(_tg__ZTV7S3502C77S3502C5__A1__7S3502C3__7S3502C2[2]),  2,3},
  {&(_tg__ZTV7S3502C9__7S3502C3__7S3502C2[6]),  6,8},
  {&(_tg__ZTV8S3502C10__7S3502C3__7S3502C2[4]),  4,5},
  {&(_tg__ZTV7S3502C6__A2__7S3502C2[4]),  4,5},
  {&(_tg__ZTV8S3502C10__A__7S3502C2[3]),  3,4},
  {&(_ZTV7S3502C2[25]),  25,42},
  {&(_ZTV7S3502C2[28]),  28,42},
  {&(_ZTV7S3502C2[35]),  35,42},
  {&(_ZTV7S3502C2[41]),  41,42},
  {&(_ZTV7S3502C2[15]),  15,42},
  {&(_ZTV7S3502C2[19]),  19,42},
  {&(_tg__ZTV7S3502C5__7S3502C2[4]),  4,5},
  {&(_tg__ZTV7S3502C67S3502C5__7S3502C2[4]),  4,5},
  {&(_tg__ZTV7S3502C9__7S3502C2[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__A1__7S3502C2[4]),  4,5},
  {&(_tg__ZTV8S3502C10__7S3502C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3502C2[];
extern  VTBL_ENTRY _ZTV7S3502C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C2[];
Class_Descriptor cd_S3502C2 = {  "S3502C2", // class name
  bases_S3502C2, 22,
  &(vtc_S3502C2[0]), // expected_vtbl_contents
  &(vtt_S3502C2[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3502C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3502C2),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C2),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C13  : virtual S3502C9 {
  int s3502c13f0;
  ~S3502C13(); // tgen
  S3502C13(); // tgen
};
//SIG(-1 S3502C13) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S3502C13 ::~S3502C13(){ note_dtor("S3502C13", this);} // tgen
S3502C13 ::S3502C13(){ note_ctor("S3502C13", this);} // tgen

static void Test_S3502C13()
{
  extern Class_Descriptor cd_S3502C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3502C13, buf);
    S3502C13 *dp, &lv = *(dp=new (buf) S3502C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3502C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C13)");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), 0, "S3502C13");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), ABISELECT(12,8), "S3502C13");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), 0, "S3502C13");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), 0, "S3502C13");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), 0, "S3502C13");
    check_base_class_offset(lv, (S3502C9*), 0, "S3502C13");
    check_field_offset(lv, s3502c13f0, ABISELECT(8,4), "S3502C13.s3502c13f0");
    test_class_info(&lv, &cd_S3502C13);
    dp->~S3502C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C13(Test_S3502C13, "S3502C13", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S3502C13C1Ev();
extern void _ZN8S3502C13D1Ev();
Name_Map name_map_S3502C13[] = {
  NSPAIR(_ZN8S3502C13C1Ev),
  NSPAIR(_ZN8S3502C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
static Base_Class bases_S3502C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3502C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3502C13[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY vtc_S3502C13[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern VTBL_ENTRY _ZTV8S3502C13[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__8S3502C13[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__8S3502C13[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C13[] = {
  {&(_ZTV8S3502C13[7]),  7,9},
  {&(_ZTV8S3502C13[7]),  7,9},
  {&(_tg__ZTV7S3502C9__8S3502C13[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__8S3502C13[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S3502C13[];
extern  VTBL_ENTRY _ZTV8S3502C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C13[];
Class_Descriptor cd_S3502C13 = {  "S3502C13", // class name
  bases_S3502C13, 6,
  &(vtc_S3502C13[0]), // expected_vtbl_contents
  &(vtt_S3502C13[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S3502C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3502C13),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3502C13),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C12  : S3502C13 , virtual S3502C7 {
  __tsu64 s3502c12f0:1;
  ~S3502C12(); // tgen
  S3502C12(); // tgen
};
//SIG(-1 S3502C12) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S3502C12 ::~S3502C12(){ note_dtor("S3502C12", this);} // tgen
S3502C12 ::S3502C12(){ note_ctor("S3502C12", this);} // tgen

static void Test_S3502C12()
{
  extern Class_Descriptor cd_S3502C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3502C12, buf);
    S3502C12 *dp, &lv = *(dp=new (buf) S3502C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3502C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C12)");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), 0, "S3502C12");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), ABISELECT(13,9), "S3502C12");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), 0, "S3502C12");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), 0, "S3502C12");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), 0, "S3502C12");
    check_base_class_offset(lv, (S3502C9*)(S3502C13*), 0, "S3502C12");
    check_base_class_offset(lv, (S3502C13*), 0, "S3502C12");
    /*is_ambiguous_... S3502C12::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*), ABISELECT(16,12), "S3502C12");
    set_bf_and_test(lv, s3502c12f0, ABISELECT(12,8), 0, 1, 1, "S3502C12");
    test_class_info(&lv, &cd_S3502C12);
    dp->~S3502C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C12(Test_S3502C12, "S3502C12", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S3502C12C1Ev();
extern void _ZN8S3502C12D1Ev();
Name_Map name_map_S3502C12[] = {
  NSPAIR(_ZN8S3502C12C1Ev),
  NSPAIR(_ZN8S3502C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
extern Class_Descriptor cd_S3502C13;
extern VTBL_ENTRY _ZTI8S3502C13[];
extern  VTBL_ENTRY _ZTV8S3502C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C13[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
static Base_Class bases_S3502C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3502C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3502C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3502C7,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3502C12[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY vtc_S3502C12[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C12[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S3502C12[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S3502C12[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C13__8S3502C12[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__8S3502C12[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__8S3502C12[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
static  VTT_ENTRY vtt_S3502C12[] = {
  {&(_ZTV8S3502C12[8]),  8,14},
  {&(_tg__ZTV8S3502C13__8S3502C12[7]),  7,9},
  {&(_tg__ZTV8S3502C13__8S3502C12[7]),  7,9},
  {&(_ZTV8S3502C12[8]),  8,14},
  {&(_ZTV8S3502C12[13]),  13,14},
  {&(_tg__ZTV7S3502C9__8S3502C12[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__8S3502C12[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S3502C12[];
extern  VTBL_ENTRY _ZTV8S3502C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C12[];
Class_Descriptor cd_S3502C12 = {  "S3502C12", // class name
  bases_S3502C12, 8,
  &(vtc_S3502C12[0]), // expected_vtbl_contents
  &(vtt_S3502C12[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S3502C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3502C12),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3502C12),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3502C1  : S3502C2 , S3502C12 , virtual S3502C13 {
  ~S3502C1(); // tgen
  S3502C1(); // tgen
};
//SIG(1 S3502C1) C1{ BC2{ BC3{ VBC4{ m} VBC5{ BC6{ VBC4 BC7{ v1} VBC8{ m}} BC7} VBC9{ BC4 BC6 v2} VBC10{ BC7 BC8 VBC4} BC7} VBC11{ m} BC6 BC8 BC10 vd} BC12{ BC13{ VBC9 Fi} VBC7 FL:1} VBC13}


S3502C1 ::~S3502C1(){ note_dtor("S3502C1", this);} // tgen
S3502C1 ::S3502C1(){ note_ctor("S3502C1", this);} // tgen

static void Test_S3502C1()
{
  extern Class_Descriptor cd_S3502C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S3502C1, buf);
    S3502C1 *dp, &lv = *(dp=new (buf) S3502C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S3502C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3502C1)");
    /*is_ambiguous_... S3502C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C3*)(S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C5*), 0, "S3502C1");
    check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C9*), 0, "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C10*), 0, "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C6*)(S3502C2*), 0, "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C10*)(S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C5*), ABISELECT(40,24), "S3502C1");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C5*), ABISELECT(56,32), "S3502C1");
    check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C9*), ABISELECT(56,32), "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C6*)(S3502C2*), ABISELECT(56,32), "S3502C1");
    check_base_class_offset(lv, (S3502C6*)(S3502C5*), ABISELECT(40,24), "S3502C1");
    /*is_ambiguous_... S3502C5::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C5*), ABISELECT(48,28), "S3502C1");
    check_base_class_offset(lv, (S3502C5*)(S3502C3*)(S3502C2*), ABISELECT(40,24), "S3502C1");
    /*is_ambiguous_... S3502C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3502C9*), ABISELECT(24,12), "S3502C1");
    check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C9*), ABISELECT(24,12), "S3502C1");
    check_base_class_offset(lv, (S3502C6*)(S3502C9*), ABISELECT(24,12), "S3502C1");
    check_base_class_offset(lv, (S3502C9*)(S3502C3*)(S3502C2*), ABISELECT(24,12), "S3502C1");
    check_base_class_offset(lv, (S3502C9*)(S3502C13*)(S3502C12*), ABISELECT(24,12), "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C13 */ AMB_check_base_class_offset(lv, (S3502C9*)(S3502C13*), ABISELECT(24,12), "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C10*), ABISELECT(64,36), "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C10*), ABISELECT(64,36), "S3502C1");
    check_base_class_offset(lv, (S3502C10*)(S3502C3*)(S3502C2*), ABISELECT(64,36), "S3502C1");
    /*is_ambiguous_... S3502C3::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C3*)(S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S3502C3*)(S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S2121C24*)(S3502C2*), 0, "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C6*)(S3502C2*), ABISELECT(8,4), "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C6 */ AMB_check_base_class_offset(lv, (S3502C6*)(S3502C2*), ABISELECT(8,4), "S3502C1");
    /*is_ambiguous_... S3502C2::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C2*), 0, "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C10*)(S3502C2*), ABISELECT(16,8), "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3502C10*)(S3502C2*), ABISELECT(16,8), "S3502C1");
    /*is_ambiguous_... S3502C2::S3502C10 */ AMB_check_base_class_offset(lv, (S3502C10*)(S3502C2*), ABISELECT(16,8), "S3502C1");
    check_base_class_offset(lv, (S3502C2*), 0, "S3502C1");
    check_base_class_offset(lv, (S3502C13*)(S3502C12*), ABISELECT(24,12), "S3502C1");
    /*is_ambiguous_... S3502C12::S3502C7 */ AMB_check_base_class_offset(lv, (S3502C7*)(S3502C12*), ABISELECT(72,40), "S3502C1");
    check_base_class_offset(lv, (S3502C12*), ABISELECT(24,12), "S3502C1");
    /*is_ambiguous_... S3502C1::S3502C13 */ AMB_check_base_class_offset(lv, (S3502C13*), ABISELECT(80,44), "S3502C1");
    test_class_info(&lv, &cd_S3502C1);
    dp->~S3502C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3502C1(Test_S3502C1, "S3502C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S3502C1C1Ev();
extern void _ZN7S3502C1D1Ev();
Name_Map name_map_S3502C1[] = {
  NSPAIR(_ZN7S3502C1C1Ev),
  NSPAIR(_ZN7S3502C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C5;
extern VTBL_ENTRY _ZTI7S3502C5[];
extern  VTBL_ENTRY _ZTV7S3502C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S3502C9;
extern VTBL_ENTRY _ZTI7S3502C9[];
extern  VTBL_ENTRY _ZTV7S3502C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C9[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C3;
extern VTBL_ENTRY _ZTI7S3502C3[];
extern  VTBL_ENTRY _ZTV7S3502C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C3[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C6;
extern VTBL_ENTRY _ZTI7S3502C6[];
extern  VTBL_ENTRY _ZTV7S3502C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3502C10;
extern VTBL_ENTRY _ZTI8S3502C10[];
extern  VTBL_ENTRY _ZTV8S3502C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C10[];
extern Class_Descriptor cd_S3502C2;
extern VTBL_ENTRY _ZTI7S3502C2[];
extern  VTBL_ENTRY _ZTV7S3502C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C2[];
extern Class_Descriptor cd_S3502C13;
extern VTBL_ENTRY _ZTI8S3502C13[];
extern  VTBL_ENTRY _ZTV8S3502C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C13[];
extern Class_Descriptor cd_S3502C7;
extern VTBL_ENTRY _ZTI7S3502C7[];
extern  VTBL_ENTRY _ZTV7S3502C7[];
extern Class_Descriptor cd_S3502C12;
extern VTBL_ENTRY _ZTI8S3502C12[];
extern  VTBL_ENTRY _ZTV8S3502C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C12[];
extern Class_Descriptor cd_S3502C13;
extern VTBL_ENTRY _ZTI8S3502C13[];
extern  VTBL_ENTRY _ZTV8S3502C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3502C13[];
static Base_Class bases_S3502C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3502C7,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3502C6,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(48,28), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3502C5,    ABISELECT(40,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3502C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3502C7,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(64,36), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3502C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3502C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3502C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3502C6,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3502C10,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3502C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3502C13,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3502C7,    ABISELECT(72,40), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S3502C12,    ABISELECT(24,12), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3502C13,    ABISELECT(80,44), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3502C1[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C1D1Ev();
extern void _ZN7S3502C1D0Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY vtc_S3502C1[] = {
  ABISELECT(80,44),
  ABISELECT(72,40),
  0,
  ABISELECT(64,36),
  ABISELECT(24,12),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3502C1D0Ev,
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(48,28),
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3502C1[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S3502C1[];
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C2D1Ev();
extern void _ZN7S3502C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C2__7S3502C1[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(24,12),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3502C2D0Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C37S3502C2__7S3502C1[] = {
  ABISELECT(64,36),
  ABISELECT(24,12),
  ABISELECT(56,32),
  ABISELECT(40,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C37S3502C2__7S3502C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C77S3502C5__A1__7S3502C37S3502C2__7S3502C1[] = {
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C37S3502C2__7S3502C1[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C37S3502C2__7S3502C1[] = {
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3502C3[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C2__A2__7S3502C1[] = {
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C107S3502C2__A1__7S3502C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C2__7S3502C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C77S3502C5__A1__7S3502C2__7S3502C1[] = {
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C2__7S3502C1[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C2__7S3502C1[] = {
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C6__A2__7S3502C2__7S3502C1[] = {
  ABISELECT(48,28),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__A__7S3502C2__7S3502C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3502C2[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C12__7S3502C1[] = {
  ABISELECT(48,28),
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C12[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C138S3502C12__7S3502C1[] = {
  0,
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C7__A1__8S3502C12__7S3502C1[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S3502C12[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C5__7S3502C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C5[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C5__7S3502C1[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__7S3502C1[] = {
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C9[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C67S3502C9__A1__7S3502C1[] = {
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3502C6[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C10__7S3502C1[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C10[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV8S3502C13__A1__7S3502C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  ABISELECT(-80,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
extern void _ZN7S3502C72v1Ev();
extern void _ZN7S3502C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3502C9__8S3502C13__A1__7S3502C1[] = {
  0,
  0,
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S3502C13[0]),
  (VTBL_ENTRY)&_ZN7S3502C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3502C92v2Ev,
};
static  VTT_ENTRY vtt_S3502C1[] = {
  {&(_ZTV7S3502C1[10]),  10,59},
  {&(_tg__ZTV7S3502C2__7S3502C1[8]),  8,11},
  {&(_tg__ZTV7S3502C37S3502C2__7S3502C1[7]),  7,8},
  {&(_tg__ZTV7S3502C5__7S3502C37S3502C2__7S3502C1[5]),  5,6},
  {&(_tg__ZTV7S3502C77S3502C5__A1__7S3502C37S3502C2__7S3502C1[2]),  2,3},
  {&(_tg__ZTV7S3502C9__7S3502C37S3502C2__7S3502C1[6]),  6,8},
  {&(_tg__ZTV8S3502C10__7S3502C37S3502C2__7S3502C1[4]),  4,5},
  {&(_tg__ZTV7S3502C67S3502C2__A2__7S3502C1[4]),  4,5},
  {&(_tg__ZTV8S3502C107S3502C2__A1__7S3502C1[3]),  3,4},
  {&(_tg__ZTV7S3502C5__7S3502C2__7S3502C1[5]),  5,6},
  {&(_tg__ZTV7S3502C77S3502C5__A1__7S3502C2__7S3502C1[2]),  2,3},
  {&(_tg__ZTV7S3502C9__7S3502C2__7S3502C1[6]),  6,8},
  {&(_tg__ZTV8S3502C10__7S3502C2__7S3502C1[4]),  4,5},
  {&(_tg__ZTV7S3502C6__A2__7S3502C2__7S3502C1[4]),  4,5},
  {&(_tg__ZTV8S3502C10__A__7S3502C2__7S3502C1[3]),  3,4},
  {&(_tg__ZTV8S3502C12__7S3502C1[8]),  8,10},
  {&(_tg__ZTV8S3502C138S3502C12__7S3502C1[7]),  7,9},
  {&(_tg__ZTV8S3502C138S3502C12__7S3502C1[7]),  7,9},
  {&(_tg__ZTV8S3502C12__7S3502C1[8]),  8,10},
  {&(_tg__ZTV7S3502C7__A1__8S3502C12__7S3502C1[3]),  3,4},
  {&(_ZTV7S3502C1[37]),  37,59},
  {&(_ZTV7S3502C1[40]),  40,59},
  {&(_ZTV7S3502C1[30]),  30,59},
  {&(_ZTV7S3502C1[45]),  45,59},
  {&(_ZTV7S3502C1[17]),  17,59},
  {&(_ZTV7S3502C1[21]),  21,59},
  {&(_ZTV7S3502C1[30]),  30,59},
  {&(_ZTV7S3502C1[49]),  49,59},
  {&(_ZTV7S3502C1[57]),  57,59},
  {&(_tg__ZTV7S3502C5__7S3502C1[4]),  4,5},
  {&(_tg__ZTV7S3502C67S3502C5__7S3502C1[4]),  4,5},
  {&(_tg__ZTV7S3502C9__7S3502C1[4]),  4,6},
  {&(_tg__ZTV7S3502C67S3502C9__A1__7S3502C1[4]),  4,5},
  {&(_tg__ZTV8S3502C10__7S3502C1[3]),  3,4},
  {&(_tg__ZTV8S3502C13__A1__7S3502C1[7]),  7,9},
  {&(_tg__ZTV7S3502C9__8S3502C13__A1__7S3502C1[6]),  6,8},
};
extern VTBL_ENTRY _ZTI7S3502C1[];
extern  VTBL_ENTRY _ZTV7S3502C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3502C1[];
Class_Descriptor cd_S3502C1 = {  "S3502C1", // class name
  bases_S3502C1, 27,
  &(vtc_S3502C1[0]), // expected_vtbl_contents
  &(vtt_S3502C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S3502C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3502C1),59, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3502C1),36, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C3  {
  virtual  ~S7686C3(); // _ZN7S7686C3D1Ev
  virtual void  v8(); // _ZN7S7686C32v8Ev
  virtual void  v9(); // _ZN7S7686C32v9Ev
  virtual void  v10(); // _ZN7S7686C33v10Ev
  virtual void  v11(); // _ZN7S7686C33v11Ev
  virtual void  v12(); // _ZN7S7686C33v12Ev
  S7686C3(); // tgen
};
//SIG(-1 S7686C3) C1{ vd v1 v2 v3 v4 v5}


 S7686C3 ::~S7686C3(){ note_dtor("S7686C3", this);}
void  S7686C3 ::v8(){vfunc_called(this, "_ZN7S7686C32v8Ev");}
void  S7686C3 ::v9(){vfunc_called(this, "_ZN7S7686C32v9Ev");}
void  S7686C3 ::v10(){vfunc_called(this, "_ZN7S7686C33v10Ev");}
void  S7686C3 ::v11(){vfunc_called(this, "_ZN7S7686C33v11Ev");}
void  S7686C3 ::v12(){vfunc_called(this, "_ZN7S7686C33v12Ev");}
S7686C3 ::S7686C3(){ note_ctor("S7686C3", this);} // tgen

static void Test_S7686C3()
{
  extern Class_Descriptor cd_S7686C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7686C3, buf);
    S7686C3 *dp, &lv = *(dp=new (buf) S7686C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7686C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C3)");
    test_class_info(&lv, &cd_S7686C3);
    dp->~S7686C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C3(Test_S7686C3, "S7686C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7686C3C1Ev();
extern void _ZN7S7686C3D1Ev();
Name_Map name_map_S7686C3[] = {
  NSPAIR(_ZN7S7686C3C1Ev),
  NSPAIR(_ZN7S7686C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7686C3[];
extern void _ZN7S7686C3D1Ev();
extern void _ZN7S7686C3D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY vtc_S7686C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C3[0]),
  (VTBL_ENTRY)&_ZN7S7686C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
Class_Descriptor cd_S7686C3 = {  "S7686C3", // class name
  0,0,//no base classes
  &(vtc_S7686C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7686C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7686C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C2  : virtual S7686C3 {
  void *s7686c2f0;
  ::S7686C3 s7686c2f1;
  void *s7686c2f2;
  virtual  ~S7686C2(); // _ZN7S7686C2D2Ev
  virtual void  v13(); // _ZN7S7686C23v13Ev
  virtual void  v14(); // _ZN7S7686C23v14Ev
  virtual void  v15(); // _ZN7S7686C23v15Ev
  S7686C2(); // tgen
};
//SIG(-1 S7686C2) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S7686C2 ::~S7686C2(){ note_dtor("S7686C2", this);}
void  S7686C2 ::v13(){vfunc_called(this, "_ZN7S7686C23v13Ev");}
void  S7686C2 ::v14(){vfunc_called(this, "_ZN7S7686C23v14Ev");}
void  S7686C2 ::v15(){vfunc_called(this, "_ZN7S7686C23v15Ev");}
S7686C2 ::S7686C2(){ note_ctor("S7686C2", this);} // tgen

static void Test_S7686C2()
{
  extern Class_Descriptor cd_S7686C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7686C2, buf);
    S7686C2 *dp, &lv = *(dp=new (buf) S7686C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7686C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C2)");
    check_base_class_offset(lv, (S7686C3*), 0, "S7686C2");
    check_field_offset(lv, s7686c2f0, ABISELECT(8,4), "S7686C2.s7686c2f0");
    check_field_offset(lv, s7686c2f1, ABISELECT(16,8), "S7686C2.s7686c2f1");
    check_field_offset(lv, s7686c2f2, ABISELECT(24,12), "S7686C2.s7686c2f2");
    test_class_info(&lv, &cd_S7686C2);
    dp->~S7686C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C2(Test_S7686C2, "S7686C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7686C2C1Ev();
extern void _ZN7S7686C2D2Ev();
Name_Map name_map_S7686C2[] = {
  NSPAIR(_ZN7S7686C2C1Ev),
  NSPAIR(_ZN7S7686C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
static Base_Class bases_S7686C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C2[];
extern void _ZN7S7686C2D1Ev();
extern void _ZN7S7686C2D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY vtc_S7686C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7686C2[];
static  VTT_ENTRY vtt_S7686C2[] = {
  {&(_ZTV7S7686C2[9]),  9,19},
  {&(_ZTV7S7686C2[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
Class_Descriptor cd_S7686C2 = {  "S7686C2", // class name
  bases_S7686C2, 1,
  &(vtc_S7686C2[0]), // expected_vtbl_contents
  &(vtt_S7686C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7686C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7686C2),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C5  : S7686C2 {
  ::S7686C2 s7686c5f0[6];
  virtual void  v16(); // _ZN7S7686C53v16Ev
  ~S7686C5(); // tgen
  S7686C5(); // tgen
};
//SIG(-1 S7686C5) C1{ BC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} v1 FC2[6]}


void  S7686C5 ::v16(){vfunc_called(this, "_ZN7S7686C53v16Ev");}
S7686C5 ::~S7686C5(){ note_dtor("S7686C5", this);} // tgen
S7686C5 ::S7686C5(){ note_ctor("S7686C5", this);} // tgen

static void Test_S7686C5()
{
  extern Class_Descriptor cd_S7686C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S7686C5, buf);
    S7686C5 *dp, &lv = *(dp=new (buf) S7686C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S7686C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C5)");
    check_base_class_offset(lv, (S7686C3*)(S7686C2*), 0, "S7686C5");
    check_base_class_offset(lv, (S7686C2*), 0, "S7686C5");
    check_field_offset(lv, s7686c5f0, ABISELECT(32,16), "S7686C5.s7686c5f0");
    test_class_info(&lv, &cd_S7686C5);
    dp->~S7686C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C5(Test_S7686C5, "S7686C5", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN7S7686C5C1Ev();
extern void _ZN7S7686C5D1Ev();
Name_Map name_map_S7686C5[] = {
  NSPAIR(_ZN7S7686C5C1Ev),
  NSPAIR(_ZN7S7686C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
static Base_Class bases_S7686C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7686C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C5[];
extern void _ZN7S7686C5D1Ev();
extern void _ZN7S7686C5D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
static  VTBL_ENTRY vtc_S7686C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C5[0]),
  (VTBL_ENTRY)&_ZN7S7686C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
};
extern VTBL_ENTRY _ZTV7S7686C5[];
extern void _ZN7S7686C2D1Ev();
extern void _ZN7S7686C2D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__7S7686C5[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
static  VTT_ENTRY vtt_S7686C5[] = {
  {&(_ZTV7S7686C5[9]),  9,20},
  {&(_tg__ZTV7S7686C2__7S7686C5[9]),  9,19},
  {&(_tg__ZTV7S7686C2__7S7686C5[9]),  9,19},
  {&(_ZTV7S7686C5[9]),  9,20},
};
extern VTBL_ENTRY _ZTI7S7686C5[];
extern  VTBL_ENTRY _ZTV7S7686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C5[];
Class_Descriptor cd_S7686C5 = {  "S7686C5", // class name
  bases_S7686C5, 2,
  &(vtc_S7686C5[0]), // expected_vtbl_contents
  &(vtt_S7686C5[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI7S7686C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7686C5),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C5),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C6  : virtual S7686C2 {
  virtual  ~S7686C6(); // _ZN7S7686C6D2Ev
  virtual void  v17(); // _ZN7S7686C63v17Ev
  S7686C6(); // tgen
};
//SIG(-1 S7686C6) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S7686C6 ::~S7686C6(){ note_dtor("S7686C6", this);}
void  S7686C6 ::v17(){vfunc_called(this, "_ZN7S7686C63v17Ev");}
S7686C6 ::S7686C6(){ note_ctor("S7686C6", this);} // tgen

static void Test_S7686C6()
{
  extern Class_Descriptor cd_S7686C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7686C6, buf);
    S7686C6 *dp, &lv = *(dp=new (buf) S7686C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7686C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C6)");
    check_base_class_offset(lv, (S7686C3*)(S7686C2*), 0, "S7686C6");
    check_base_class_offset(lv, (S7686C2*), ABISELECT(8,4), "S7686C6");
    test_class_info(&lv, &cd_S7686C6);
    dp->~S7686C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C6(Test_S7686C6, "S7686C6", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7686C6C1Ev();
extern void _ZN7S7686C6D2Ev();
Name_Map name_map_S7686C6[] = {
  NSPAIR(_ZN7S7686C6C1Ev),
  NSPAIR(_ZN7S7686C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
static Base_Class bases_S7686C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7686C2,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C6[];
extern void _ZN7S7686C6D1Ev();
extern void _ZN7S7686C6D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7686C6D1Ev,_ZThn4_N7S7686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S7686C6D0Ev,_ZThn4_N7S7686C6D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY vtc_S7686C6[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&_ZN7S7686C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7686C6[];
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__7S7686C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C2__7S7686C6[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
static  VTT_ENTRY vtt_S7686C6[] = {
  {&(_ZTV7S7686C6[10]),  10,40},
  {&(_ZTV7S7686C6[30]),  30,40},
  {&(_ZTV7S7686C6[10]),  10,40},
  {&(_tg__ZTV7S7686C2__7S7686C6[9]),  9,19},
  {&(_tg__ZTV7S7686C3__7S7686C2__7S7686C6[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7686C6[];
extern  VTBL_ENTRY _ZTV7S7686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C6[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7686C6D0Ev,_ZThn4_N7S7686C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7686C6D1Ev,_ZThn4_N7S7686C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7686C6 = {  "S7686C6", // class name
  bases_S7686C6, 2,
  &(vtc_S7686C6[0]), // expected_vtbl_contents
  &(vtt_S7686C6[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7686C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7686C6),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C6),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C4  : virtual S7686C5 , virtual S7686C6 {
  ::S15319C7 s7686c4f0;
  virtual  ~S7686C4(); // _ZN7S7686C4D2Ev
  virtual void  v18(); // _ZN7S7686C43v18Ev
  virtual void  v19(); // _ZN7S7686C43v19Ev
  virtual void  v20(); // _ZN7S7686C43v20Ev
  S7686C4(); // tgen
};
//SIG(-1 S7686C4) C1{ VBC2{ BC3{ VBC4{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC4 Fp} v12 FC3[6]} VBC5{ VBC3 vd v13} vd v1 v2 v3 FC6{}}


 S7686C4 ::~S7686C4(){ note_dtor("S7686C4", this);}
void  S7686C4 ::v18(){vfunc_called(this, "_ZN7S7686C43v18Ev");}
void  S7686C4 ::v19(){vfunc_called(this, "_ZN7S7686C43v19Ev");}
void  S7686C4 ::v20(){vfunc_called(this, "_ZN7S7686C43v20Ev");}
S7686C4 ::S7686C4(){ note_ctor("S7686C4", this);} // tgen

static void Test_S7686C4()
{
  extern Class_Descriptor cd_S7686C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[35];
    init_test(&cd_S7686C4, buf);
    S7686C4 *dp, &lv = *(dp=new (buf) S7686C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,136), "sizeof(S7686C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C4)");
    check_base_class_offset(lv, (S7686C3*)(S7686C2*)(S7686C5*), ABISELECT(16,8), "S7686C4");
    /*is_ambiguous_... S7686C4::S7686C2 */ AMB_check_base_class_offset(lv, (S7686C3*)(S7686C2*), ABISELECT(16,8), "S7686C4");
    check_base_class_offset(lv, (S7686C2*)(S7686C5*), ABISELECT(16,8), "S7686C4");
    check_base_class_offset(lv, (S7686C5*), ABISELECT(16,8), "S7686C4");
    check_base_class_offset(lv, (S7686C2*)(S7686C6*), ABISELECT(240,120), "S7686C4");
    check_base_class_offset(lv, (S7686C6*), 0, "S7686C4");
    check_field_offset(lv, s7686c4f0, ABISELECT(8,4), "S7686C4.s7686c4f0");
    test_class_info(&lv, &cd_S7686C4);
    dp->~S7686C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C4(Test_S7686C4, "S7686C4", ABISELECT(272,136));

#else // __cplusplus

extern void _ZN7S7686C4C1Ev();
extern void _ZN7S7686C4D2Ev();
Name_Map name_map_S7686C4[] = {
  NSPAIR(_ZN7S7686C4C1Ev),
  NSPAIR(_ZN7S7686C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C5;
extern VTBL_ENTRY _ZTI7S7686C5[];
extern  VTBL_ENTRY _ZTV7S7686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C5[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C6;
extern VTBL_ENTRY _ZTI7S7686C6[];
extern  VTBL_ENTRY _ZTV7S7686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C6[];
static Base_Class bases_S7686C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7686C2,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7686C5,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7686C2,    ABISELECT(240,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7686C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C4[];
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void _ZN7S7686C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void _ZN7S7686C4D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
extern void _ZN7S7686C43v18Ev();
extern void _ZN7S7686C43v19Ev();
extern void _ZN7S7686C43v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7686C4D1Ev,_ZThn8_N7S7686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S7686C4D0Ev,_ZThn8_N7S7686C4D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S7686C4D1Ev,_ZThn120_N7S7686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S7686C4D0Ev,_ZThn120_N7S7686C4D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY vtc_S7686C4[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  ABISELECT(240,120),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
  0,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7686C4[];
extern void ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev)();
extern void _ZN7S7686C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev)();
extern void _ZN7S7686C5D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C5__7S7686C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C27S7686C5__7S7686C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void _ZN7S7686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void _ZN7S7686C6D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C6__7S7686C4[] = {
  ABISELECT(16,8),
  ABISELECT(240,120),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S7686C6D1Ev,_ZThn120_N7S7686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S7686C6D0Ev,_ZThn120_N7S7686C6D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__7S7686C6__7S7686C4[] = {
  0,
  0,
  0,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-240,-120),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7686C6D1Ev,_ZThn8_N7S7686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7686C6D0Ev,_ZThn8_N7S7686C6D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C6__7S7686C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__A1__7S7686C4[] = {
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C2__A1__7S7686C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
static  VTT_ENTRY vtt_S7686C4[] = {
  {&(_ZTV7S7686C4[13]),  13,70},
  {&(_ZTV7S7686C4[37]),  37,70},
  {&(_ZTV7S7686C4[37]),  37,70},
  {&(_ZTV7S7686C4[13]),  13,70},
  {&(_ZTV7S7686C4[60]),  60,70},
  {&(_tg__ZTV7S7686C5__7S7686C4[9]),  9,20},
  {&(_tg__ZTV7S7686C27S7686C5__7S7686C4[9]),  9,19},
  {&(_tg__ZTV7S7686C27S7686C5__7S7686C4[9]),  9,19},
  {&(_tg__ZTV7S7686C5__7S7686C4[9]),  9,20},
  {&(_tg__ZTV7S7686C6__7S7686C4[10]),  10,18},
  {&(_tg__ZTV7S7686C2__7S7686C6__7S7686C4[12]),  12,22},
  {&(_tg__ZTV7S7686C3__7S7686C6__7S7686C4[8]),  8,15},
  {&(_tg__ZTV7S7686C2__A1__7S7686C4[9]),  9,19},
  {&(_tg__ZTV7S7686C3__7S7686C2__A1__7S7686C4[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7686C4[];
extern  VTBL_ENTRY _ZTV7S7686C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C4[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C6D0Ev,_ZThn8_N7S7686C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C6D0Ev,_ZThn120_N7S7686C6D0Ev),
  (VTBL_ENTRY)_ZN7S7686C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C6D1Ev,_ZThn8_N7S7686C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C6D1Ev,_ZThn120_N7S7686C6D1Ev),
  (VTBL_ENTRY)_ZN7S7686C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C4D0Ev,_ZThn120_N7S7686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C4D0Ev,_ZThn8_N7S7686C4D0Ev),
  (VTBL_ENTRY)_ZN7S7686C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C4D1Ev,_ZThn120_N7S7686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C4D1Ev,_ZThn8_N7S7686C4D1Ev),
  (VTBL_ENTRY)_ZN7S7686C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7686C4 = {  "S7686C4", // class name
  bases_S7686C4, 5,
  &(vtc_S7686C4[0]), // expected_vtbl_contents
  &(vtt_S7686C4[0]), // expected_vtt_contents
  ABISELECT(272,136), // object size
  NSPAIRA(_ZTI7S7686C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7686C4),70, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C4),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7686C1  : S7686C2 , S7686C4 {
  int s7686c1f0;
  virtual  ~S7686C1(); // _ZN7S7686C1D2Ev
  virtual void  v1(); // _ZN7S7686C12v1Ev
  virtual void  v2(); // _ZN7S7686C12v2Ev
  virtual void  v3(); // _ZN7S7686C12v3Ev
  virtual void  v4(); // _ZN7S7686C12v4Ev
  virtual void  v5(); // _ZN7S7686C12v5Ev
  virtual void  v6(); // _ZN7S7686C12v6Ev
  virtual void  v7(); // _ZN7S7686C12v7Ev
  S7686C1(); // tgen
};
//SIG(1 S7686C1) C1{ BC2{ VBC3{ vd v8 v9 v10 v11 v12} vd v13 v14 v15 Fp FC3 Fp} BC4{ VBC5{ BC2 v16 FC2[6]} VBC6{ VBC2 vd v17} vd v18 v19 v20 FC7{}} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S7686C1 ::~S7686C1(){ note_dtor("S7686C1", this);}
void  S7686C1 ::v1(){vfunc_called(this, "_ZN7S7686C12v1Ev");}
void  S7686C1 ::v2(){vfunc_called(this, "_ZN7S7686C12v2Ev");}
void  S7686C1 ::v3(){vfunc_called(this, "_ZN7S7686C12v3Ev");}
void  S7686C1 ::v4(){vfunc_called(this, "_ZN7S7686C12v4Ev");}
void  S7686C1 ::v5(){vfunc_called(this, "_ZN7S7686C12v5Ev");}
void  S7686C1 ::v6(){vfunc_called(this, "_ZN7S7686C12v6Ev");}
void  S7686C1 ::v7(){vfunc_called(this, "_ZN7S7686C12v7Ev");}
S7686C1 ::S7686C1(){ note_ctor("S7686C1", this);} // tgen

static void Test_S7686C1()
{
  extern Class_Descriptor cd_S7686C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,40)];
    init_test(&cd_S7686C1, buf);
    S7686C1 *dp, &lv = *(dp=new (buf) S7686C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,156), "sizeof(S7686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7686C1)");
    /*is_ambiguous_... S7686C1::S7686C2 */ AMB_check_base_class_offset(lv, (S7686C3*)(S7686C2*), 0, "S7686C1");
    check_base_class_offset(lv, (S7686C3*)(S7686C2*)(S7686C5*), 0, "S7686C1");
    /*is_ambiguous_... S7686C1::S7686C2 */ AMB_check_base_class_offset(lv, (S7686C3*)(S7686C2*), 0, "S7686C1");
    /*is_ambiguous_... S7686C1::S7686C2 */ AMB_check_base_class_offset(lv, (S7686C2*), 0, "S7686C1");
    check_base_class_offset(lv, (S7686C2*)(S7686C5*), ABISELECT(48,28), "S7686C1");
    check_base_class_offset(lv, (S7686C5*)(S7686C4*), ABISELECT(48,28), "S7686C1");
    check_base_class_offset(lv, (S7686C2*)(S7686C6*), ABISELECT(272,140), "S7686C1");
    check_base_class_offset(lv, (S7686C6*)(S7686C4*), ABISELECT(32,16), "S7686C1");
    check_base_class_offset(lv, (S7686C4*), ABISELECT(32,16), "S7686C1");
    check_field_offset(lv, s7686c1f0, ABISELECT(44,24), "S7686C1.s7686c1f0");
    test_class_info(&lv, &cd_S7686C1);
    dp->~S7686C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7686C1(Test_S7686C1, "S7686C1", ABISELECT(304,156));

#else // __cplusplus

extern void _ZN7S7686C1C1Ev();
extern void _ZN7S7686C1D2Ev();
Name_Map name_map_S7686C1[] = {
  NSPAIR(_ZN7S7686C1C1Ev),
  NSPAIR(_ZN7S7686C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7686C3;
extern VTBL_ENTRY _ZTI7S7686C3[];
extern  VTBL_ENTRY _ZTV7S7686C3[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C5;
extern VTBL_ENTRY _ZTI7S7686C5[];
extern  VTBL_ENTRY _ZTV7S7686C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C5[];
extern Class_Descriptor cd_S7686C2;
extern VTBL_ENTRY _ZTI7S7686C2[];
extern  VTBL_ENTRY _ZTV7S7686C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C2[];
extern Class_Descriptor cd_S7686C6;
extern VTBL_ENTRY _ZTI7S7686C6[];
extern  VTBL_ENTRY _ZTV7S7686C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C6[];
extern Class_Descriptor cd_S7686C4;
extern VTBL_ENTRY _ZTI7S7686C4[];
extern  VTBL_ENTRY _ZTV7S7686C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C4[];
static Base_Class bases_S7686C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7686C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7686C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7686C2,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7686C5,    ABISELECT(48,28), //bcp->offset
    53, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7686C2,    ABISELECT(272,140), //bcp->offset
    77, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7686C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7686C4,    ABISELECT(32,16), //bcp->offset
    29, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7686C1[];
extern void _ZN7S7686C1D1Ev();
extern void _ZN7S7686C1D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C12v1Ev();
extern void _ZN7S7686C12v2Ev();
extern void _ZN7S7686C12v3Ev();
extern void _ZN7S7686C12v4Ev();
extern void _ZN7S7686C12v5Ev();
extern void _ZN7S7686C12v6Ev();
extern void _ZN7S7686C12v7Ev();
extern void ABISELECT(_ZThn32_N7S7686C1D1Ev,_ZThn16_N7S7686C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7686C1D0Ev,_ZThn16_N7S7686C1D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
extern void _ZN7S7686C43v18Ev();
extern void _ZN7S7686C43v19Ev();
extern void _ZN7S7686C43v20Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7686C1D1Ev,_ZThn28_N7S7686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S7686C1D0Ev,_ZThn28_N7S7686C1D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev)();
extern void ABISELECT(_ZThn272_N7S7686C1D1Ev,_ZThn140_N7S7686C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev)();
extern void ABISELECT(_ZThn272_N7S7686C1D0Ev,_ZThn140_N7S7686C1D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY vtc_S7686C1[] = {
  ABISELECT(272,140),
  ABISELECT(32,16),
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C1[0]),
  (VTBL_ENTRY)&_ZN7S7686C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7686C12v7Ev,
  0,
  ABISELECT(16,12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(240,124),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7686C1D1Ev,_ZThn16_N7S7686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S7686C1D0Ev,_ZThn16_N7S7686C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
  0,
  0,
  0,
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI7S7686C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7686C1[];
extern void _ZN7S7686C2D1Ev();
extern void _ZN7S7686C2D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__A__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void _ZN7S7686C4D1Ev();
extern void _ZN7S7686C4D0Ev();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
extern void _ZN7S7686C43v18Ev();
extern void _ZN7S7686C43v19Ev();
extern void _ZN7S7686C43v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C4__7S7686C1[] = {
  0,
  ABISELECT(16,12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(240,124),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&_ZN7S7686C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7686C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v18Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v19Ev,
  (VTBL_ENTRY)&_ZN7S7686C43v20Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7686C4D1Ev,_ZThn12_N7S7686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S7686C4D0Ev,_ZThn12_N7S7686C4D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C5__7S7686C4__7S7686C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C4__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev)();
extern void ABISELECT(_ZThn240_N7S7686C4D1Ev,_ZThn124_N7S7686C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev)();
extern void ABISELECT(_ZThn240_N7S7686C4D0Ev,_ZThn124_N7S7686C4D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__A1__7S7686C4__7S7686C1[] = {
  0,
  0,
  0,
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI7S7686C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev)();
extern void _ZN7S7686C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev)();
extern void _ZN7S7686C5D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
extern void _ZN7S7686C53v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C5__7S7686C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7686C53v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C27S7686C5__A1__7S7686C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C27S7686C5__A1__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C5__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7686C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void _ZN7S7686C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void _ZN7S7686C6D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C63v17Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C6__7S7686C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(240,124),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C63v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZThn240_N7S7686C6D1Ev,_ZThn124_N7S7686C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void ABISELECT(_ZThn240_N7S7686C6D0Ev,_ZThn124_N7S7686C6D0Ev)() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__7S7686C6__7S7686C1[] = {
  0,
  0,
  0,
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C6__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S7686C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void _ZN7S7686C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C2D0Ev() __attribute__((weak));
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
extern void _ZN7S7686C23v13Ev();
extern void _ZN7S7686C23v14Ev();
extern void _ZN7S7686C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C2__A2__7S7686C1[] = {
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7686C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev)();
extern void _ZN7S7686C32v8Ev();
extern void _ZN7S7686C32v9Ev();
extern void _ZN7S7686C33v10Ev();
extern void _ZN7S7686C33v11Ev();
extern void _ZN7S7686C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7686C3__7S7686C2__A2__7S7686C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(272,140),
  ABISELECT(272,140),
  (VTBL_ENTRY)&(_ZTI7S7686C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7686C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7686C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7686C33v12Ev,
};
static  VTT_ENTRY vtt_S7686C1[] = {
  {&(_ZTV7S7686C1[12]),  12,99},
  {&(_tg__ZTV7S7686C2__A__7S7686C1[9]),  9,19},
  {&(_tg__ZTV7S7686C2__A__7S7686C1[9]),  9,19},
  {&(_tg__ZTV7S7686C4__7S7686C1[13]),  13,24},
  {&(_tg__ZTV7S7686C5__7S7686C4__7S7686C1[13]),  13,24},
  {&(_tg__ZTV7S7686C3__7S7686C4__7S7686C1[8]),  8,15},
  {&(_tg__ZTV7S7686C4__7S7686C1[13]),  13,24},
  {&(_tg__ZTV7S7686C2__A1__7S7686C4__7S7686C1[12]),  12,22},
  {&(_ZTV7S7686C1[12]),  12,99},
  {&(_ZTV7S7686C1[42]),  42,99},
  {&(_ZTV7S7686C1[66]),  66,99},
  {&(_ZTV7S7686C1[42]),  42,99},
  {&(_ZTV7S7686C1[89]),  89,99},
  {&(_tg__ZTV7S7686C5__7S7686C1[9]),  9,20},
  {&(_tg__ZTV7S7686C27S7686C5__A1__7S7686C1[9]),  9,19},
  {&(_tg__ZTV7S7686C3__7S7686C27S7686C5__A1__7S7686C1[8]),  8,15},
  {&(_tg__ZTV7S7686C3__7S7686C5__7S7686C1[8]),  8,15},
  {&(_tg__ZTV7S7686C6__7S7686C1[10]),  10,18},
  {&(_tg__ZTV7S7686C2__7S7686C6__7S7686C1[12]),  12,22},
  {&(_tg__ZTV7S7686C3__7S7686C6__7S7686C1[8]),  8,15},
  {&(_tg__ZTV7S7686C2__A2__7S7686C1[9]),  9,19},
  {&(_tg__ZTV7S7686C3__7S7686C2__A2__7S7686C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7686C1[];
extern  VTBL_ENTRY _ZTV7S7686C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7686C1[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D0Ev,_ZTv0_n12_N7S7686C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C6D0Ev,_ZThn124_N7S7686C6D0Ev),
  (VTBL_ENTRY)_ZN7S7686C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C6D1Ev,_ZTv0_n12_N7S7686C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C6D1Ev,_ZThn124_N7S7686C6D1Ev),
  (VTBL_ENTRY)_ZN7S7686C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D0Ev,_ZTv0_n12_N7S7686C2D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  (VTBL_ENTRY)_ZN7S7686C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C2D1Ev,_ZTv0_n12_N7S7686C2D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  (VTBL_ENTRY)_ZN7S7686C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C5D0Ev,_ZTv0_n12_N7S7686C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7686C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C5D1Ev,_ZTv0_n12_N7S7686C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7686C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C4D0Ev,_ZTv0_n12_N7S7686C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C4D0Ev,_ZThn124_N7S7686C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C4D0Ev,_ZThn12_N7S7686C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C4D1Ev,_ZTv0_n12_N7S7686C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7686C4D1Ev,_ZThn124_N7S7686C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7686C4D1Ev,_ZThn12_N7S7686C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C1D0Ev,_ZTv0_n12_N7S7686C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7686C1D0Ev,_ZThn140_N7S7686C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7686C1D0Ev,_ZThn28_N7S7686C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7686C1D1Ev,_ZTv0_n12_N7S7686C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7686C1D1Ev,_ZThn140_N7S7686C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7686C1D1Ev,_ZThn28_N7S7686C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7686C1 = {  "S7686C1", // class name
  bases_S7686C1, 7,
  &(vtc_S7686C1[0]), // expected_vtbl_contents
  &(vtt_S7686C1[0]), // expected_vtt_contents
  ABISELECT(304,156), // object size
  NSPAIRA(_ZTI7S7686C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7686C1),99, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7686C1),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20841C3_nt  {
  virtual void  v3(); // _ZN11S20841C3_nt2v3Ev
  virtual void  v4(); // _ZN11S20841C3_nt2v4Ev
  virtual void  v5(); // _ZN11S20841C3_nt2v5Ev
  virtual void  v6(); // _ZN11S20841C3_nt2v6Ev
  ~S20841C3_nt(); // tgen
  S20841C3_nt(); // tgen
};
//SIG(-1 S20841C3_nt) C1{ v1 v2 v3 v4}


void  S20841C3_nt ::v3(){vfunc_called(this, "_ZN11S20841C3_nt2v3Ev");}
void  S20841C3_nt ::v4(){vfunc_called(this, "_ZN11S20841C3_nt2v4Ev");}
void  S20841C3_nt ::v5(){vfunc_called(this, "_ZN11S20841C3_nt2v5Ev");}
void  S20841C3_nt ::v6(){vfunc_called(this, "_ZN11S20841C3_nt2v6Ev");}
S20841C3_nt ::~S20841C3_nt(){ note_dtor("S20841C3_nt", this);} // tgen
S20841C3_nt ::S20841C3_nt(){ note_ctor("S20841C3_nt", this);} // tgen

//skip512 S20841C3_nt

#else // __cplusplus

extern void _ZN11S20841C3_ntC1Ev();
extern void _ZN11S20841C3_ntD1Ev();
Name_Map name_map_S20841C3_nt[] = {
  NSPAIR(_ZN11S20841C3_ntC1Ev),
  NSPAIR(_ZN11S20841C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20841C3_nt[];
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S20841C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20841C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI11S20841C3_nt[];
VTBL_ENTRY *P__ZTI11S20841C3_nt = _ZTI11S20841C3_nt; 
extern  VTBL_ENTRY _ZTV11S20841C3_nt[];
Class_Descriptor cd_S20841C3_nt = {  "S20841C3_nt", // class name
  0,0,//no base classes
  &(vtc_S20841C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20841C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20841C3_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20841C5_nt  {
  long double s20841c5f0[2];
  virtual void  v19(); // _ZN11S20841C5_nt3v19Ev
  ~S20841C5_nt(); // tgen
  S20841C5_nt(); // tgen
};
//SIG(-1 S20841C5_nt) C1{ v1 FD[2]}


void  S20841C5_nt ::v19(){vfunc_called(this, "_ZN11S20841C5_nt3v19Ev");}
S20841C5_nt ::~S20841C5_nt(){ note_dtor("S20841C5_nt", this);} // tgen
S20841C5_nt ::S20841C5_nt(){ note_ctor("S20841C5_nt", this);} // tgen

//skip512 S20841C5_nt

#else // __cplusplus

extern void _ZN11S20841C5_ntC1Ev();
extern void _ZN11S20841C5_ntD1Ev();
Name_Map name_map_S20841C5_nt[] = {
  NSPAIR(_ZN11S20841C5_ntC1Ev),
  NSPAIR(_ZN11S20841C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20841C5_nt[];
extern void _ZN11S20841C5_nt3v19Ev();
static  VTBL_ENTRY vtc_S20841C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20841C5_nt[0]),
  (VTBL_ENTRY)&_ZN11S20841C5_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI11S20841C5_nt[];
VTBL_ENTRY *P__ZTI11S20841C5_nt = _ZTI11S20841C5_nt; 
extern  VTBL_ENTRY _ZTV11S20841C5_nt[];
Class_Descriptor cd_S20841C5_nt = {  "S20841C5_nt", // class name
  0,0,//no base classes
  &(vtc_S20841C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI11S20841C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20841C5_nt),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20841C2  : virtual S20841C3_nt {
  ::S15319C7 s20841c2f0;
  long double s20841c2f1;
  ::S20841C5_nt s20841c2f2;
  ::S15319C7 s20841c2f3;
  virtual  ~S20841C2(); // _ZN8S20841C2D2Ev
  virtual void  v7(); // _ZN8S20841C22v7Ev
  virtual void  v8(); // _ZN8S20841C22v8Ev
  virtual void  v9(); // _ZN8S20841C22v9Ev
  virtual void  v10(); // _ZN8S20841C23v10Ev
  virtual void  v11(); // _ZN8S20841C23v11Ev
  virtual void  v12(); // _ZN8S20841C23v12Ev
  S20841C2(); // tgen
};
//SIG(-1 S20841C2) C1{ VBC2{ v7 v8 v9 v10} vd v1 v2 v3 v4 v5 v6 FC3{} FD FC4{ v11 FD[2]} FC3}


 S20841C2 ::~S20841C2(){ note_dtor("S20841C2", this);}
void  S20841C2 ::v7(){vfunc_called(this, "_ZN8S20841C22v7Ev");}
void  S20841C2 ::v8(){vfunc_called(this, "_ZN8S20841C22v8Ev");}
void  S20841C2 ::v9(){vfunc_called(this, "_ZN8S20841C22v9Ev");}
void  S20841C2 ::v10(){vfunc_called(this, "_ZN8S20841C23v10Ev");}
void  S20841C2 ::v11(){vfunc_called(this, "_ZN8S20841C23v11Ev");}
void  S20841C2 ::v12(){vfunc_called(this, "_ZN8S20841C23v12Ev");}
S20841C2 ::S20841C2(){ note_ctor("S20841C2", this);} // tgen

static void Test_S20841C2()
{
  extern Class_Descriptor cd_S20841C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S20841C2, buf);
    S20841C2 *dp, &lv = *(dp=new (buf) S20841C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20841C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20841C2)");
    check_base_class_offset(lv, (S20841C3_nt*), 0, "S20841C2");
    check_field_offset(lv, s20841c2f0, ABISELECT(8,4), "S20841C2.s20841c2f0");
    check_field_offset(lv, s20841c2f1, ABISELECT(16,8), "S20841C2.s20841c2f1");
    check_field_offset(lv, s20841c2f2, ABISELECT(32,20), "S20841C2.s20841c2f2");
    check_field_offset(lv, s20841c2f3, ABISELECT(80,48), "S20841C2.s20841c2f3");
    test_class_info(&lv, &cd_S20841C2);
    dp->~S20841C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C2(Test_S20841C2, "S20841C2", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20841C2C1Ev();
extern void _ZN8S20841C2D2Ev();
Name_Map name_map_S20841C2[] = {
  NSPAIR(_ZN8S20841C2C1Ev),
  NSPAIR(_ZN8S20841C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20841C3_nt;
extern VTBL_ENTRY _ZTI11S20841C3_nt[];
extern  VTBL_ENTRY _ZTV11S20841C3_nt[];
static Base_Class bases_S20841C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20841C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20841C2[];
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
extern void _ZN8S20841C2D1Ev();
extern void _ZN8S20841C2D0Ev();
extern void _ZN8S20841C22v7Ev();
extern void _ZN8S20841C22v8Ev();
extern void _ZN8S20841C22v9Ev();
extern void _ZN8S20841C23v10Ev();
extern void _ZN8S20841C23v11Ev();
extern void _ZN8S20841C23v12Ev();
static  VTBL_ENTRY vtc_S20841C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C2[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S20841C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20841C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v12Ev,
};
extern VTBL_ENTRY _ZTV8S20841C2[];
static  VTT_ENTRY vtt_S20841C2[] = {
  {&(_ZTV8S20841C2[7]),  7,19},
  {&(_ZTV8S20841C2[7]),  7,19},
};
extern VTBL_ENTRY _ZTI8S20841C2[];
extern  VTBL_ENTRY _ZTV8S20841C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20841C2[];
Class_Descriptor cd_S20841C2 = {  "S20841C2", // class name
  bases_S20841C2, 1,
  &(vtc_S20841C2[0]), // expected_vtbl_contents
  &(vtt_S20841C2[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20841C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20841C2),19, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20841C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20841C7  {
  virtual void  v15(); // _ZN8S20841C73v15Ev
  virtual void  v16(); // _ZN8S20841C73v16Ev
  virtual void  v17(); // _ZN8S20841C73v17Ev
  virtual void  v18(); // _ZN8S20841C73v18Ev
  ~S20841C7(); // tgen
  S20841C7(); // tgen
};
//SIG(-1 S20841C7) C1{ v1 v2 v3 v4}


void  S20841C7 ::v15(){vfunc_called(this, "_ZN8S20841C73v15Ev");}
void  S20841C7 ::v16(){vfunc_called(this, "_ZN8S20841C73v16Ev");}
void  S20841C7 ::v17(){vfunc_called(this, "_ZN8S20841C73v17Ev");}
void  S20841C7 ::v18(){vfunc_called(this, "_ZN8S20841C73v18Ev");}
S20841C7 ::~S20841C7(){ note_dtor("S20841C7", this);} // tgen
S20841C7 ::S20841C7(){ note_ctor("S20841C7", this);} // tgen

static void Test_S20841C7()
{
  extern Class_Descriptor cd_S20841C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20841C7, buf);
    S20841C7 *dp, &lv = *(dp=new (buf) S20841C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20841C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20841C7)");
    test_class_info(&lv, &cd_S20841C7);
    dp->~S20841C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C7(Test_S20841C7, "S20841C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20841C7C1Ev();
extern void _ZN8S20841C7D1Ev();
Name_Map name_map_S20841C7[] = {
  NSPAIR(_ZN8S20841C7C1Ev),
  NSPAIR(_ZN8S20841C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20841C7[];
extern void _ZN8S20841C73v15Ev();
extern void _ZN8S20841C73v16Ev();
extern void _ZN8S20841C73v17Ev();
extern void _ZN8S20841C73v18Ev();
static  VTBL_ENTRY vtc_S20841C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C7[0]),
  (VTBL_ENTRY)&_ZN8S20841C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v18Ev,
};
extern VTBL_ENTRY _ZTI8S20841C7[];
extern  VTBL_ENTRY _ZTV8S20841C7[];
Class_Descriptor cd_S20841C7 = {  "S20841C7", // class name
  0,0,//no base classes
  &(vtc_S20841C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20841C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20841C7),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20841C8  : S20841C5_nt {
  ::S15319C7 s20841c8f0;
  ~S20841C8(); // tgen
  S20841C8(); // tgen
};
//SIG(1 S20841C8) C1{ BC2{ v1 FD[2]} FC3{}}


S20841C8 ::~S20841C8(){ note_dtor("S20841C8", this);} // tgen
S20841C8 ::S20841C8(){ note_ctor("S20841C8", this);} // tgen

static void Test_S20841C8()
{
  extern Class_Descriptor cd_S20841C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S20841C8, buf);
    S20841C8 *dp, &lv = *(dp=new (buf) S20841C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20841C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20841C8)");
    check_base_class_offset(lv, (S20841C5_nt*), 0, "S20841C8");
    check_field_offset(lv, s20841c8f0, ABISELECT(48,28), "S20841C8.s20841c8f0");
    test_class_info(&lv, &cd_S20841C8);
    dp->~S20841C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C8(Test_S20841C8, "S20841C8", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20841C8C1Ev();
extern void _ZN8S20841C8D1Ev();
Name_Map name_map_S20841C8[] = {
  NSPAIR(_ZN8S20841C8C1Ev),
  NSPAIR(_ZN8S20841C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20841C5_nt;
extern VTBL_ENTRY _ZTI11S20841C5_nt[];
extern  VTBL_ENTRY _ZTV11S20841C5_nt[];
static Base_Class bases_S20841C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20841C5_nt,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20841C8[];
extern void _ZN11S20841C5_nt3v19Ev();
static  VTBL_ENTRY vtc_S20841C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C8[0]),
  (VTBL_ENTRY)&_ZN11S20841C5_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI8S20841C8[];
extern  VTBL_ENTRY _ZTV8S20841C8[];
Class_Descriptor cd_S20841C8 = {  "S20841C8", // class name
  bases_S20841C8, 1,
  &(vtc_S20841C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20841C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20841C8),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20841C6  : virtual S20841C7 , virtual S20841C5_nt {
  int s20841c6f0;
  ::S20841C8 s20841c6f1[4];
  virtual void  v13(); // _ZN8S20841C63v13Ev
  virtual void  v14(); // _ZN8S20841C63v14Ev
  ~S20841C6(); // tgen
  S20841C6(); // tgen
};
//SIG(-1 S20841C6) C1{ VBC2{ v3 v4 v5 v6} VBC3{ v7 FD[2]} v1 v2 Fi FC4{ BC3 FC5{}}[4]}


void  S20841C6 ::v13(){vfunc_called(this, "_ZN8S20841C63v13Ev");}
void  S20841C6 ::v14(){vfunc_called(this, "_ZN8S20841C63v14Ev");}
S20841C6 ::~S20841C6(){ note_dtor("S20841C6", this);} // tgen
S20841C6 ::S20841C6(){ note_ctor("S20841C6", this);} // tgen

static void Test_S20841C6()
{
  extern Class_Descriptor cd_S20841C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(21,42)];
    init_test(&cd_S20841C6, buf);
    S20841C6 *dp, &lv = *(dp=new (buf) S20841C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,164), "sizeof(S20841C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20841C6)");
    check_base_class_offset(lv, (S20841C7*), 0, "S20841C6");
    check_base_class_offset(lv, (S20841C5_nt*), ABISELECT(272,136), "S20841C6");
    check_field_offset(lv, s20841c6f0, ABISELECT(8,4), "S20841C6.s20841c6f0");
    check_field_offset(lv, s20841c6f1, ABISELECT(16,8), "S20841C6.s20841c6f1");
    test_class_info(&lv, &cd_S20841C6);
    dp->~S20841C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C6(Test_S20841C6, "S20841C6", ABISELECT(320,164));

#else // __cplusplus

extern void _ZN8S20841C6C1Ev();
extern void _ZN8S20841C6D1Ev();
Name_Map name_map_S20841C6[] = {
  NSPAIR(_ZN8S20841C6C1Ev),
  NSPAIR(_ZN8S20841C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20841C7;
extern VTBL_ENTRY _ZTI8S20841C7[];
extern  VTBL_ENTRY _ZTV8S20841C7[];
extern Class_Descriptor cd_S20841C5_nt;
extern VTBL_ENTRY _ZTI11S20841C5_nt[];
extern  VTBL_ENTRY _ZTV11S20841C5_nt[];
static Base_Class bases_S20841C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20841C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20841C5_nt,    ABISELECT(272,136), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20841C6[];
extern void _ZN8S20841C73v15Ev();
extern void _ZN8S20841C73v16Ev();
extern void _ZN8S20841C73v17Ev();
extern void _ZN8S20841C73v18Ev();
extern void _ZN8S20841C63v13Ev();
extern void _ZN8S20841C63v14Ev();
extern void _ZN11S20841C5_nt3v19Ev();
static  VTBL_ENTRY vtc_S20841C6[] = {
  ABISELECT(272,136),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C6[0]),
  (VTBL_ENTRY)&_ZN8S20841C73v15Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v16Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v17Ev,
  (VTBL_ENTRY)&_ZN8S20841C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20841C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20841C63v14Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S20841C6[0]),
  (VTBL_ENTRY)&_ZN11S20841C5_nt3v19Ev,
};
extern VTBL_ENTRY _ZTV8S20841C6[];
static  VTT_ENTRY vtt_S20841C6[] = {
  {&(_ZTV8S20841C6[8]),  8,18},
  {&(_ZTV8S20841C6[8]),  8,18},
  {&(_ZTV8S20841C6[17]),  17,18},
};
extern VTBL_ENTRY _ZTI8S20841C6[];
extern  VTBL_ENTRY _ZTV8S20841C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20841C6[];
Class_Descriptor cd_S20841C6 = {  "S20841C6", // class name
  bases_S20841C6, 2,
  &(vtc_S20841C6[0]), // expected_vtbl_contents
  &(vtt_S20841C6[0]), // expected_vtt_contents
  ABISELECT(320,164), // object size
  NSPAIRA(_ZTI8S20841C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20841C6),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20841C6),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20841C1  : virtual S20841C2 {
  ::S20841C6 s20841c1f0;
  virtual  ~S20841C1(); // _ZN8S20841C1D2Ev
  virtual void  v1(); // _ZN8S20841C12v1Ev
  virtual void  v2(); // _ZN8S20841C12v2Ev
  S20841C1(); // tgen
};
//SIG(1 S20841C1) C1{ VBC2{ VBC3{ v3 v4 v5 v6} vd v7 v8 v9 v10 v11 v12 FC4{} FD FC5{ v19 FD[2]} FC4} vd v1 v2 FC6{ VBC7{ v15 v16 v17 v18} VBC5 v13 v14 Fi FC8{ BC5 FC4}[4]}}


 S20841C1 ::~S20841C1(){ note_dtor("S20841C1", this);}
void  S20841C1 ::v1(){vfunc_called(this, "_ZN8S20841C12v1Ev");}
void  S20841C1 ::v2(){vfunc_called(this, "_ZN8S20841C12v2Ev");}
S20841C1 ::S20841C1(){ note_ctor("S20841C1", this);} // tgen

static void Test_S20841C1()
{
  extern Class_Descriptor cd_S20841C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,56)];
    init_test(&cd_S20841C1, buf);
    S20841C1 *dp, &lv = *(dp=new (buf) S20841C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,220), "sizeof(S20841C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20841C1)");
    check_base_class_offset(lv, (S20841C3_nt*)(S20841C2*), 0, "S20841C1");
    check_base_class_offset(lv, (S20841C2*), ABISELECT(336,168), "S20841C1");
    check_field_offset(lv, s20841c1f0, ABISELECT(16,4), "S20841C1.s20841c1f0");
    test_class_info(&lv, &cd_S20841C1);
    dp->~S20841C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20841C1(Test_S20841C1, "S20841C1", ABISELECT(432,220));

#else // __cplusplus

extern void _ZN8S20841C1C1Ev();
extern void _ZN8S20841C1D2Ev();
Name_Map name_map_S20841C1[] = {
  NSPAIR(_ZN8S20841C1C1Ev),
  NSPAIR(_ZN8S20841C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20841C3_nt;
extern VTBL_ENTRY _ZTI11S20841C3_nt[];
extern  VTBL_ENTRY _ZTV11S20841C3_nt[];
extern Class_Descriptor cd_S20841C2;
extern VTBL_ENTRY _ZTI8S20841C2[];
extern  VTBL_ENTRY _ZTV8S20841C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20841C2[];
static Base_Class bases_S20841C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20841C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20841C2,    ABISELECT(336,168), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20841C1[];
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
extern void _ZN8S20841C1D1Ev();
extern void _ZN8S20841C1D0Ev();
extern void _ZN8S20841C12v1Ev();
extern void _ZN8S20841C12v2Ev();
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
extern void ABISELECT(_ZTv0_n64_N8S20841C1D1Ev,_ZTv0_n32_N8S20841C1D1Ev)();
extern void ABISELECT(_ZThn336_N8S20841C1D1Ev,_ZThn168_N8S20841C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20841C1D0Ev,_ZTv0_n32_N8S20841C1D0Ev)();
extern void ABISELECT(_ZThn336_N8S20841C1D0Ev,_ZThn168_N8S20841C1D0Ev)() __attribute__((weak));
extern void _ZN8S20841C22v7Ev();
extern void _ZN8S20841C22v8Ev();
extern void _ZN8S20841C22v9Ev();
extern void _ZN8S20841C23v10Ev();
extern void _ZN8S20841C23v11Ev();
extern void _ZN8S20841C23v12Ev();
static  VTBL_ENTRY vtc_S20841C1[] = {
  0,
  ABISELECT(336,168),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C1[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S20841C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20841C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20841C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20841C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  (VTBL_ENTRY)&(_ZTI8S20841C1[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20841C1D1Ev,_ZTv0_n32_N8S20841C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20841C1D0Ev,_ZTv0_n32_N8S20841C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20841C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v12Ev,
};
extern VTBL_ENTRY _ZTV8S20841C1[];
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
extern void _ZN8S20841C2D1Ev();
extern void _ZN8S20841C2D0Ev();
extern void _ZN8S20841C22v7Ev();
extern void _ZN8S20841C22v8Ev();
extern void _ZN8S20841C22v9Ev();
extern void _ZN8S20841C23v10Ev();
extern void _ZN8S20841C23v11Ev();
extern void _ZN8S20841C23v12Ev();
static  VTBL_ENTRY _tg__ZTV8S20841C2__8S20841C1[] = {
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  ABISELECT(-336,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20841C2[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S20841C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20841C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20841C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20841C23v12Ev,
};
extern void _ZN11S20841C3_nt2v3Ev();
extern void _ZN11S20841C3_nt2v4Ev();
extern void _ZN11S20841C3_nt2v5Ev();
extern void _ZN11S20841C3_nt2v6Ev();
static  VTBL_ENTRY _tg__ZTV11S20841C3_nt__8S20841C2__8S20841C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(336,168),
  (VTBL_ENTRY)&(_ZTI8S20841C2[0]),
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S20841C3_nt2v6Ev,
};
static  VTT_ENTRY vtt_S20841C1[] = {
  {&(_ZTV8S20841C1[8]),  8,42},
  {&(_ZTV8S20841C1[30]),  30,42},
  {&(_ZTV8S20841C1[8]),  8,42},
  {&(_tg__ZTV8S20841C2__8S20841C1[7]),  7,19},
  {&(_tg__ZTV11S20841C3_nt__8S20841C2__8S20841C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20841C1[];
extern  VTBL_ENTRY _ZTV8S20841C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20841C1[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20841C1D0Ev,_ZTv0_n32_N8S20841C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20841C1D0Ev,_ZThn168_N8S20841C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20841C1D1Ev,_ZTv0_n32_N8S20841C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20841C1D1Ev,_ZThn168_N8S20841C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20841C1 = {  "S20841C1", // class name
  bases_S20841C1, 2,
  &(vtc_S20841C1[0]), // expected_vtbl_contents
  &(vtt_S20841C1[0]), // expected_vtt_contents
  ABISELECT(432,220), // object size
  NSPAIRA(_ZTI8S20841C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20841C1),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20841C1),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C2_nt  {
  virtual void  v1(); // _ZN11S19961C2_nt2v1Ev
  virtual void  v2(); // _ZN11S19961C2_nt2v2Ev
  virtual void  v3(); // _ZN11S19961C2_nt2v3Ev
  virtual void  v4(); // _ZN11S19961C2_nt2v4Ev
  virtual void  v5(); // _ZN11S19961C2_nt2v5Ev
  virtual void  v6(); // _ZN11S19961C2_nt2v6Ev
  ~S19961C2_nt(); // tgen
  S19961C2_nt(); // tgen
};
//SIG(-1 S19961C2_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S19961C2_nt ::v1(){vfunc_called(this, "_ZN11S19961C2_nt2v1Ev");}
void  S19961C2_nt ::v2(){vfunc_called(this, "_ZN11S19961C2_nt2v2Ev");}
void  S19961C2_nt ::v3(){vfunc_called(this, "_ZN11S19961C2_nt2v3Ev");}
void  S19961C2_nt ::v4(){vfunc_called(this, "_ZN11S19961C2_nt2v4Ev");}
void  S19961C2_nt ::v5(){vfunc_called(this, "_ZN11S19961C2_nt2v5Ev");}
void  S19961C2_nt ::v6(){vfunc_called(this, "_ZN11S19961C2_nt2v6Ev");}
S19961C2_nt ::~S19961C2_nt(){ note_dtor("S19961C2_nt", this);} // tgen
S19961C2_nt ::S19961C2_nt(){ note_ctor("S19961C2_nt", this);} // tgen

//skip512 S19961C2_nt

#else // __cplusplus

extern void _ZN11S19961C2_ntC1Ev();
extern void _ZN11S19961C2_ntD1Ev();
Name_Map name_map_S19961C2_nt[] = {
  NSPAIR(_ZN11S19961C2_ntC1Ev),
  NSPAIR(_ZN11S19961C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19961C2_nt[];
extern void _ZN11S19961C2_nt2v1Ev();
extern void _ZN11S19961C2_nt2v2Ev();
extern void _ZN11S19961C2_nt2v3Ev();
extern void _ZN11S19961C2_nt2v4Ev();
extern void _ZN11S19961C2_nt2v5Ev();
extern void _ZN11S19961C2_nt2v6Ev();
static  VTBL_ENTRY vtc_S19961C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19961C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI11S19961C2_nt[];
VTBL_ENTRY *P__ZTI11S19961C2_nt = _ZTI11S19961C2_nt; 
extern  VTBL_ENTRY _ZTV11S19961C2_nt[];
Class_Descriptor cd_S19961C2_nt = {  "S19961C2_nt", // class name
  0,0,//no base classes
  &(vtc_S19961C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19961C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19961C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C4_nt  {
  void *s19961c4f0;
  long s19961c4f1[6];
  char s19961c4f2:5;
  virtual void  v7(); // _ZN11S19961C4_nt2v7Ev
  virtual void  v8(); // _ZN11S19961C4_nt2v8Ev
  virtual void  v9(); // _ZN11S19961C4_nt2v9Ev
  virtual void  v10(); // _ZN11S19961C4_nt3v10Ev
  ~S19961C4_nt(); // tgen
  S19961C4_nt(); // tgen
};
//SIG(-1 S19961C4_nt) C1{ v1 v2 v3 v4 Fp Fl[6] Fc:5}


void  S19961C4_nt ::v7(){vfunc_called(this, "_ZN11S19961C4_nt2v7Ev");}
void  S19961C4_nt ::v8(){vfunc_called(this, "_ZN11S19961C4_nt2v8Ev");}
void  S19961C4_nt ::v9(){vfunc_called(this, "_ZN11S19961C4_nt2v9Ev");}
void  S19961C4_nt ::v10(){vfunc_called(this, "_ZN11S19961C4_nt3v10Ev");}
S19961C4_nt ::~S19961C4_nt(){ note_dtor("S19961C4_nt", this);} // tgen
S19961C4_nt ::S19961C4_nt(){ note_ctor("S19961C4_nt", this);} // tgen

//skip512 S19961C4_nt

#else // __cplusplus

extern void _ZN11S19961C4_ntC1Ev();
extern void _ZN11S19961C4_ntD1Ev();
Name_Map name_map_S19961C4_nt[] = {
  NSPAIR(_ZN11S19961C4_ntC1Ev),
  NSPAIR(_ZN11S19961C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19961C4_nt[];
extern void _ZN11S19961C4_nt2v7Ev();
extern void _ZN11S19961C4_nt2v8Ev();
extern void _ZN11S19961C4_nt2v9Ev();
extern void _ZN11S19961C4_nt3v10Ev();
static  VTBL_ENTRY vtc_S19961C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19961C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI11S19961C4_nt[];
VTBL_ENTRY *P__ZTI11S19961C4_nt = _ZTI11S19961C4_nt; 
extern  VTBL_ENTRY _ZTV11S19961C4_nt[];
Class_Descriptor cd_S19961C4_nt = {  "S19961C4_nt", // class name
  0,0,//no base classes
  &(vtc_S19961C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI11S19961C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19961C4_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C3  : S19961C4_nt {
  int s19961c3f0;
  virtual  ~S19961C3(); // _ZN8S19961C3D1Ev
  virtual void  v11(); // _ZN8S19961C33v11Ev
  virtual void  v12(); // _ZN8S19961C33v12Ev
  S19961C3(); // tgen
};
//SIG(-1 S19961C3) C1{ BC2{ v3 v4 v5 v6 Fp Fl[6] Fc:5} vd v1 v2 Fi}


 S19961C3 ::~S19961C3(){ note_dtor("S19961C3", this);}
void  S19961C3 ::v11(){vfunc_called(this, "_ZN8S19961C33v11Ev");}
void  S19961C3 ::v12(){vfunc_called(this, "_ZN8S19961C33v12Ev");}
S19961C3 ::S19961C3(){ note_ctor("S19961C3", this);} // tgen

static void Test_S19961C3()
{
  extern Class_Descriptor cd_S19961C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S19961C3, buf);
    S19961C3 *dp, &lv = *(dp=new (buf) S19961C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S19961C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C3)");
    check_base_class_offset(lv, (S19961C4_nt*), 0, "S19961C3");
    check_field_offset(lv, s19961c3f0, ABISELECT(68,36), "S19961C3.s19961c3f0");
    test_class_info(&lv, &cd_S19961C3);
    dp->~S19961C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C3(Test_S19961C3, "S19961C3", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S19961C3C1Ev();
extern void _ZN8S19961C3D1Ev();
Name_Map name_map_S19961C3[] = {
  NSPAIR(_ZN8S19961C3C1Ev),
  NSPAIR(_ZN8S19961C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19961C4_nt;
extern VTBL_ENTRY _ZTI11S19961C4_nt[];
extern  VTBL_ENTRY _ZTV11S19961C4_nt[];
static Base_Class bases_S19961C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19961C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19961C3[];
extern void _ZN11S19961C4_nt2v7Ev();
extern void _ZN11S19961C4_nt2v8Ev();
extern void _ZN11S19961C4_nt2v9Ev();
extern void _ZN11S19961C4_nt3v10Ev();
extern void _ZN8S19961C3D1Ev();
extern void _ZN8S19961C3D0Ev();
extern void _ZN8S19961C33v11Ev();
extern void _ZN8S19961C33v12Ev();
static  VTBL_ENTRY vtc_S19961C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C3[0]),
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN8S19961C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19961C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19961C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19961C33v12Ev,
};
extern VTBL_ENTRY _ZTI8S19961C3[];
extern  VTBL_ENTRY _ZTV8S19961C3[];
Class_Descriptor cd_S19961C3 = {  "S19961C3", // class name
  bases_S19961C3, 1,
  &(vtc_S19961C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S19961C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19961C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C6  {
  char s19961c6f0[8];
  virtual void  v15(); // _ZN8S19961C63v15Ev
  ~S19961C6(); // tgen
  S19961C6(); // tgen
};
//SIG(-1 S19961C6) C1{ v1 Fc[8]}


void  S19961C6 ::v15(){vfunc_called(this, "_ZN8S19961C63v15Ev");}
S19961C6 ::~S19961C6(){ note_dtor("S19961C6", this);} // tgen
S19961C6 ::S19961C6(){ note_ctor("S19961C6", this);} // tgen

static void Test_S19961C6()
{
  extern Class_Descriptor cd_S19961C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19961C6, buf);
    S19961C6 *dp, &lv = *(dp=new (buf) S19961C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19961C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C6)");
    check_field_offset(lv, s19961c6f0, ABISELECT(8,4), "S19961C6.s19961c6f0");
    test_class_info(&lv, &cd_S19961C6);
    dp->~S19961C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C6(Test_S19961C6, "S19961C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19961C6C1Ev();
extern void _ZN8S19961C6D1Ev();
Name_Map name_map_S19961C6[] = {
  NSPAIR(_ZN8S19961C6C1Ev),
  NSPAIR(_ZN8S19961C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19961C6[];
extern void _ZN8S19961C63v15Ev();
static  VTBL_ENTRY vtc_S19961C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C6[0]),
  (VTBL_ENTRY)&_ZN8S19961C63v15Ev,
};
extern VTBL_ENTRY _ZTI8S19961C6[];
extern  VTBL_ENTRY _ZTV8S19961C6[];
Class_Descriptor cd_S19961C6 = {  "S19961C6", // class name
  0,0,//no base classes
  &(vtc_S19961C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19961C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19961C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C8  {
  virtual void  v16(); // _ZN8S19961C83v16Ev
  virtual void  v17(); // _ZN8S19961C83v17Ev
  virtual void  v18(); // _ZN8S19961C83v18Ev
  virtual void  v19(); // _ZN8S19961C83v19Ev
  ~S19961C8(); // tgen
  S19961C8(); // tgen
};
//SIG(-1 S19961C8) C1{ v1 v2 v3 v4}


void  S19961C8 ::v16(){vfunc_called(this, "_ZN8S19961C83v16Ev");}
void  S19961C8 ::v17(){vfunc_called(this, "_ZN8S19961C83v17Ev");}
void  S19961C8 ::v18(){vfunc_called(this, "_ZN8S19961C83v18Ev");}
void  S19961C8 ::v19(){vfunc_called(this, "_ZN8S19961C83v19Ev");}
S19961C8 ::~S19961C8(){ note_dtor("S19961C8", this);} // tgen
S19961C8 ::S19961C8(){ note_ctor("S19961C8", this);} // tgen

static void Test_S19961C8()
{
  extern Class_Descriptor cd_S19961C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19961C8, buf);
    S19961C8 *dp, &lv = *(dp=new (buf) S19961C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19961C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C8)");
    test_class_info(&lv, &cd_S19961C8);
    dp->~S19961C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C8(Test_S19961C8, "S19961C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19961C8C1Ev();
extern void _ZN8S19961C8D1Ev();
Name_Map name_map_S19961C8[] = {
  NSPAIR(_ZN8S19961C8C1Ev),
  NSPAIR(_ZN8S19961C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19961C8[];
extern void _ZN8S19961C83v16Ev();
extern void _ZN8S19961C83v17Ev();
extern void _ZN8S19961C83v18Ev();
extern void _ZN8S19961C83v19Ev();
static  VTBL_ENTRY vtc_S19961C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C8[0]),
  (VTBL_ENTRY)&_ZN8S19961C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S19961C8[];
extern  VTBL_ENTRY _ZTV8S19961C8[];
Class_Descriptor cd_S19961C8 = {  "S19961C8", // class name
  0,0,//no base classes
  &(vtc_S19961C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19961C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19961C8),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C7  : S19961C8 {
  int s19961c7f0;
  ~S19961C7(); // tgen
  S19961C7(); // tgen
};
//SIG(-1 S19961C7) C1{ BC2{ v1 v2 v3 v4} Fi}


S19961C7 ::~S19961C7(){ note_dtor("S19961C7", this);} // tgen
S19961C7 ::S19961C7(){ note_ctor("S19961C7", this);} // tgen

static void Test_S19961C7()
{
  extern Class_Descriptor cd_S19961C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19961C7, buf);
    S19961C7 *dp, &lv = *(dp=new (buf) S19961C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19961C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C7)");
    check_base_class_offset(lv, (S19961C8*), 0, "S19961C7");
    check_field_offset(lv, s19961c7f0, ABISELECT(8,4), "S19961C7.s19961c7f0");
    test_class_info(&lv, &cd_S19961C7);
    dp->~S19961C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C7(Test_S19961C7, "S19961C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19961C7C1Ev();
extern void _ZN8S19961C7D1Ev();
Name_Map name_map_S19961C7[] = {
  NSPAIR(_ZN8S19961C7C1Ev),
  NSPAIR(_ZN8S19961C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19961C8;
extern VTBL_ENTRY _ZTI8S19961C8[];
extern  VTBL_ENTRY _ZTV8S19961C8[];
static Base_Class bases_S19961C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19961C8,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19961C7[];
extern void _ZN8S19961C83v16Ev();
extern void _ZN8S19961C83v17Ev();
extern void _ZN8S19961C83v18Ev();
extern void _ZN8S19961C83v19Ev();
static  VTBL_ENTRY vtc_S19961C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C7[0]),
  (VTBL_ENTRY)&_ZN8S19961C83v16Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v17Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v18Ev,
  (VTBL_ENTRY)&_ZN8S19961C83v19Ev,
};
extern VTBL_ENTRY _ZTI8S19961C7[];
extern  VTBL_ENTRY _ZTV8S19961C7[];
Class_Descriptor cd_S19961C7 = {  "S19961C7", // class name
  bases_S19961C7, 1,
  &(vtc_S19961C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19961C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19961C7),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C5  : S19961C6 {
  int s19961c5f0;
  ::S19961C7 s19961c5f1;
  virtual void  v13(); // _ZN8S19961C53v13Ev
  virtual void  v14(); // _ZN8S19961C53v14Ev
  ~S19961C5(); // tgen
  S19961C5(); // tgen
};
//SIG(-1 S19961C5) C1{ BC2{ v3 Fc[8]} v1 v2 Fi FC3{ BC4{ v4 v5 v6 v7} Fi}}


void  S19961C5 ::v13(){vfunc_called(this, "_ZN8S19961C53v13Ev");}
void  S19961C5 ::v14(){vfunc_called(this, "_ZN8S19961C53v14Ev");}
S19961C5 ::~S19961C5(){ note_dtor("S19961C5", this);} // tgen
S19961C5 ::S19961C5(){ note_ctor("S19961C5", this);} // tgen

static void Test_S19961C5()
{
  extern Class_Descriptor cd_S19961C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19961C5, buf);
    S19961C5 *dp, &lv = *(dp=new (buf) S19961C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19961C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C5)");
    check_base_class_offset(lv, (S19961C6*), 0, "S19961C5");
    check_field_offset(lv, s19961c5f0, ABISELECT(16,12), "S19961C5.s19961c5f0");
    check_field_offset(lv, s19961c5f1, ABISELECT(24,16), "S19961C5.s19961c5f1");
    test_class_info(&lv, &cd_S19961C5);
    dp->~S19961C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C5(Test_S19961C5, "S19961C5", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S19961C5C1Ev();
extern void _ZN8S19961C5D1Ev();
Name_Map name_map_S19961C5[] = {
  NSPAIR(_ZN8S19961C5C1Ev),
  NSPAIR(_ZN8S19961C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19961C6;
extern VTBL_ENTRY _ZTI8S19961C6[];
extern  VTBL_ENTRY _ZTV8S19961C6[];
static Base_Class bases_S19961C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19961C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19961C5[];
extern void _ZN8S19961C63v15Ev();
extern void _ZN8S19961C53v13Ev();
extern void _ZN8S19961C53v14Ev();
static  VTBL_ENTRY vtc_S19961C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C5[0]),
  (VTBL_ENTRY)&_ZN8S19961C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19961C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19961C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S19961C5[];
extern  VTBL_ENTRY _ZTV8S19961C5[];
Class_Descriptor cd_S19961C5 = {  "S19961C5", // class name
  bases_S19961C5, 1,
  &(vtc_S19961C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S19961C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19961C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19961C1  : virtual S19961C2_nt , virtual S19961C3 {
  ::S19961C5 s19961c1f0;
  ::S19961C2_nt s19961c1f1;
  virtual  ~S19961C1(); // _ZN8S19961C1D2Ev
  S19961C1(); // tgen
};
//SIG(1 S19961C1) C1{ VBC2{ v1 v2 v3 v4 v5 v6} VBC3{ BC4{ v7 v8 v9 v10 Fp Fl[6] Fc:5} vd v11 v12 Fi} vd FC5{ BC6{ v15 Fc[8]} v13 v14 Fi FC7{ BC8{ v16 v17 v18 v19} Fi}} FC2}


 S19961C1 ::~S19961C1(){ note_dtor("S19961C1", this);}
S19961C1 ::S19961C1(){ note_ctor("S19961C1", this);} // tgen

static void Test_S19961C1()
{
  extern Class_Descriptor cd_S19961C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,19)];
    init_test(&cd_S19961C1, buf);
    S19961C1 *dp, &lv = *(dp=new (buf) S19961C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,72), "sizeof(S19961C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19961C1)");
    check_base_class_offset(lv, (S19961C2_nt*), 0, "S19961C1");
    check_base_class_offset(lv, (S19961C4_nt*)(S19961C3*), ABISELECT(56,32), "S19961C1");
    check_base_class_offset(lv, (S19961C3*), ABISELECT(56,32), "S19961C1");
    check_field_offset(lv, s19961c1f0, ABISELECT(8,4), "S19961C1.s19961c1f0");
    check_field_offset(lv, s19961c1f1, ABISELECT(48,28), "S19961C1.s19961c1f1");
    test_class_info(&lv, &cd_S19961C1);
    dp->~S19961C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19961C1(Test_S19961C1, "S19961C1", ABISELECT(128,72));

#else // __cplusplus

extern void _ZN8S19961C1C1Ev();
extern void _ZN8S19961C1D2Ev();
Name_Map name_map_S19961C1[] = {
  NSPAIR(_ZN8S19961C1C1Ev),
  NSPAIR(_ZN8S19961C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19961C2_nt;
extern VTBL_ENTRY _ZTI11S19961C2_nt[];
extern  VTBL_ENTRY _ZTV11S19961C2_nt[];
extern Class_Descriptor cd_S19961C4_nt;
extern VTBL_ENTRY _ZTI11S19961C4_nt[];
extern  VTBL_ENTRY _ZTV11S19961C4_nt[];
extern Class_Descriptor cd_S19961C3;
extern VTBL_ENTRY _ZTI8S19961C3[];
extern  VTBL_ENTRY _ZTV8S19961C3[];
static Base_Class bases_S19961C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19961C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19961C4_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19961C3,    ABISELECT(56,32), //bcp->offset
    18, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19961C1[];
extern void _ZN11S19961C2_nt2v1Ev();
extern void _ZN11S19961C2_nt2v2Ev();
extern void _ZN11S19961C2_nt2v3Ev();
extern void _ZN11S19961C2_nt2v4Ev();
extern void _ZN11S19961C2_nt2v5Ev();
extern void _ZN11S19961C2_nt2v6Ev();
extern void _ZN8S19961C1D1Ev();
extern void _ZN8S19961C1D0Ev();
extern void _ZN11S19961C4_nt2v7Ev();
extern void _ZN11S19961C4_nt2v8Ev();
extern void _ZN11S19961C4_nt2v9Ev();
extern void _ZN11S19961C4_nt3v10Ev();
extern void ABISELECT(_ZTv0_n56_N8S19961C1D1Ev,_ZTv0_n28_N8S19961C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19961C1D1Ev,_ZThn32_N8S19961C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19961C1D0Ev,_ZTv0_n28_N8S19961C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19961C1D0Ev,_ZThn32_N8S19961C1D0Ev)() __attribute__((weak));
extern void _ZN8S19961C33v11Ev();
extern void _ZN8S19961C33v12Ev();
static  VTBL_ENTRY vtc_S19961C1[] = {
  ABISELECT(56,32),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19961C1[0]),
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN11S19961C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN8S19961C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19961C1D0Ev,
  0,
  0,
  ABISELECT(-56,-32),
  0,
  0,
  0,
  0,
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19961C1[0]),
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S19961C4_nt3v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19961C1D1Ev,_ZTv0_n28_N8S19961C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19961C1D0Ev,_ZTv0_n28_N8S19961C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19961C33v11Ev,
  (VTBL_ENTRY)&_ZN8S19961C33v12Ev,
};
extern VTBL_ENTRY _ZTV8S19961C1[];
static  VTT_ENTRY vtt_S19961C1[] = {
  {&(_ZTV8S19961C1[10]),  10,35},
  {&(_ZTV8S19961C1[10]),  10,35},
  {&(_ZTV8S19961C1[27]),  27,35},
};
extern VTBL_ENTRY _ZTI8S19961C1[];
extern  VTBL_ENTRY _ZTV8S19961C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19961C1[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19961C1D0Ev,_ZTv0_n28_N8S19961C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19961C1D0Ev,_ZThn32_N8S19961C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19961C1D1Ev,_ZTv0_n28_N8S19961C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19961C1D1Ev,_ZThn32_N8S19961C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19961C1 = {  "S19961C1", // class name
  bases_S19961C1, 3,
  &(vtc_S19961C1[0]), // expected_vtbl_contents
  &(vtt_S19961C1[0]), // expected_vtt_contents
  ABISELECT(128,72), // object size
  NSPAIRA(_ZTI8S19961C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19961C1),35, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19961C1),3, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4253C3  {
  int s4253c3f0;
  void *s4253c3f1[2];
  virtual  ~S4253C3(); // _ZN7S4253C3D1Ev
  virtual void  v14(); // _ZN7S4253C33v14Ev
  virtual void  v15(); // _ZN7S4253C33v15Ev
  virtual void  v16(); // _ZN7S4253C33v16Ev
  virtual void  v17(); // _ZN7S4253C33v17Ev
  virtual void  v18(); // _ZN7S4253C33v18Ev
  virtual void  v19(); // _ZN7S4253C33v19Ev
  virtual void  v20(); // _ZN7S4253C33v20Ev
  virtual void  v21(); // _ZN7S4253C33v21Ev
  virtual void  v22(); // _ZN7S4253C33v22Ev
  virtual void  v23(); // _ZN7S4253C33v23Ev
  virtual void  v24(); // _ZN7S4253C33v24Ev
  S4253C3(); // tgen
};
//SIG(-1 S4253C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2]}


 S4253C3 ::~S4253C3(){ note_dtor("S4253C3", this);}
void  S4253C3 ::v14(){vfunc_called(this, "_ZN7S4253C33v14Ev");}
void  S4253C3 ::v15(){vfunc_called(this, "_ZN7S4253C33v15Ev");}
void  S4253C3 ::v16(){vfunc_called(this, "_ZN7S4253C33v16Ev");}
void  S4253C3 ::v17(){vfunc_called(this, "_ZN7S4253C33v17Ev");}
void  S4253C3 ::v18(){vfunc_called(this, "_ZN7S4253C33v18Ev");}
void  S4253C3 ::v19(){vfunc_called(this, "_ZN7S4253C33v19Ev");}
void  S4253C3 ::v20(){vfunc_called(this, "_ZN7S4253C33v20Ev");}
void  S4253C3 ::v21(){vfunc_called(this, "_ZN7S4253C33v21Ev");}
void  S4253C3 ::v22(){vfunc_called(this, "_ZN7S4253C33v22Ev");}
void  S4253C3 ::v23(){vfunc_called(this, "_ZN7S4253C33v23Ev");}
void  S4253C3 ::v24(){vfunc_called(this, "_ZN7S4253C33v24Ev");}
S4253C3 ::S4253C3(){ note_ctor("S4253C3", this);} // tgen

static void Test_S4253C3()
{
  extern Class_Descriptor cd_S4253C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4253C3, buf);
    S4253C3 *dp, &lv = *(dp=new (buf) S4253C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4253C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4253C3)");
    check_field_offset(lv, s4253c3f0, ABISELECT(8,4), "S4253C3.s4253c3f0");
    check_field_offset(lv, s4253c3f1, ABISELECT(16,8), "S4253C3.s4253c3f1");
    test_class_info(&lv, &cd_S4253C3);
    dp->~S4253C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4253C3(Test_S4253C3, "S4253C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4253C3C1Ev();
extern void _ZN7S4253C3D1Ev();
Name_Map name_map_S4253C3[] = {
  NSPAIR(_ZN7S4253C3C1Ev),
  NSPAIR(_ZN7S4253C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4253C3[];
extern void _ZN7S4253C3D1Ev();
extern void _ZN7S4253C3D0Ev();
extern void _ZN7S4253C33v14Ev();
extern void _ZN7S4253C33v15Ev();
extern void _ZN7S4253C33v16Ev();
extern void _ZN7S4253C33v17Ev();
extern void _ZN7S4253C33v18Ev();
extern void _ZN7S4253C33v19Ev();
extern void _ZN7S4253C33v20Ev();
extern void _ZN7S4253C33v21Ev();
extern void _ZN7S4253C33v22Ev();
extern void _ZN7S4253C33v23Ev();
extern void _ZN7S4253C33v24Ev();
static  VTBL_ENTRY vtc_S4253C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4253C3[0]),
  (VTBL_ENTRY)&_ZN7S4253C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4253C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v24Ev,
};
extern VTBL_ENTRY _ZTI7S4253C3[];
extern  VTBL_ENTRY _ZTV7S4253C3[];
Class_Descriptor cd_S4253C3 = {  "S4253C3", // class name
  0,0,//no base classes
  &(vtc_S4253C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4253C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4253C3),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4253C2  : S4253C3 {
  int s4253c2f0;
  virtual  ~S4253C2(); // _ZN7S4253C2D1Ev
  virtual void  v25(); // _ZN7S4253C23v25Ev
  virtual void  v26(); // _ZN7S4253C23v26Ev
  S4253C2(); // tgen
};
//SIG(-1 S4253C2) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fi Fp[2]} vd v1 v2 Fi}


 S4253C2 ::~S4253C2(){ note_dtor("S4253C2", this);}
void  S4253C2 ::v25(){vfunc_called(this, "_ZN7S4253C23v25Ev");}
void  S4253C2 ::v26(){vfunc_called(this, "_ZN7S4253C23v26Ev");}
S4253C2 ::S4253C2(){ note_ctor("S4253C2", this);} // tgen

static void Test_S4253C2()
{
  extern Class_Descriptor cd_S4253C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S4253C2, buf);
    S4253C2 *dp, &lv = *(dp=new (buf) S4253C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S4253C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4253C2)");
    check_base_class_offset(lv, (S4253C3*), 0, "S4253C2");
    check_field_offset(lv, s4253c2f0, ABISELECT(32,16), "S4253C2.s4253c2f0");
    test_class_info(&lv, &cd_S4253C2);
    dp->~S4253C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4253C2(Test_S4253C2, "S4253C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S4253C2C1Ev();
extern void _ZN7S4253C2D1Ev();
Name_Map name_map_S4253C2[] = {
  NSPAIR(_ZN7S4253C2C1Ev),
  NSPAIR(_ZN7S4253C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4253C3;
extern VTBL_ENTRY _ZTI7S4253C3[];
extern  VTBL_ENTRY _ZTV7S4253C3[];
static Base_Class bases_S4253C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4253C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4253C2[];
extern void _ZN7S4253C2D1Ev();
extern void _ZN7S4253C2D0Ev();
extern void _ZN7S4253C33v14Ev();
extern void _ZN7S4253C33v15Ev();
extern void _ZN7S4253C33v16Ev();
extern void _ZN7S4253C33v17Ev();
extern void _ZN7S4253C33v18Ev();
extern void _ZN7S4253C33v19Ev();
extern void _ZN7S4253C33v20Ev();
extern void _ZN7S4253C33v21Ev();
extern void _ZN7S4253C33v22Ev();
extern void _ZN7S4253C33v23Ev();
extern void _ZN7S4253C33v24Ev();
extern void _ZN7S4253C23v25Ev();
extern void _ZN7S4253C23v26Ev();
static  VTBL_ENTRY vtc_S4253C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4253C2[0]),
  (VTBL_ENTRY)&_ZN7S4253C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4253C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4253C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4253C23v26Ev,
};
extern VTBL_ENTRY _ZTI7S4253C2[];
extern  VTBL_ENTRY _ZTV7S4253C2[];
Class_Descriptor cd_S4253C2 = {  "S4253C2", // class name
  bases_S4253C2, 1,
  &(vtc_S4253C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S4253C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4253C2),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4253C1  : S4253C2 {
  void *s4253c1f0;
  int s4253c1f1[5];
  virtual  ~S4253C1(); // _ZN7S4253C1D1Ev
  virtual void  v1(); // _ZN7S4253C12v1Ev
  virtual void  v2(); // _ZN7S4253C12v2Ev
  virtual void  v3(); // _ZN7S4253C12v3Ev
  virtual void  v4(); // _ZN7S4253C12v4Ev
  virtual void  v5(); // _ZN7S4253C12v5Ev
  virtual void  v6(); // _ZN7S4253C12v6Ev
  virtual void  v7(); // _ZN7S4253C12v7Ev
  virtual void  v8(); // _ZN7S4253C12v8Ev
  virtual void  v9(); // _ZN7S4253C12v9Ev
  virtual void  v10(); // _ZN7S4253C13v10Ev
  virtual void  v11(); // _ZN7S4253C13v11Ev
  virtual void  v12(); // _ZN7S4253C13v12Ev
  virtual void  v13(); // _ZN7S4253C13v13Ev
  S4253C1(); // tgen
};
//SIG(1 S4253C1) C1{ BC2{ BC3{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fi Fp[2]} vd v25 v26 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp Fi[5]}


 S4253C1 ::~S4253C1(){ note_dtor("S4253C1", this);}
void  S4253C1 ::v1(){vfunc_called(this, "_ZN7S4253C12v1Ev");}
void  S4253C1 ::v2(){vfunc_called(this, "_ZN7S4253C12v2Ev");}
void  S4253C1 ::v3(){vfunc_called(this, "_ZN7S4253C12v3Ev");}
void  S4253C1 ::v4(){vfunc_called(this, "_ZN7S4253C12v4Ev");}
void  S4253C1 ::v5(){vfunc_called(this, "_ZN7S4253C12v5Ev");}
void  S4253C1 ::v6(){vfunc_called(this, "_ZN7S4253C12v6Ev");}
void  S4253C1 ::v7(){vfunc_called(this, "_ZN7S4253C12v7Ev");}
void  S4253C1 ::v8(){vfunc_called(this, "_ZN7S4253C12v8Ev");}
void  S4253C1 ::v9(){vfunc_called(this, "_ZN7S4253C12v9Ev");}
void  S4253C1 ::v10(){vfunc_called(this, "_ZN7S4253C13v10Ev");}
void  S4253C1 ::v11(){vfunc_called(this, "_ZN7S4253C13v11Ev");}
void  S4253C1 ::v12(){vfunc_called(this, "_ZN7S4253C13v12Ev");}
void  S4253C1 ::v13(){vfunc_called(this, "_ZN7S4253C13v13Ev");}
S4253C1 ::S4253C1(){ note_ctor("S4253C1", this);} // tgen

static void Test_S4253C1()
{
  extern Class_Descriptor cd_S4253C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S4253C1, buf);
    S4253C1 *dp, &lv = *(dp=new (buf) S4253C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S4253C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4253C1)");
    check_base_class_offset(lv, (S4253C3*)(S4253C2*), 0, "S4253C1");
    check_base_class_offset(lv, (S4253C2*), 0, "S4253C1");
    check_field_offset(lv, s4253c1f0, ABISELECT(40,20), "S4253C1.s4253c1f0");
    check_field_offset(lv, s4253c1f1, ABISELECT(48,24), "S4253C1.s4253c1f1");
    test_class_info(&lv, &cd_S4253C1);
    dp->~S4253C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4253C1(Test_S4253C1, "S4253C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S4253C1C1Ev();
extern void _ZN7S4253C1D1Ev();
Name_Map name_map_S4253C1[] = {
  NSPAIR(_ZN7S4253C1C1Ev),
  NSPAIR(_ZN7S4253C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4253C3;
extern VTBL_ENTRY _ZTI7S4253C3[];
extern  VTBL_ENTRY _ZTV7S4253C3[];
extern Class_Descriptor cd_S4253C2;
extern VTBL_ENTRY _ZTI7S4253C2[];
extern  VTBL_ENTRY _ZTV7S4253C2[];
static Base_Class bases_S4253C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4253C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4253C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4253C1[];
extern void _ZN7S4253C1D1Ev();
extern void _ZN7S4253C1D0Ev();
extern void _ZN7S4253C33v14Ev();
extern void _ZN7S4253C33v15Ev();
extern void _ZN7S4253C33v16Ev();
extern void _ZN7S4253C33v17Ev();
extern void _ZN7S4253C33v18Ev();
extern void _ZN7S4253C33v19Ev();
extern void _ZN7S4253C33v20Ev();
extern void _ZN7S4253C33v21Ev();
extern void _ZN7S4253C33v22Ev();
extern void _ZN7S4253C33v23Ev();
extern void _ZN7S4253C33v24Ev();
extern void _ZN7S4253C23v25Ev();
extern void _ZN7S4253C23v26Ev();
extern void _ZN7S4253C12v1Ev();
extern void _ZN7S4253C12v2Ev();
extern void _ZN7S4253C12v3Ev();
extern void _ZN7S4253C12v4Ev();
extern void _ZN7S4253C12v5Ev();
extern void _ZN7S4253C12v6Ev();
extern void _ZN7S4253C12v7Ev();
extern void _ZN7S4253C12v8Ev();
extern void _ZN7S4253C12v9Ev();
extern void _ZN7S4253C13v10Ev();
extern void _ZN7S4253C13v11Ev();
extern void _ZN7S4253C13v12Ev();
extern void _ZN7S4253C13v13Ev();
static  VTBL_ENTRY vtc_S4253C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4253C1[0]),
  (VTBL_ENTRY)&_ZN7S4253C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4253C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4253C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4253C23v25Ev,
  (VTBL_ENTRY)&_ZN7S4253C23v26Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4253C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4253C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4253C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4253C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4253C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S4253C1[];
extern  VTBL_ENTRY _ZTV7S4253C1[];
Class_Descriptor cd_S4253C1 = {  "S4253C1", // class name
  bases_S4253C1, 2,
  &(vtc_S4253C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S4253C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4253C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21468C4_nt  {
  __tsi64 s21468c4f0[4];
  void  mf21468c4(); // _ZN11S21468C4_nt9mf21468c4Ev
};
//SIG(-1 S21468C4_nt) C1{ m FL[4]}


void  S21468C4_nt ::mf21468c4(){}

//skip512 S21468C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21468C12_nt  {
  int s21468c12f0[2];
  void *s21468c12f1[2];
  void  mf21468c12(); // _ZN12S21468C12_nt10mf21468c12Ev
};
//SIG(-1 S21468C12_nt) C1{ m Fi[2] Fp[2]}


void  S21468C12_nt ::mf21468c12(){}

//skip512 S21468C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21468C1  {
  ::S2185C10_nt s21468c1f0;
  ::S2185C10_nt s21468c1f1;
  ::S21468C4_nt s21468c1f2;
  void *s21468c1f3[3];
  ::S2121C25 s21468c1f4;
  ::S2121C25 s21468c1f5;
  ::S2121C26 s21468c1f6;
  ::S21468C12_nt s21468c1f7;
  void *s21468c1f8[2];
  void  mf21468c1(); // _ZN8S21468C19mf21468c1Ev
  virtual  ~S21468C1(); // _ZN8S21468C1D1Ev
  S21468C1(); // tgen
};
//SIG(1 S21468C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m FL[4]} Fp[3] FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC5 FC6 FC9{ m Fi[2] Fp[2]} Fp[2]}


void  S21468C1 ::mf21468c1(){}
 S21468C1 ::~S21468C1(){ note_dtor("S21468C1", this);}
S21468C1 ::S21468C1(){ note_ctor("S21468C1", this);} // tgen

static void Test_S21468C1()
{
  extern Class_Descriptor cd_S21468C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,34)];
    init_test(&cd_S21468C1, buf);
    S21468C1 *dp, &lv = *(dp=new (buf) S21468C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,132), "sizeof(S21468C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21468C1)");
    check_field_offset(lv, s21468c1f0, ABISELECT(8,4), "S21468C1.s21468c1f0");
    check_field_offset(lv, s21468c1f1, ABISELECT(24,16), "S21468C1.s21468c1f1");
    check_field_offset(lv, s21468c1f2, ABISELECT(40,28), "S21468C1.s21468c1f2");
    check_field_offset(lv, s21468c1f3, ABISELECT(72,60), "S21468C1.s21468c1f3");
    check_field_offset(lv, s21468c1f4, ABISELECT(96,72), "S21468C1.s21468c1f4");
    check_field_offset(lv, s21468c1f5, ABISELECT(112,84), "S21468C1.s21468c1f5");
    check_field_offset(lv, s21468c1f6, ABISELECT(128,96), "S21468C1.s21468c1f6");
    check_field_offset(lv, s21468c1f7, ABISELECT(144,108), "S21468C1.s21468c1f7");
    check_field_offset(lv, s21468c1f8, ABISELECT(168,124), "S21468C1.s21468c1f8");
    test_class_info(&lv, &cd_S21468C1);
    dp->~S21468C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21468C1(Test_S21468C1, "S21468C1", ABISELECT(184,132));

#else // __cplusplus

extern void _ZN8S21468C1C1Ev();
extern void _ZN8S21468C1D1Ev();
Name_Map name_map_S21468C1[] = {
  NSPAIR(_ZN8S21468C1C1Ev),
  NSPAIR(_ZN8S21468C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21468C1[];
extern void _ZN8S21468C1D1Ev();
extern void _ZN8S21468C1D0Ev();
static  VTBL_ENTRY vtc_S21468C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21468C1[0]),
  (VTBL_ENTRY)&_ZN8S21468C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21468C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21468C1[];
extern  VTBL_ENTRY _ZTV8S21468C1[];
Class_Descriptor cd_S21468C1 = {  "S21468C1", // class name
  0,0,//no base classes
  &(vtc_S21468C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,132), // object size
  NSPAIRA(_ZTI8S21468C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21468C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7793C4_nt  {
  __tsi64 s7793c4f0[7];
  virtual void  v3(); // _ZN10S7793C4_nt2v3Ev
  virtual void  v4(); // _ZN10S7793C4_nt2v4Ev
  virtual void  v5(); // _ZN10S7793C4_nt2v5Ev
  virtual void  v6(); // _ZN10S7793C4_nt2v6Ev
  virtual void  v7(); // _ZN10S7793C4_nt2v7Ev
  ~S7793C4_nt(); // tgen
  S7793C4_nt(); // tgen
};
//SIG(-1 S7793C4_nt) C1{ v1 v2 v3 v4 v5 FL[7]}


void  S7793C4_nt ::v3(){vfunc_called(this, "_ZN10S7793C4_nt2v3Ev");}
void  S7793C4_nt ::v4(){vfunc_called(this, "_ZN10S7793C4_nt2v4Ev");}
void  S7793C4_nt ::v5(){vfunc_called(this, "_ZN10S7793C4_nt2v5Ev");}
void  S7793C4_nt ::v6(){vfunc_called(this, "_ZN10S7793C4_nt2v6Ev");}
void  S7793C4_nt ::v7(){vfunc_called(this, "_ZN10S7793C4_nt2v7Ev");}
S7793C4_nt ::~S7793C4_nt(){ note_dtor("S7793C4_nt", this);} // tgen
S7793C4_nt ::S7793C4_nt(){ note_ctor("S7793C4_nt", this);} // tgen

//skip512 S7793C4_nt

#else // __cplusplus

extern void _ZN10S7793C4_ntC1Ev();
extern void _ZN10S7793C4_ntD1Ev();
Name_Map name_map_S7793C4_nt[] = {
  NSPAIR(_ZN10S7793C4_ntC1Ev),
  NSPAIR(_ZN10S7793C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S7793C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
VTBL_ENTRY *P__ZTI10S7793C4_nt = _ZTI10S7793C4_nt; 
extern  VTBL_ENTRY _ZTV10S7793C4_nt[];
Class_Descriptor cd_S7793C4_nt = {  "S7793C4_nt", // class name
  0,0,//no base classes
  &(vtc_S7793C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,60), // object size
  NSPAIRA(_ZTI10S7793C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7793C4_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7793C3_nt  : virtual S7793C4_nt {
  virtual void  v8(); // _ZN10S7793C3_nt2v8Ev
  virtual void  v9(); // _ZN10S7793C3_nt2v9Ev
  virtual void  v10(); // _ZN10S7793C3_nt3v10Ev
  virtual void  v11(); // _ZN10S7793C3_nt3v11Ev
  ~S7793C3_nt(); // tgen
  S7793C3_nt(); // tgen
};
//SIG(-1 S7793C3_nt) C1{ VBC2{ v5 v6 v7 v8 v9 FL[7]} v1 v2 v3 v4}


void  S7793C3_nt ::v8(){vfunc_called(this, "_ZN10S7793C3_nt2v8Ev");}
void  S7793C3_nt ::v9(){vfunc_called(this, "_ZN10S7793C3_nt2v9Ev");}
void  S7793C3_nt ::v10(){vfunc_called(this, "_ZN10S7793C3_nt3v10Ev");}
void  S7793C3_nt ::v11(){vfunc_called(this, "_ZN10S7793C3_nt3v11Ev");}
S7793C3_nt ::~S7793C3_nt(){ note_dtor("S7793C3_nt", this);} // tgen
S7793C3_nt ::S7793C3_nt(){ note_ctor("S7793C3_nt", this);} // tgen

//skip512 S7793C3_nt

#else // __cplusplus

extern void _ZN10S7793C3_ntC1Ev();
extern void _ZN10S7793C3_ntD1Ev();
Name_Map name_map_S7793C3_nt[] = {
  NSPAIR(_ZN10S7793C3_ntC1Ev),
  NSPAIR(_ZN10S7793C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7793C4_nt;
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
extern  VTBL_ENTRY _ZTV10S7793C4_nt[];
static Base_Class bases_S7793C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7793C4_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S7793C3_nt[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S7793C3_nt[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV10S7793C3_nt[];
static  VTT_ENTRY vtt_S7793C3_nt[] = {
  {&(_ZTV10S7793C3_nt[3]),  3,19},
  {&(_ZTV10S7793C3_nt[14]),  14,19},
};
extern VTBL_ENTRY _ZTI10S7793C3_nt[];
VTBL_ENTRY *P__ZTI10S7793C3_nt = _ZTI10S7793C3_nt; 
extern  VTBL_ENTRY _ZTV10S7793C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C3_nt[];
Class_Descriptor cd_S7793C3_nt = {  "S7793C3_nt", // class name
  bases_S7793C3_nt, 1,
  &(vtc_S7793C3_nt[0]), // expected_vtbl_contents
  &(vtt_S7793C3_nt[0]), // expected_vtt_contents
  ABISELECT(72,64), // object size
  NSPAIRA(_ZTI10S7793C3_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7793C3_nt),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7793C3_nt),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7793C5_nt  {
  virtual void  v12(); // _ZN10S7793C5_nt3v12Ev
  virtual void  v13(); // _ZN10S7793C5_nt3v13Ev
  virtual void  v14(); // _ZN10S7793C5_nt3v14Ev
  virtual void  v15(); // _ZN10S7793C5_nt3v15Ev
  virtual void  v16(); // _ZN10S7793C5_nt3v16Ev
  virtual void  v17(); // _ZN10S7793C5_nt3v17Ev
  virtual void  v18(); // _ZN10S7793C5_nt3v18Ev
  ~S7793C5_nt(); // tgen
  S7793C5_nt(); // tgen
};
//SIG(-1 S7793C5_nt) C1{ v1 v2 v3 v4 v5 v6 v7}


void  S7793C5_nt ::v12(){vfunc_called(this, "_ZN10S7793C5_nt3v12Ev");}
void  S7793C5_nt ::v13(){vfunc_called(this, "_ZN10S7793C5_nt3v13Ev");}
void  S7793C5_nt ::v14(){vfunc_called(this, "_ZN10S7793C5_nt3v14Ev");}
void  S7793C5_nt ::v15(){vfunc_called(this, "_ZN10S7793C5_nt3v15Ev");}
void  S7793C5_nt ::v16(){vfunc_called(this, "_ZN10S7793C5_nt3v16Ev");}
void  S7793C5_nt ::v17(){vfunc_called(this, "_ZN10S7793C5_nt3v17Ev");}
void  S7793C5_nt ::v18(){vfunc_called(this, "_ZN10S7793C5_nt3v18Ev");}
S7793C5_nt ::~S7793C5_nt(){ note_dtor("S7793C5_nt", this);} // tgen
S7793C5_nt ::S7793C5_nt(){ note_ctor("S7793C5_nt", this);} // tgen

//skip512 S7793C5_nt

#else // __cplusplus

extern void _ZN10S7793C5_ntC1Ev();
extern void _ZN10S7793C5_ntD1Ev();
Name_Map name_map_S7793C5_nt[] = {
  NSPAIR(_ZN10S7793C5_ntC1Ev),
  NSPAIR(_ZN10S7793C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7793C5_nt[];
extern void _ZN10S7793C5_nt3v12Ev();
extern void _ZN10S7793C5_nt3v13Ev();
extern void _ZN10S7793C5_nt3v14Ev();
extern void _ZN10S7793C5_nt3v15Ev();
extern void _ZN10S7793C5_nt3v16Ev();
extern void _ZN10S7793C5_nt3v17Ev();
extern void _ZN10S7793C5_nt3v18Ev();
static  VTBL_ENTRY vtc_S7793C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S7793C5_nt[];
VTBL_ENTRY *P__ZTI10S7793C5_nt = _ZTI10S7793C5_nt; 
extern  VTBL_ENTRY _ZTV10S7793C5_nt[];
Class_Descriptor cd_S7793C5_nt = {  "S7793C5_nt", // class name
  0,0,//no base classes
  &(vtc_S7793C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7793C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7793C5_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7793C2_nt  : virtual S7793C3_nt , virtual S7793C5_nt {
  long double s7793c2f0[8];
  virtual void  v19(); // _ZN10S7793C2_nt3v19Ev
  virtual void  v20(); // _ZN10S7793C2_nt3v20Ev
  ~S7793C2_nt(); // tgen
  S7793C2_nt(); // tgen
};
//SIG(-1 S7793C2_nt) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 FL[7]} v8 v9 v10 v11} VBC4{ v12 v13 v14 v15 v16 v17 v18} v1 v2 FD[8]}


void  S7793C2_nt ::v19(){vfunc_called(this, "_ZN10S7793C2_nt3v19Ev");}
void  S7793C2_nt ::v20(){vfunc_called(this, "_ZN10S7793C2_nt3v20Ev");}
S7793C2_nt ::~S7793C2_nt(){ note_dtor("S7793C2_nt", this);} // tgen
S7793C2_nt ::S7793C2_nt(){ note_ctor("S7793C2_nt", this);} // tgen

//skip512 S7793C2_nt

#else // __cplusplus

extern void _ZN10S7793C2_ntC1Ev();
extern void _ZN10S7793C2_ntD1Ev();
Name_Map name_map_S7793C2_nt[] = {
  NSPAIR(_ZN10S7793C2_ntC1Ev),
  NSPAIR(_ZN10S7793C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7793C4_nt;
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
extern  VTBL_ENTRY _ZTV10S7793C4_nt[];
extern Class_Descriptor cd_S7793C3_nt;
extern VTBL_ENTRY _ZTI10S7793C3_nt[];
extern  VTBL_ENTRY _ZTV10S7793C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C3_nt[];
extern Class_Descriptor cd_S7793C5_nt;
extern VTBL_ENTRY _ZTI10S7793C5_nt[];
extern  VTBL_ENTRY _ZTV10S7793C5_nt[];
static Base_Class bases_S7793C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7793C4_nt,    ABISELECT(144,100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7793C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7793C5_nt,    ABISELECT(208,160), //bcp->offset
    27, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S7793C2_nt[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
extern void _ZN10S7793C2_nt3v19Ev();
extern void _ZN10S7793C2_nt3v20Ev();
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
extern void _ZN10S7793C5_nt3v12Ev();
extern void _ZN10S7793C5_nt3v13Ev();
extern void _ZN10S7793C5_nt3v14Ev();
extern void _ZN10S7793C5_nt3v15Ev();
extern void _ZN10S7793C5_nt3v16Ev();
extern void _ZN10S7793C5_nt3v17Ev();
extern void _ZN10S7793C5_nt3v18Ev();
static  VTBL_ENTRY vtc_S7793C2_nt[] = {
  ABISELECT(208,160),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-160),
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v18Ev,
};
extern VTBL_ENTRY _ZTV10S7793C2_nt[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C3_nt__10S7793C2_nt[] = {
  ABISELECT(144,100),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
};
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C4_nt__10S7793C3_nt__10S7793C2_nt[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-100),
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
static  VTT_ENTRY vtt_S7793C2_nt[] = {
  {&(_ZTV10S7793C2_nt[9]),  9,43},
  {&(_ZTV10S7793C2_nt[9]),  9,43},
  {&(_ZTV10S7793C2_nt[22]),  22,43},
  {&(_ZTV10S7793C2_nt[36]),  36,43},
  {&(_tg__ZTV10S7793C3_nt__10S7793C2_nt[3]),  3,7},
  {&(_tg__ZTV10S7793C4_nt__10S7793C3_nt__10S7793C2_nt[7]),  7,12},
};
extern VTBL_ENTRY _ZTI10S7793C2_nt[];
VTBL_ENTRY *P__ZTI10S7793C2_nt = _ZTI10S7793C2_nt; 
extern  VTBL_ENTRY _ZTV10S7793C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C2_nt[];
Class_Descriptor cd_S7793C2_nt = {  "S7793C2_nt", // class name
  bases_S7793C2_nt, 3,
  &(vtc_S7793C2_nt[0]), // expected_vtbl_contents
  &(vtt_S7793C2_nt[0]), // expected_vtt_contents
  ABISELECT(224,164), // object size
  NSPAIRA(_ZTI10S7793C2_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV10S7793C2_nt),43, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7793C2_nt),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7793C1  : S7793C2_nt {
  ::S19580C5 s7793c1f0;
  virtual void  v1(); // _ZN7S7793C12v1Ev
  virtual void  v2(); // _ZN7S7793C12v2Ev
  ~S7793C1(); // tgen
  S7793C1(); // tgen
};
//SIG(1 S7793C1) C1{ BC2{ VBC3{ VBC4{ v3 v4 v5 v6 v7 FL[7]} v8 v9 v10 v11} VBC5{ v12 v13 v14 v15 v16 v17 v18} v19 v20 FD[8]} v1 v2 FC6{ vd v21 v22 v23 v24 v25}}


void  S7793C1 ::v1(){vfunc_called(this, "_ZN7S7793C12v1Ev");}
void  S7793C1 ::v2(){vfunc_called(this, "_ZN7S7793C12v2Ev");}
S7793C1 ::~S7793C1(){ note_dtor("S7793C1", this);} // tgen
S7793C1 ::S7793C1(){ note_ctor("S7793C1", this);} // tgen

static void Test_S7793C1()
{
  extern Class_Descriptor cd_S7793C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,43)];
    init_test(&cd_S7793C1, buf);
    S7793C1 *dp, &lv = *(dp=new (buf) S7793C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,168), "sizeof(S7793C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7793C1)");
    check_base_class_offset(lv, (S7793C4_nt*)(S7793C3_nt*), ABISELECT(152,104), "S7793C1");
    check_base_class_offset(lv, (S7793C3_nt*)(S7793C2_nt*), 0, "S7793C1");
    check_base_class_offset(lv, (S7793C5_nt*)(S7793C2_nt*), ABISELECT(216,164), "S7793C1");
    check_base_class_offset(lv, (S7793C2_nt*), 0, "S7793C1");
    check_field_offset(lv, s7793c1f0, ABISELECT(144,100), "S7793C1.s7793c1f0");
    test_class_info(&lv, &cd_S7793C1);
    dp->~S7793C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7793C1(Test_S7793C1, "S7793C1", ABISELECT(224,168));

#else // __cplusplus

extern void _ZN7S7793C1C1Ev();
extern void _ZN7S7793C1D1Ev();
Name_Map name_map_S7793C1[] = {
  NSPAIR(_ZN7S7793C1C1Ev),
  NSPAIR(_ZN7S7793C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7793C4_nt;
extern VTBL_ENTRY _ZTI10S7793C4_nt[];
extern  VTBL_ENTRY _ZTV10S7793C4_nt[];
extern Class_Descriptor cd_S7793C3_nt;
extern VTBL_ENTRY _ZTI10S7793C3_nt[];
extern  VTBL_ENTRY _ZTV10S7793C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C3_nt[];
extern Class_Descriptor cd_S7793C5_nt;
extern VTBL_ENTRY _ZTI10S7793C5_nt[];
extern  VTBL_ENTRY _ZTV10S7793C5_nt[];
extern Class_Descriptor cd_S7793C2_nt;
extern VTBL_ENTRY _ZTI10S7793C2_nt[];
extern  VTBL_ENTRY _ZTV10S7793C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7793C2_nt[];
static Base_Class bases_S7793C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7793C4_nt,    ABISELECT(152,104), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7793C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7793C5_nt,    ABISELECT(216,164), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7793C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7793C1[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
extern void _ZN10S7793C2_nt3v19Ev();
extern void _ZN10S7793C2_nt3v20Ev();
extern void _ZN7S7793C12v1Ev();
extern void _ZN7S7793C12v2Ev();
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
extern void _ZN10S7793C5_nt3v12Ev();
extern void _ZN10S7793C5_nt3v13Ev();
extern void _ZN10S7793C5_nt3v14Ev();
extern void _ZN10S7793C5_nt3v15Ev();
extern void _ZN10S7793C5_nt3v16Ev();
extern void _ZN10S7793C5_nt3v17Ev();
extern void _ZN10S7793C5_nt3v18Ev();
static  VTBL_ENTRY vtc_S7793C1[] = {
  ABISELECT(216,164),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(152,104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7793C1[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN7S7793C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7793C12v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI7S7793C1[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI7S7793C1[0]),
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v18Ev,
};
extern VTBL_ENTRY _ZTV7S7793C1[];
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
extern void _ZN10S7793C2_nt3v19Ev();
extern void _ZN10S7793C2_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C2_nt__7S7793C1[] = {
  ABISELECT(216,164),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(152,104),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7793C2_nt3v20Ev,
};
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C4_nt__10S7793C2_nt__7S7793C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
extern void _ZN10S7793C5_nt3v12Ev();
extern void _ZN10S7793C5_nt3v13Ev();
extern void _ZN10S7793C5_nt3v14Ev();
extern void _ZN10S7793C5_nt3v15Ev();
extern void _ZN10S7793C5_nt3v16Ev();
extern void _ZN10S7793C5_nt3v17Ev();
extern void _ZN10S7793C5_nt3v18Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C5_nt__10S7793C2_nt__7S7793C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-164),
  (VTBL_ENTRY)&(_ZTI10S7793C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7793C5_nt3v18Ev,
};
extern void _ZN10S7793C3_nt2v8Ev();
extern void _ZN10S7793C3_nt2v9Ev();
extern void _ZN10S7793C3_nt3v10Ev();
extern void _ZN10S7793C3_nt3v11Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C3_nt__7S7793C1[] = {
  ABISELECT(152,104),
  0,
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7793C3_nt3v11Ev,
};
extern void _ZN10S7793C4_nt2v3Ev();
extern void _ZN10S7793C4_nt2v4Ev();
extern void _ZN10S7793C4_nt2v5Ev();
extern void _ZN10S7793C4_nt2v6Ev();
extern void _ZN10S7793C4_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV10S7793C4_nt__10S7793C3_nt__7S7793C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI10S7793C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7793C4_nt2v7Ev,
};
static  VTT_ENTRY vtt_S7793C1[] = {
  {&(_ZTV7S7793C1[9]),  9,45},
  {&(_tg__ZTV10S7793C2_nt__7S7793C1[9]),  9,15},
  {&(_tg__ZTV10S7793C2_nt__7S7793C1[9]),  9,15},
  {&(_tg__ZTV10S7793C4_nt__10S7793C2_nt__7S7793C1[7]),  7,12},
  {&(_tg__ZTV10S7793C5_nt__10S7793C2_nt__7S7793C1[9]),  9,16},
  {&(_ZTV7S7793C1[9]),  9,45},
  {&(_ZTV7S7793C1[24]),  24,45},
  {&(_ZTV7S7793C1[38]),  38,45},
  {&(_tg__ZTV10S7793C3_nt__7S7793C1[3]),  3,7},
  {&(_tg__ZTV10S7793C4_nt__10S7793C3_nt__7S7793C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7793C1[];
extern  VTBL_ENTRY _ZTV7S7793C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7793C1[];
Class_Descriptor cd_S7793C1 = {  "S7793C1", // class name
  bases_S7793C1, 4,
  &(vtc_S7793C1[0]), // expected_vtbl_contents
  &(vtt_S7793C1[0]), // expected_vtt_contents
  ABISELECT(224,168), // object size
  NSPAIRA(_ZTI7S7793C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7793C1),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7793C1),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9255C2  {
  ::S2185C10_nt s9255c2f0;
  int s9255c2f1[2];
  char s9255c2f2;
  virtual  ~S9255C2(); // _ZN7S9255C2D1Ev
  virtual void  v3(); // _ZN7S9255C22v3Ev
  virtual void  v4(); // _ZN7S9255C22v4Ev
  virtual void  v5(); // _ZN7S9255C22v5Ev
  S9255C2(); // tgen
};
//SIG(-1 S9255C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9255C2 ::~S9255C2(){ note_dtor("S9255C2", this);}
void  S9255C2 ::v3(){vfunc_called(this, "_ZN7S9255C22v3Ev");}
void  S9255C2 ::v4(){vfunc_called(this, "_ZN7S9255C22v4Ev");}
void  S9255C2 ::v5(){vfunc_called(this, "_ZN7S9255C22v5Ev");}
S9255C2 ::S9255C2(){ note_ctor("S9255C2", this);} // tgen

static void Test_S9255C2()
{
  extern Class_Descriptor cd_S9255C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9255C2, buf);
    S9255C2 *dp, &lv = *(dp=new (buf) S9255C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9255C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9255C2)");
    check_field_offset(lv, s9255c2f0, ABISELECT(8,4), "S9255C2.s9255c2f0");
    check_field_offset(lv, s9255c2f1, ABISELECT(24,16), "S9255C2.s9255c2f1");
    check_field_offset(lv, s9255c2f2, ABISELECT(32,24), "S9255C2.s9255c2f2");
    test_class_info(&lv, &cd_S9255C2);
    dp->~S9255C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9255C2(Test_S9255C2, "S9255C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9255C2C1Ev();
extern void _ZN7S9255C2D1Ev();
Name_Map name_map_S9255C2[] = {
  NSPAIR(_ZN7S9255C2C1Ev),
  NSPAIR(_ZN7S9255C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9255C2[];
extern void _ZN7S9255C2D1Ev();
extern void _ZN7S9255C2D0Ev();
extern void _ZN7S9255C22v3Ev();
extern void _ZN7S9255C22v4Ev();
extern void _ZN7S9255C22v5Ev();
static  VTBL_ENTRY vtc_S9255C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9255C2[0]),
  (VTBL_ENTRY)&_ZN7S9255C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9255C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9255C2[];
extern  VTBL_ENTRY _ZTV7S9255C2[];
Class_Descriptor cd_S9255C2 = {  "S9255C2", // class name
  0,0,//no base classes
  &(vtc_S9255C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9255C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9255C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9255C8_nt  {
  long s9255c8f0[4];
};
//SIG(-1 S9255C8_nt) C1{ Fl[4]}



//skip512 S9255C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9255C7_nt  {
  ::S9255C8_nt s9255c7f0;
  void  mf9255c7(); // _ZN10S9255C7_nt8mf9255c7Ev
};
//SIG(-1 S9255C7_nt) C1{ m FC2{ Fl[4]}}


void  S9255C7_nt ::mf9255c7(){}

//skip512 S9255C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9255C1  : S9255C2 {
  char s9255c1f0[2];
  int s9255c1f1[2];
  void *s9255c1f2;
  ::S21811C16 s9255c1f3;
  int s9255c1f4[2];
  char s9255c1f5;
  int s9255c1f6[2];
  ::S9255C7_nt s9255c1f7;
  int s9255c1f8;
  void *s9255c1f9;
  virtual  ~S9255C1(); // _ZN7S9255C1D1Ev
  virtual void  v1(); // _ZN7S9255C12v1Ev
  virtual void  v2(); // _ZN7S9255C12v2Ev
  S9255C1(); // tgen
};
//SIG(1 S9255C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fc[2] Fi[2] Fp FC5{ m Fp Fi[2] FC6{ m}} Fi[2] Fc Fi[2] FC7{ m FC8{ Fl[4]}} Fi Fp}


 S9255C1 ::~S9255C1(){ note_dtor("S9255C1", this);}
void  S9255C1 ::v1(){vfunc_called(this, "_ZN7S9255C12v1Ev");}
void  S9255C1 ::v2(){vfunc_called(this, "_ZN7S9255C12v2Ev");}
S9255C1 ::S9255C1(){ note_ctor("S9255C1", this);} // tgen

static void Test_S9255C1()
{
  extern Class_Descriptor cd_S9255C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,26)];
    init_test(&cd_S9255C1, buf);
    S9255C1 *dp, &lv = *(dp=new (buf) S9255C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S9255C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9255C1)");
    check_base_class_offset(lv, (S9255C2*), 0, "S9255C1");
    check_field_offset(lv, s9255c1f0, ABISELECT(33,25), "S9255C1.s9255c1f0");
    check_field_offset(lv, s9255c1f1, ABISELECT(36,28), "S9255C1.s9255c1f1");
    check_field_offset(lv, s9255c1f2, ABISELECT(48,36), "S9255C1.s9255c1f2");
    check_field_offset(lv, s9255c1f3, ABISELECT(56,40), "S9255C1.s9255c1f3");
    check_field_offset(lv, s9255c1f4, ABISELECT(80,56), "S9255C1.s9255c1f4");
    check_field_offset(lv, s9255c1f5, ABISELECT(88,64), "S9255C1.s9255c1f5");
    check_field_offset(lv, s9255c1f6, ABISELECT(92,68), "S9255C1.s9255c1f6");
    check_field_offset(lv, s9255c1f7, ABISELECT(104,76), "S9255C1.s9255c1f7");
    check_field_offset(lv, s9255c1f8, ABISELECT(136,92), "S9255C1.s9255c1f8");
    check_field_offset(lv, s9255c1f9, ABISELECT(144,96), "S9255C1.s9255c1f9");
    test_class_info(&lv, &cd_S9255C1);
    dp->~S9255C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9255C1(Test_S9255C1, "S9255C1", ABISELECT(152,100));

#else // __cplusplus

extern void _ZN7S9255C1C1Ev();
extern void _ZN7S9255C1D1Ev();
Name_Map name_map_S9255C1[] = {
  NSPAIR(_ZN7S9255C1C1Ev),
  NSPAIR(_ZN7S9255C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9255C2;
extern VTBL_ENTRY _ZTI7S9255C2[];
extern  VTBL_ENTRY _ZTV7S9255C2[];
static Base_Class bases_S9255C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9255C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9255C1[];
extern void _ZN7S9255C1D1Ev();
extern void _ZN7S9255C1D0Ev();
extern void _ZN7S9255C22v3Ev();
extern void _ZN7S9255C22v4Ev();
extern void _ZN7S9255C22v5Ev();
extern void _ZN7S9255C12v1Ev();
extern void _ZN7S9255C12v2Ev();
static  VTBL_ENTRY vtc_S9255C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9255C1[0]),
  (VTBL_ENTRY)&_ZN7S9255C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9255C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9255C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9255C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9255C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9255C1[];
extern  VTBL_ENTRY _ZTV7S9255C1[];
Class_Descriptor cd_S9255C1 = {  "S9255C1", // class name
  bases_S9255C1, 1,
  &(vtc_S9255C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,100), // object size
  NSPAIRA(_ZTI7S9255C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9255C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C3_nt  : S3350C8_nt {
};
//SIG(-1 S1108C3_nt) C1{ BC2{ m Fi}}



//skip512 S1108C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
static Base_Class bases_S1108C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1108C3_nt[];
VTBL_ENTRY *P__ZTI10S1108C3_nt = _ZTI10S1108C3_nt; 
Class_Descriptor cd_S1108C3_nt = {  "S1108C3_nt", // class name
  bases_S1108C3_nt, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S1108C3_nt),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C2  : S1108C3_nt {
  ::S21811C13_nt s1108c2f0;
  ::S3350C4_nt s1108c2f1;
  int s1108c2f2;
  virtual  ~S1108C2(); // _ZN7S1108C2D1Ev
  virtual void  v6(); // _ZN7S1108C22v6Ev
  virtual void  v7(); // _ZN7S1108C22v7Ev
  virtual void  v8(); // _ZN7S1108C22v8Ev
  virtual void  v9(); // _ZN7S1108C22v9Ev
  virtual void  v10(); // _ZN7S1108C23v10Ev
  S1108C2(); // tgen
};
//SIG(-1 S1108C2) C1{ BC2{ BC3{ m Fi}} vd v1 v2 v3 v4 v5 FC4{ m Fp} FC5{ m Fi[2]} Fi}


 S1108C2 ::~S1108C2(){ note_dtor("S1108C2", this);}
void  S1108C2 ::v6(){vfunc_called(this, "_ZN7S1108C22v6Ev");}
void  S1108C2 ::v7(){vfunc_called(this, "_ZN7S1108C22v7Ev");}
void  S1108C2 ::v8(){vfunc_called(this, "_ZN7S1108C22v8Ev");}
void  S1108C2 ::v9(){vfunc_called(this, "_ZN7S1108C22v9Ev");}
void  S1108C2 ::v10(){vfunc_called(this, "_ZN7S1108C23v10Ev");}
S1108C2 ::S1108C2(){ note_ctor("S1108C2", this);} // tgen

static void Test_S1108C2()
{
  extern Class_Descriptor cd_S1108C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S1108C2, buf);
    S1108C2 *dp, &lv = *(dp=new (buf) S1108C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S1108C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1108C2)");
    check_base_class_offset(lv, (S3350C8_nt*)(S1108C3_nt*), ABISELECT(8,4), "S1108C2");
    check_base_class_offset(lv, (S1108C3_nt*), ABISELECT(8,4), "S1108C2");
    check_field_offset(lv, s1108c2f0, ABISELECT(16,8), "S1108C2.s1108c2f0");
    check_field_offset(lv, s1108c2f1, ABISELECT(24,12), "S1108C2.s1108c2f1");
    check_field_offset(lv, s1108c2f2, ABISELECT(32,20), "S1108C2.s1108c2f2");
    test_class_info(&lv, &cd_S1108C2);
    dp->~S1108C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1108C2(Test_S1108C2, "S1108C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S1108C2C1Ev();
extern void _ZN7S1108C2D1Ev();
Name_Map name_map_S1108C2[] = {
  NSPAIR(_ZN7S1108C2C1Ev),
  NSPAIR(_ZN7S1108C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
extern Class_Descriptor cd_S1108C3_nt;
extern VTBL_ENTRY _ZTI10S1108C3_nt[];
static Base_Class bases_S1108C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1108C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1108C2[];
extern void _ZN7S1108C2D1Ev();
extern void _ZN7S1108C2D0Ev();
extern void _ZN7S1108C22v6Ev();
extern void _ZN7S1108C22v7Ev();
extern void _ZN7S1108C22v8Ev();
extern void _ZN7S1108C22v9Ev();
extern void _ZN7S1108C23v10Ev();
static  VTBL_ENTRY vtc_S1108C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1108C2[0]),
  (VTBL_ENTRY)&_ZN7S1108C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1108C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1108C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S1108C2[];
extern  VTBL_ENTRY _ZTV7S1108C2[];
Class_Descriptor cd_S1108C2 = {  "S1108C2", // class name
  bases_S1108C2, 2,
  &(vtc_S1108C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S1108C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1108C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C7_nt  {
  __tsi64 s1108c7f0[6];
  void  mf1108c7(); // _ZN10S1108C7_nt8mf1108c7Ev
};
//SIG(-1 S1108C7_nt) C1{ m FL[6]}


void  S1108C7_nt ::mf1108c7(){}

//skip512 S1108C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C9_nt  {
  int s1108c9f0[2];
  void  mf1108c9(); // _ZN10S1108C9_nt8mf1108c9Ev
};
//SIG(-1 S1108C9_nt) C1{ m Fi[2]}


void  S1108C9_nt ::mf1108c9(){}

//skip512 S1108C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C8_nt  {
  ::S1108C9_nt s1108c8f0;
  ::S3350C4_nt s1108c8f1;
  void  mf1108c8(); // _ZN10S1108C8_nt8mf1108c8Ev
};
//SIG(-1 S1108C8_nt) C1{ m FC2{ m Fi[2]} FC3{ m Fi[2]}}


void  S1108C8_nt ::mf1108c8(){}

//skip512 S1108C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1108C1  : S1108C2 {
  ::S1108C7_nt s1108c1f0;
  ::S1108C8_nt s1108c1f1;
  ::S1108C8_nt s1108c1f2;
  ::S1108C8_nt s1108c1f3;
  ::S1108C8_nt s1108c1f4;
  char s1108c1f5;
  virtual void  v1(); // _ZN7S1108C12v1Ev
  virtual void  v2(); // _ZN7S1108C12v2Ev
  virtual void  v3(); // _ZN7S1108C12v3Ev
  virtual void  v4(); // _ZN7S1108C12v4Ev
  virtual void  v5(); // _ZN7S1108C12v5Ev
  ~S1108C1(); // tgen
  S1108C1(); // tgen
};
//SIG(1 S1108C1) C1{ BC2{ BC3{ BC4{ m Fi}} vd v6 v7 v8 v9 v10 FC5{ m Fp} FC6{ m Fi[2]} Fi} v1 v2 v3 v4 v5 FC7{ m FL[6]} FC8{ m FC9{ m Fi[2]} FC6} FC8 FC8 FC8 Fc}


void  S1108C1 ::v1(){vfunc_called(this, "_ZN7S1108C12v1Ev");}
void  S1108C1 ::v2(){vfunc_called(this, "_ZN7S1108C12v2Ev");}
void  S1108C1 ::v3(){vfunc_called(this, "_ZN7S1108C12v3Ev");}
void  S1108C1 ::v4(){vfunc_called(this, "_ZN7S1108C12v4Ev");}
void  S1108C1 ::v5(){vfunc_called(this, "_ZN7S1108C12v5Ev");}
S1108C1 ::~S1108C1(){ note_dtor("S1108C1", this);} // tgen
S1108C1 ::S1108C1(){ note_ctor("S1108C1", this);} // tgen

static void Test_S1108C1()
{
  extern Class_Descriptor cd_S1108C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,36)];
    init_test(&cd_S1108C1, buf);
    S1108C1 *dp, &lv = *(dp=new (buf) S1108C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,140), "sizeof(S1108C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1108C1)");
    check_base_class_offset(lv, (S3350C8_nt*)(S1108C3_nt*)(S1108C2*), ABISELECT(8,4), "S1108C1");
    check_base_class_offset(lv, (S1108C3_nt*)(S1108C2*), ABISELECT(8,4), "S1108C1");
    check_base_class_offset(lv, (S1108C2*), 0, "S1108C1");
    check_field_offset(lv, s1108c1f0, ABISELECT(40,24), "S1108C1.s1108c1f0");
    check_field_offset(lv, s1108c1f1, ABISELECT(88,72), "S1108C1.s1108c1f1");
    check_field_offset(lv, s1108c1f2, ABISELECT(104,88), "S1108C1.s1108c1f2");
    check_field_offset(lv, s1108c1f3, ABISELECT(120,104), "S1108C1.s1108c1f3");
    check_field_offset(lv, s1108c1f4, ABISELECT(136,120), "S1108C1.s1108c1f4");
    check_field_offset(lv, s1108c1f5, ABISELECT(152,136), "S1108C1.s1108c1f5");
    test_class_info(&lv, &cd_S1108C1);
    dp->~S1108C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1108C1(Test_S1108C1, "S1108C1", ABISELECT(160,140));

#else // __cplusplus

extern void _ZN7S1108C1C1Ev();
extern void _ZN7S1108C1D1Ev();
Name_Map name_map_S1108C1[] = {
  NSPAIR(_ZN7S1108C1C1Ev),
  NSPAIR(_ZN7S1108C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
extern Class_Descriptor cd_S1108C3_nt;
extern VTBL_ENTRY _ZTI10S1108C3_nt[];
extern Class_Descriptor cd_S1108C2;
extern VTBL_ENTRY _ZTI7S1108C2[];
extern  VTBL_ENTRY _ZTV7S1108C2[];
static Base_Class bases_S1108C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1108C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1108C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1108C1[];
extern void _ZN7S1108C1D1Ev();
extern void _ZN7S1108C1D0Ev();
extern void _ZN7S1108C22v6Ev();
extern void _ZN7S1108C22v7Ev();
extern void _ZN7S1108C22v8Ev();
extern void _ZN7S1108C22v9Ev();
extern void _ZN7S1108C23v10Ev();
extern void _ZN7S1108C12v1Ev();
extern void _ZN7S1108C12v2Ev();
extern void _ZN7S1108C12v3Ev();
extern void _ZN7S1108C12v4Ev();
extern void _ZN7S1108C12v5Ev();
static  VTBL_ENTRY vtc_S1108C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1108C1[0]),
  (VTBL_ENTRY)&_ZN7S1108C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1108C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v6Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v7Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v8Ev,
  (VTBL_ENTRY)&_ZN7S1108C22v9Ev,
  (VTBL_ENTRY)&_ZN7S1108C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1108C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1108C1[];
extern  VTBL_ENTRY _ZTV7S1108C1[];
Class_Descriptor cd_S1108C1 = {  "S1108C1", // class name
  bases_S1108C1, 3,
  &(vtc_S1108C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,140), // object size
  NSPAIRA(_ZTI7S1108C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1108C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8579C2  {
  int s8579c2f0;
  void *s8579c2f1[2];
  virtual  ~S8579C2(); // _ZN7S8579C2D1Ev
  virtual void  v13(); // _ZN7S8579C23v13Ev
  virtual void  v14(); // _ZN7S8579C23v14Ev
  virtual void  v15(); // _ZN7S8579C23v15Ev
  virtual void  v16(); // _ZN7S8579C23v16Ev
  virtual void  v17(); // _ZN7S8579C23v17Ev
  virtual void  v18(); // _ZN7S8579C23v18Ev
  virtual void  v19(); // _ZN7S8579C23v19Ev
  virtual void  v20(); // _ZN7S8579C23v20Ev
  virtual void  v21(); // _ZN7S8579C23v21Ev
  virtual void  v22(); // _ZN7S8579C23v22Ev
  virtual void  v23(); // _ZN7S8579C23v23Ev
  S8579C2(); // tgen
};
//SIG(-1 S8579C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 Fi Fp[2]}


 S8579C2 ::~S8579C2(){ note_dtor("S8579C2", this);}
void  S8579C2 ::v13(){vfunc_called(this, "_ZN7S8579C23v13Ev");}
void  S8579C2 ::v14(){vfunc_called(this, "_ZN7S8579C23v14Ev");}
void  S8579C2 ::v15(){vfunc_called(this, "_ZN7S8579C23v15Ev");}
void  S8579C2 ::v16(){vfunc_called(this, "_ZN7S8579C23v16Ev");}
void  S8579C2 ::v17(){vfunc_called(this, "_ZN7S8579C23v17Ev");}
void  S8579C2 ::v18(){vfunc_called(this, "_ZN7S8579C23v18Ev");}
void  S8579C2 ::v19(){vfunc_called(this, "_ZN7S8579C23v19Ev");}
void  S8579C2 ::v20(){vfunc_called(this, "_ZN7S8579C23v20Ev");}
void  S8579C2 ::v21(){vfunc_called(this, "_ZN7S8579C23v21Ev");}
void  S8579C2 ::v22(){vfunc_called(this, "_ZN7S8579C23v22Ev");}
void  S8579C2 ::v23(){vfunc_called(this, "_ZN7S8579C23v23Ev");}
S8579C2 ::S8579C2(){ note_ctor("S8579C2", this);} // tgen

static void Test_S8579C2()
{
  extern Class_Descriptor cd_S8579C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8579C2, buf);
    S8579C2 *dp, &lv = *(dp=new (buf) S8579C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8579C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8579C2)");
    check_field_offset(lv, s8579c2f0, ABISELECT(8,4), "S8579C2.s8579c2f0");
    check_field_offset(lv, s8579c2f1, ABISELECT(16,8), "S8579C2.s8579c2f1");
    test_class_info(&lv, &cd_S8579C2);
    dp->~S8579C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8579C2(Test_S8579C2, "S8579C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8579C2C1Ev();
extern void _ZN7S8579C2D1Ev();
Name_Map name_map_S8579C2[] = {
  NSPAIR(_ZN7S8579C2C1Ev),
  NSPAIR(_ZN7S8579C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8579C2[];
extern void _ZN7S8579C2D1Ev();
extern void _ZN7S8579C2D0Ev();
extern void _ZN7S8579C23v13Ev();
extern void _ZN7S8579C23v14Ev();
extern void _ZN7S8579C23v15Ev();
extern void _ZN7S8579C23v16Ev();
extern void _ZN7S8579C23v17Ev();
extern void _ZN7S8579C23v18Ev();
extern void _ZN7S8579C23v19Ev();
extern void _ZN7S8579C23v20Ev();
extern void _ZN7S8579C23v21Ev();
extern void _ZN7S8579C23v22Ev();
extern void _ZN7S8579C23v23Ev();
static  VTBL_ENTRY vtc_S8579C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8579C2[0]),
  (VTBL_ENTRY)&_ZN7S8579C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8579C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S8579C2[];
extern  VTBL_ENTRY _ZTV7S8579C2[];
Class_Descriptor cd_S8579C2 = {  "S8579C2", // class name
  0,0,//no base classes
  &(vtc_S8579C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8579C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8579C2),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8579C3_nt  {
  void *s8579c3f0;
  int s8579c3f1[3];
};
//SIG(-1 S8579C3_nt) C1{ Fp Fi[3]}



//skip512 S8579C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8579C1  : S8579C2 {
  ::S8579C3_nt s8579c1f0;
  int s8579c1f1[2];
  char s8579c1f2;
  virtual  ~S8579C1(); // _ZN7S8579C1D1Ev
  virtual void  v1(); // _ZN7S8579C12v1Ev
  virtual void  v2(); // _ZN7S8579C12v2Ev
  virtual void  v3(); // _ZN7S8579C12v3Ev
  virtual void  v4(); // _ZN7S8579C12v4Ev
  virtual void  v5(); // _ZN7S8579C12v5Ev
  virtual void  v6(); // _ZN7S8579C12v6Ev
  virtual void  v7(); // _ZN7S8579C12v7Ev
  virtual void  v8(); // _ZN7S8579C12v8Ev
  virtual void  v9(); // _ZN7S8579C12v9Ev
  virtual void  v10(); // _ZN7S8579C13v10Ev
  virtual void  v11(); // _ZN7S8579C13v11Ev
  virtual void  v12(); // _ZN7S8579C13v12Ev
  S8579C1(); // tgen
};
//SIG(1 S8579C1) C1{ BC2{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fi Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC3{ Fp Fi[3]} Fi[2] Fc}


 S8579C1 ::~S8579C1(){ note_dtor("S8579C1", this);}
void  S8579C1 ::v1(){vfunc_called(this, "_ZN7S8579C12v1Ev");}
void  S8579C1 ::v2(){vfunc_called(this, "_ZN7S8579C12v2Ev");}
void  S8579C1 ::v3(){vfunc_called(this, "_ZN7S8579C12v3Ev");}
void  S8579C1 ::v4(){vfunc_called(this, "_ZN7S8579C12v4Ev");}
void  S8579C1 ::v5(){vfunc_called(this, "_ZN7S8579C12v5Ev");}
void  S8579C1 ::v6(){vfunc_called(this, "_ZN7S8579C12v6Ev");}
void  S8579C1 ::v7(){vfunc_called(this, "_ZN7S8579C12v7Ev");}
void  S8579C1 ::v8(){vfunc_called(this, "_ZN7S8579C12v8Ev");}
void  S8579C1 ::v9(){vfunc_called(this, "_ZN7S8579C12v9Ev");}
void  S8579C1 ::v10(){vfunc_called(this, "_ZN7S8579C13v10Ev");}
void  S8579C1 ::v11(){vfunc_called(this, "_ZN7S8579C13v11Ev");}
void  S8579C1 ::v12(){vfunc_called(this, "_ZN7S8579C13v12Ev");}
S8579C1 ::S8579C1(){ note_ctor("S8579C1", this);} // tgen

static void Test_S8579C1()
{
  extern Class_Descriptor cd_S8579C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S8579C1, buf);
    S8579C1 *dp, &lv = *(dp=new (buf) S8579C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S8579C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8579C1)");
    check_base_class_offset(lv, (S8579C2*), 0, "S8579C1");
    check_field_offset(lv, s8579c1f0, ABISELECT(32,16), "S8579C1.s8579c1f0");
    check_field_offset(lv, s8579c1f1, ABISELECT(56,32), "S8579C1.s8579c1f1");
    check_field_offset(lv, s8579c1f2, ABISELECT(64,40), "S8579C1.s8579c1f2");
    test_class_info(&lv, &cd_S8579C1);
    dp->~S8579C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8579C1(Test_S8579C1, "S8579C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S8579C1C1Ev();
extern void _ZN7S8579C1D1Ev();
Name_Map name_map_S8579C1[] = {
  NSPAIR(_ZN7S8579C1C1Ev),
  NSPAIR(_ZN7S8579C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8579C2;
extern VTBL_ENTRY _ZTI7S8579C2[];
extern  VTBL_ENTRY _ZTV7S8579C2[];
static Base_Class bases_S8579C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8579C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8579C1[];
extern void _ZN7S8579C1D1Ev();
extern void _ZN7S8579C1D0Ev();
extern void _ZN7S8579C23v13Ev();
extern void _ZN7S8579C23v14Ev();
extern void _ZN7S8579C23v15Ev();
extern void _ZN7S8579C23v16Ev();
extern void _ZN7S8579C23v17Ev();
extern void _ZN7S8579C23v18Ev();
extern void _ZN7S8579C23v19Ev();
extern void _ZN7S8579C23v20Ev();
extern void _ZN7S8579C23v21Ev();
extern void _ZN7S8579C23v22Ev();
extern void _ZN7S8579C23v23Ev();
extern void _ZN7S8579C12v1Ev();
extern void _ZN7S8579C12v2Ev();
extern void _ZN7S8579C12v3Ev();
extern void _ZN7S8579C12v4Ev();
extern void _ZN7S8579C12v5Ev();
extern void _ZN7S8579C12v6Ev();
extern void _ZN7S8579C12v7Ev();
extern void _ZN7S8579C12v8Ev();
extern void _ZN7S8579C12v9Ev();
extern void _ZN7S8579C13v10Ev();
extern void _ZN7S8579C13v11Ev();
extern void _ZN7S8579C13v12Ev();
static  VTBL_ENTRY vtc_S8579C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8579C1[0]),
  (VTBL_ENTRY)&_ZN7S8579C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8579C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8579C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8579C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8579C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8579C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8579C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S8579C1[];
extern  VTBL_ENTRY _ZTV7S8579C1[];
Class_Descriptor cd_S8579C1 = {  "S8579C1", // class name
  bases_S8579C1, 1,
  &(vtc_S8579C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S8579C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8579C1),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10171C2  {
  virtual  ~S10171C2(); // _ZN8S10171C2D1Ev
  virtual void  v7(); // _ZN8S10171C22v7Ev
  virtual void  v8(); // _ZN8S10171C22v8Ev
  virtual void  v9(); // _ZN8S10171C22v9Ev
  virtual void  v10(); // _ZN8S10171C23v10Ev
  virtual void  v11(); // _ZN8S10171C23v11Ev
  S10171C2(); // tgen
};
//SIG(-1 S10171C2) C1{ vd v1 v2 v3 v4 v5}


 S10171C2 ::~S10171C2(){ note_dtor("S10171C2", this);}
void  S10171C2 ::v7(){vfunc_called(this, "_ZN8S10171C22v7Ev");}
void  S10171C2 ::v8(){vfunc_called(this, "_ZN8S10171C22v8Ev");}
void  S10171C2 ::v9(){vfunc_called(this, "_ZN8S10171C22v9Ev");}
void  S10171C2 ::v10(){vfunc_called(this, "_ZN8S10171C23v10Ev");}
void  S10171C2 ::v11(){vfunc_called(this, "_ZN8S10171C23v11Ev");}
S10171C2 ::S10171C2(){ note_ctor("S10171C2", this);} // tgen

static void Test_S10171C2()
{
  extern Class_Descriptor cd_S10171C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10171C2, buf);
    S10171C2 *dp, &lv = *(dp=new (buf) S10171C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10171C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10171C2)");
    test_class_info(&lv, &cd_S10171C2);
    dp->~S10171C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10171C2(Test_S10171C2, "S10171C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10171C2C1Ev();
extern void _ZN8S10171C2D1Ev();
Name_Map name_map_S10171C2[] = {
  NSPAIR(_ZN8S10171C2C1Ev),
  NSPAIR(_ZN8S10171C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10171C2[];
extern void _ZN8S10171C2D1Ev();
extern void _ZN8S10171C2D0Ev();
extern void _ZN8S10171C22v7Ev();
extern void _ZN8S10171C22v8Ev();
extern void _ZN8S10171C22v9Ev();
extern void _ZN8S10171C23v10Ev();
extern void _ZN8S10171C23v11Ev();
static  VTBL_ENTRY vtc_S10171C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10171C2[0]),
  (VTBL_ENTRY)&_ZN8S10171C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10171C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10171C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10171C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S10171C2[];
extern  VTBL_ENTRY _ZTV8S10171C2[];
Class_Descriptor cd_S10171C2 = {  "S10171C2", // class name
  0,0,//no base classes
  &(vtc_S10171C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10171C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10171C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10171C3  {
  int s10171c3f0;
  __tsi64 s10171c3f1;
  int s10171c3f2[3];
  void *s10171c3f3[4];
  char s10171c3f4[4];
  void *s10171c3f5;
  char s10171c3f6[12];
};
//SIG(-1 S10171C3) C1{ Fi FL Fi[3] Fp[4] Fc[4] Fp Fc[12]}



static void Test_S10171C3()
{
  {
    init_simple_test("S10171C3");
    S10171C3 lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S10171C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10171C3)");
    check_field_offset(lv, s10171c3f0, 0, "S10171C3.s10171c3f0");
    check_field_offset(lv, s10171c3f1, ABISELECT(8,4), "S10171C3.s10171c3f1");
    check_field_offset(lv, s10171c3f2, ABISELECT(16,12), "S10171C3.s10171c3f2");
    check_field_offset(lv, s10171c3f3, ABISELECT(32,24), "S10171C3.s10171c3f3");
    check_field_offset(lv, s10171c3f4, ABISELECT(64,40), "S10171C3.s10171c3f4");
    check_field_offset(lv, s10171c3f5, ABISELECT(72,44), "S10171C3.s10171c3f5");
    check_field_offset(lv, s10171c3f6, ABISELECT(80,48), "S10171C3.s10171c3f6");
  }
}
static Arrange_To_Call_Me vS10171C3(Test_S10171C3, "S10171C3", ABISELECT(96,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10171C1  : S10171C2 {
  ::S10171C3 s10171c1f0;
  int s10171c1f1;
  void *s10171c1f2[2];
  int s10171c1f3[4];
  ::S2121C13_nt s10171c1f4;
  ::S2121C13_nt s10171c1f5;
  char s10171c1f6;
  virtual  ~S10171C1(); // _ZN8S10171C1D1Ev
  virtual void  v1(); // _ZN8S10171C12v1Ev
  virtual void  v2(); // _ZN8S10171C12v2Ev
  virtual void  v3(); // _ZN8S10171C12v3Ev
  virtual void  v4(); // _ZN8S10171C12v4Ev
  virtual void  v5(); // _ZN8S10171C12v5Ev
  virtual void  v6(); // _ZN8S10171C12v6Ev
  S10171C1(); // tgen
};
//SIG(1 S10171C1) C1{ BC2{ vd v7 v8 v9 v10 v11} vd v1 v2 v3 v4 v5 v6 FC3{ Fi FL Fi[3] Fp[4] Fc[4] Fp Fc[12]} Fi Fp[2] Fi[4] FC4{ m FC5{ m FL[2]}} FC4 Fc}


 S10171C1 ::~S10171C1(){ note_dtor("S10171C1", this);}
void  S10171C1 ::v1(){vfunc_called(this, "_ZN8S10171C12v1Ev");}
void  S10171C1 ::v2(){vfunc_called(this, "_ZN8S10171C12v2Ev");}
void  S10171C1 ::v3(){vfunc_called(this, "_ZN8S10171C12v3Ev");}
void  S10171C1 ::v4(){vfunc_called(this, "_ZN8S10171C12v4Ev");}
void  S10171C1 ::v5(){vfunc_called(this, "_ZN8S10171C12v5Ev");}
void  S10171C1 ::v6(){vfunc_called(this, "_ZN8S10171C12v6Ev");}
S10171C1 ::S10171C1(){ note_ctor("S10171C1", this);} // tgen

static void Test_S10171C1()
{
  extern Class_Descriptor cd_S10171C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,33)];
    init_test(&cd_S10171C1, buf);
    S10171C1 *dp, &lv = *(dp=new (buf) S10171C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,128), "sizeof(S10171C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10171C1)");
    check_base_class_offset(lv, (S10171C2*), 0, "S10171C1");
    check_field_offset(lv, s10171c1f0, ABISELECT(8,4), "S10171C1.s10171c1f0");
    check_field_offset(lv, s10171c1f1, ABISELECT(104,64), "S10171C1.s10171c1f1");
    check_field_offset(lv, s10171c1f2, ABISELECT(112,68), "S10171C1.s10171c1f2");
    check_field_offset(lv, s10171c1f3, ABISELECT(128,76), "S10171C1.s10171c1f3");
    check_field_offset(lv, s10171c1f4, ABISELECT(144,92), "S10171C1.s10171c1f4");
    check_field_offset(lv, s10171c1f5, ABISELECT(160,108), "S10171C1.s10171c1f5");
    check_field_offset(lv, s10171c1f6, ABISELECT(176,124), "S10171C1.s10171c1f6");
    test_class_info(&lv, &cd_S10171C1);
    dp->~S10171C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10171C1(Test_S10171C1, "S10171C1", ABISELECT(184,128));

#else // __cplusplus

extern void _ZN8S10171C1C1Ev();
extern void _ZN8S10171C1D1Ev();
Name_Map name_map_S10171C1[] = {
  NSPAIR(_ZN8S10171C1C1Ev),
  NSPAIR(_ZN8S10171C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10171C2;
extern VTBL_ENTRY _ZTI8S10171C2[];
extern  VTBL_ENTRY _ZTV8S10171C2[];
static Base_Class bases_S10171C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10171C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10171C1[];
extern void _ZN8S10171C1D1Ev();
extern void _ZN8S10171C1D0Ev();
extern void _ZN8S10171C22v7Ev();
extern void _ZN8S10171C22v8Ev();
extern void _ZN8S10171C22v9Ev();
extern void _ZN8S10171C23v10Ev();
extern void _ZN8S10171C23v11Ev();
extern void _ZN8S10171C12v1Ev();
extern void _ZN8S10171C12v2Ev();
extern void _ZN8S10171C12v3Ev();
extern void _ZN8S10171C12v4Ev();
extern void _ZN8S10171C12v5Ev();
extern void _ZN8S10171C12v6Ev();
static  VTBL_ENTRY vtc_S10171C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10171C1[0]),
  (VTBL_ENTRY)&_ZN8S10171C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10171C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10171C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10171C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10171C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10171C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10171C1[];
extern  VTBL_ENTRY _ZTV8S10171C1[];
Class_Descriptor cd_S10171C1 = {  "S10171C1", // class name
  bases_S10171C1, 1,
  &(vtc_S10171C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,128), // object size
  NSPAIRA(_ZTI8S10171C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10171C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10170C2  {
  virtual  ~S10170C2(); // _ZN8S10170C2D1Ev
  virtual void  v7(); // _ZN8S10170C22v7Ev
  virtual void  v8(); // _ZN8S10170C22v8Ev
  virtual void  v9(); // _ZN8S10170C22v9Ev
  virtual void  v10(); // _ZN8S10170C23v10Ev
  virtual void  v11(); // _ZN8S10170C23v11Ev
  S10170C2(); // tgen
};
//SIG(-1 S10170C2) C1{ vd v1 v2 v3 v4 v5}


 S10170C2 ::~S10170C2(){ note_dtor("S10170C2", this);}
void  S10170C2 ::v7(){vfunc_called(this, "_ZN8S10170C22v7Ev");}
void  S10170C2 ::v8(){vfunc_called(this, "_ZN8S10170C22v8Ev");}
void  S10170C2 ::v9(){vfunc_called(this, "_ZN8S10170C22v9Ev");}
void  S10170C2 ::v10(){vfunc_called(this, "_ZN8S10170C23v10Ev");}
void  S10170C2 ::v11(){vfunc_called(this, "_ZN8S10170C23v11Ev");}
S10170C2 ::S10170C2(){ note_ctor("S10170C2", this);} // tgen

static void Test_S10170C2()
{
  extern Class_Descriptor cd_S10170C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10170C2, buf);
    S10170C2 *dp, &lv = *(dp=new (buf) S10170C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10170C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10170C2)");
    test_class_info(&lv, &cd_S10170C2);
    dp->~S10170C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10170C2(Test_S10170C2, "S10170C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10170C2C1Ev();
extern void _ZN8S10170C2D1Ev();
Name_Map name_map_S10170C2[] = {
  NSPAIR(_ZN8S10170C2C1Ev),
  NSPAIR(_ZN8S10170C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10170C2[];
extern void _ZN8S10170C2D1Ev();
extern void _ZN8S10170C2D0Ev();
extern void _ZN8S10170C22v7Ev();
extern void _ZN8S10170C22v8Ev();
extern void _ZN8S10170C22v9Ev();
extern void _ZN8S10170C23v10Ev();
extern void _ZN8S10170C23v11Ev();
static  VTBL_ENTRY vtc_S10170C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10170C2[0]),
  (VTBL_ENTRY)&_ZN8S10170C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10170C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10170C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10170C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S10170C2[];
extern  VTBL_ENTRY _ZTV8S10170C2[];
Class_Descriptor cd_S10170C2 = {  "S10170C2", // class name
  0,0,//no base classes
  &(vtc_S10170C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10170C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10170C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10170C3  {
  int s10170c3f0;
  long s10170c3f1;
  int s10170c3f2[3];
  void *s10170c3f3[4];
  char s10170c3f4[4];
  void *s10170c3f5;
  char s10170c3f6[12];
};
//SIG(-1 S10170C3) C1{ Fi Fl Fi[3] Fp[4] Fc[4] Fp Fc[12]}



static void Test_S10170C3()
{
  {
    init_simple_test("S10170C3");
    S10170C3 lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S10170C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10170C3)");
    check_field_offset(lv, s10170c3f0, 0, "S10170C3.s10170c3f0");
    check_field_offset(lv, s10170c3f1, ABISELECT(8,4), "S10170C3.s10170c3f1");
    check_field_offset(lv, s10170c3f2, ABISELECT(16,8), "S10170C3.s10170c3f2");
    check_field_offset(lv, s10170c3f3, ABISELECT(32,20), "S10170C3.s10170c3f3");
    check_field_offset(lv, s10170c3f4, ABISELECT(64,36), "S10170C3.s10170c3f4");
    check_field_offset(lv, s10170c3f5, ABISELECT(72,40), "S10170C3.s10170c3f5");
    check_field_offset(lv, s10170c3f6, ABISELECT(80,44), "S10170C3.s10170c3f6");
  }
}
static Arrange_To_Call_Me vS10170C3(Test_S10170C3, "S10170C3", ABISELECT(96,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10170C1  : S10170C2 {
  ::S10170C3 s10170c1f0;
  int s10170c1f1;
  void *s10170c1f2[2];
  int s10170c1f3[4];
  ::S2121C13_nt s10170c1f4;
  ::S2121C13_nt s10170c1f5;
  char s10170c1f6;
  virtual  ~S10170C1(); // _ZN8S10170C1D1Ev
  virtual void  v1(); // _ZN8S10170C12v1Ev
  virtual void  v2(); // _ZN8S10170C12v2Ev
  virtual void  v3(); // _ZN8S10170C12v3Ev
  virtual void  v4(); // _ZN8S10170C12v4Ev
  virtual void  v5(); // _ZN8S10170C12v5Ev
  virtual void  v6(); // _ZN8S10170C12v6Ev
  S10170C1(); // tgen
};
//SIG(1 S10170C1) C1{ BC2{ vd v7 v8 v9 v10 v11} vd v1 v2 v3 v4 v5 v6 FC3{ Fi Fl Fi[3] Fp[4] Fc[4] Fp Fc[12]} Fi Fp[2] Fi[4] FC4{ m FC5{ m FL[2]}} FC4 Fc}


 S10170C1 ::~S10170C1(){ note_dtor("S10170C1", this);}
void  S10170C1 ::v1(){vfunc_called(this, "_ZN8S10170C12v1Ev");}
void  S10170C1 ::v2(){vfunc_called(this, "_ZN8S10170C12v2Ev");}
void  S10170C1 ::v3(){vfunc_called(this, "_ZN8S10170C12v3Ev");}
void  S10170C1 ::v4(){vfunc_called(this, "_ZN8S10170C12v4Ev");}
void  S10170C1 ::v5(){vfunc_called(this, "_ZN8S10170C12v5Ev");}
void  S10170C1 ::v6(){vfunc_called(this, "_ZN8S10170C12v6Ev");}
S10170C1 ::S10170C1(){ note_ctor("S10170C1", this);} // tgen

static void Test_S10170C1()
{
  extern Class_Descriptor cd_S10170C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S10170C1, buf);
    S10170C1 *dp, &lv = *(dp=new (buf) S10170C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S10170C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10170C1)");
    check_base_class_offset(lv, (S10170C2*), 0, "S10170C1");
    check_field_offset(lv, s10170c1f0, ABISELECT(8,4), "S10170C1.s10170c1f0");
    check_field_offset(lv, s10170c1f1, ABISELECT(104,60), "S10170C1.s10170c1f1");
    check_field_offset(lv, s10170c1f2, ABISELECT(112,64), "S10170C1.s10170c1f2");
    check_field_offset(lv, s10170c1f3, ABISELECT(128,72), "S10170C1.s10170c1f3");
    check_field_offset(lv, s10170c1f4, ABISELECT(144,88), "S10170C1.s10170c1f4");
    check_field_offset(lv, s10170c1f5, ABISELECT(160,104), "S10170C1.s10170c1f5");
    check_field_offset(lv, s10170c1f6, ABISELECT(176,120), "S10170C1.s10170c1f6");
    test_class_info(&lv, &cd_S10170C1);
    dp->~S10170C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10170C1(Test_S10170C1, "S10170C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN8S10170C1C1Ev();
extern void _ZN8S10170C1D1Ev();
Name_Map name_map_S10170C1[] = {
  NSPAIR(_ZN8S10170C1C1Ev),
  NSPAIR(_ZN8S10170C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10170C2;
extern VTBL_ENTRY _ZTI8S10170C2[];
extern  VTBL_ENTRY _ZTV8S10170C2[];
static Base_Class bases_S10170C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10170C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10170C1[];
extern void _ZN8S10170C1D1Ev();
extern void _ZN8S10170C1D0Ev();
extern void _ZN8S10170C22v7Ev();
extern void _ZN8S10170C22v8Ev();
extern void _ZN8S10170C22v9Ev();
extern void _ZN8S10170C23v10Ev();
extern void _ZN8S10170C23v11Ev();
extern void _ZN8S10170C12v1Ev();
extern void _ZN8S10170C12v2Ev();
extern void _ZN8S10170C12v3Ev();
extern void _ZN8S10170C12v4Ev();
extern void _ZN8S10170C12v5Ev();
extern void _ZN8S10170C12v6Ev();
static  VTBL_ENTRY vtc_S10170C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10170C1[0]),
  (VTBL_ENTRY)&_ZN8S10170C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10170C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10170C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10170C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10170C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10170C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10170C1[];
extern  VTBL_ENTRY _ZTV8S10170C1[];
Class_Descriptor cd_S10170C1 = {  "S10170C1", // class name
  bases_S10170C1, 1,
  &(vtc_S10170C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI8S10170C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10170C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4845C3  {
  ::S2185C10_nt s4845c3f0;
  int s4845c3f1[2];
  char s4845c3f2;
  virtual  ~S4845C3(); // _ZN7S4845C3D1Ev
  virtual void  v3(); // _ZN7S4845C32v3Ev
  virtual void  v4(); // _ZN7S4845C32v4Ev
  virtual void  v5(); // _ZN7S4845C32v5Ev
  S4845C3(); // tgen
};
//SIG(-1 S4845C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4845C3 ::~S4845C3(){ note_dtor("S4845C3", this);}
void  S4845C3 ::v3(){vfunc_called(this, "_ZN7S4845C32v3Ev");}
void  S4845C3 ::v4(){vfunc_called(this, "_ZN7S4845C32v4Ev");}
void  S4845C3 ::v5(){vfunc_called(this, "_ZN7S4845C32v5Ev");}
S4845C3 ::S4845C3(){ note_ctor("S4845C3", this);} // tgen

static void Test_S4845C3()
{
  extern Class_Descriptor cd_S4845C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4845C3, buf);
    S4845C3 *dp, &lv = *(dp=new (buf) S4845C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4845C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4845C3)");
    check_field_offset(lv, s4845c3f0, ABISELECT(8,4), "S4845C3.s4845c3f0");
    check_field_offset(lv, s4845c3f1, ABISELECT(24,16), "S4845C3.s4845c3f1");
    check_field_offset(lv, s4845c3f2, ABISELECT(32,24), "S4845C3.s4845c3f2");
    test_class_info(&lv, &cd_S4845C3);
    dp->~S4845C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4845C3(Test_S4845C3, "S4845C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4845C3C1Ev();
extern void _ZN7S4845C3D1Ev();
Name_Map name_map_S4845C3[] = {
  NSPAIR(_ZN7S4845C3C1Ev),
  NSPAIR(_ZN7S4845C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4845C3[];
extern void _ZN7S4845C3D1Ev();
extern void _ZN7S4845C3D0Ev();
extern void _ZN7S4845C32v3Ev();
extern void _ZN7S4845C32v4Ev();
extern void _ZN7S4845C32v5Ev();
static  VTBL_ENTRY vtc_S4845C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4845C3[0]),
  (VTBL_ENTRY)&_ZN7S4845C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4845C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4845C3[];
extern  VTBL_ENTRY _ZTV7S4845C3[];
Class_Descriptor cd_S4845C3 = {  "S4845C3", // class name
  0,0,//no base classes
  &(vtc_S4845C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4845C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4845C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4845C2  : S4845C3 {
  void *s4845c2f0[2];
  ::S4846C6_nt s4845c2f1;
  virtual  ~S4845C2(); // _ZN7S4845C2D1Ev
  virtual void  v6(); // _ZN7S4845C22v6Ev
  virtual void  v7(); // _ZN7S4845C22v7Ev
  virtual void  v8(); // _ZN7S4845C22v8Ev
  virtual void  v9(); // _ZN7S4845C22v9Ev
  S4845C2(); // tgen
};
//SIG(-1 S4845C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] FC5{ FC6{ Fc[20]} Fc[16]}}


 S4845C2 ::~S4845C2(){ note_dtor("S4845C2", this);}
void  S4845C2 ::v6(){vfunc_called(this, "_ZN7S4845C22v6Ev");}
void  S4845C2 ::v7(){vfunc_called(this, "_ZN7S4845C22v7Ev");}
void  S4845C2 ::v8(){vfunc_called(this, "_ZN7S4845C22v8Ev");}
void  S4845C2 ::v9(){vfunc_called(this, "_ZN7S4845C22v9Ev");}
S4845C2 ::S4845C2(){ note_ctor("S4845C2", this);} // tgen

static void Test_S4845C2()
{
  extern Class_Descriptor cd_S4845C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4845C2, buf);
    S4845C2 *dp, &lv = *(dp=new (buf) S4845C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4845C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4845C2)");
    check_base_class_offset(lv, (S4845C3*), 0, "S4845C2");
    check_field_offset(lv, s4845c2f0, ABISELECT(40,28), "S4845C2.s4845c2f0");
    check_field_offset(lv, s4845c2f1, ABISELECT(56,36), "S4845C2.s4845c2f1");
    test_class_info(&lv, &cd_S4845C2);
    dp->~S4845C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4845C2(Test_S4845C2, "S4845C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4845C2C1Ev();
extern void _ZN7S4845C2D1Ev();
Name_Map name_map_S4845C2[] = {
  NSPAIR(_ZN7S4845C2C1Ev),
  NSPAIR(_ZN7S4845C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4845C3;
extern VTBL_ENTRY _ZTI7S4845C3[];
extern  VTBL_ENTRY _ZTV7S4845C3[];
static Base_Class bases_S4845C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4845C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4845C2[];
extern void _ZN7S4845C2D1Ev();
extern void _ZN7S4845C2D0Ev();
extern void _ZN7S4845C32v3Ev();
extern void _ZN7S4845C32v4Ev();
extern void _ZN7S4845C32v5Ev();
extern void _ZN7S4845C22v6Ev();
extern void _ZN7S4845C22v7Ev();
extern void _ZN7S4845C22v8Ev();
extern void _ZN7S4845C22v9Ev();
static  VTBL_ENTRY vtc_S4845C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4845C2[0]),
  (VTBL_ENTRY)&_ZN7S4845C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4845C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4845C2[];
extern  VTBL_ENTRY _ZTV7S4845C2[];
Class_Descriptor cd_S4845C2 = {  "S4845C2", // class name
  bases_S4845C2, 1,
  &(vtc_S4845C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4845C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4845C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4845C8_nt  {
  int s4845c8f0[2];
  char s4845c8f1[448];
  int s4845c8f2;
};
//SIG(-1 S4845C8_nt) C1{ Fi[2] Fc[448] Fi}



//skip512 S4845C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4845C1  : S4845C2 {
  ::S4845C8_nt s4845c1f0;
  virtual  ~S4845C1(); // _ZN7S4845C1D1Ev
  virtual void  v1(); // _ZN7S4845C12v1Ev
  virtual void  v2(); // _ZN7S4845C12v2Ev
  S4845C1(); // tgen
};
//SIG(1 S4845C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp[2] FC6{ FC7{ Fc[20]} Fc[16]}} vd v1 v2 FC8{ Fi[2] Fc[448] Fi}}


 S4845C1 ::~S4845C1(){ note_dtor("S4845C1", this);}
void  S4845C1 ::v1(){vfunc_called(this, "_ZN7S4845C12v1Ev");}
void  S4845C1 ::v2(){vfunc_called(this, "_ZN7S4845C12v2Ev");}
S4845C1 ::S4845C1(){ note_ctor("S4845C1", this);} // tgen

static void Test_S4845C1()
{
  extern Class_Descriptor cd_S4845C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(70,134)];
    init_test(&cd_S4845C1, buf);
    S4845C1 *dp, &lv = *(dp=new (buf) S4845C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(552,532), "sizeof(S4845C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4845C1)");
    check_base_class_offset(lv, (S4845C3*)(S4845C2*), 0, "S4845C1");
    check_base_class_offset(lv, (S4845C2*), 0, "S4845C1");
    check_field_offset(lv, s4845c1f0, ABISELECT(92,72), "S4845C1.s4845c1f0");
    test_class_info(&lv, &cd_S4845C1);
    dp->~S4845C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4845C1(Test_S4845C1, "S4845C1", ABISELECT(552,532));

#else // __cplusplus

extern void _ZN7S4845C1C1Ev();
extern void _ZN7S4845C1D1Ev();
Name_Map name_map_S4845C1[] = {
  NSPAIR(_ZN7S4845C1C1Ev),
  NSPAIR(_ZN7S4845C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4845C3;
extern VTBL_ENTRY _ZTI7S4845C3[];
extern  VTBL_ENTRY _ZTV7S4845C3[];
extern Class_Descriptor cd_S4845C2;
extern VTBL_ENTRY _ZTI7S4845C2[];
extern  VTBL_ENTRY _ZTV7S4845C2[];
static Base_Class bases_S4845C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4845C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4845C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4845C1[];
extern void _ZN7S4845C1D1Ev();
extern void _ZN7S4845C1D0Ev();
extern void _ZN7S4845C32v3Ev();
extern void _ZN7S4845C32v4Ev();
extern void _ZN7S4845C32v5Ev();
extern void _ZN7S4845C22v6Ev();
extern void _ZN7S4845C22v7Ev();
extern void _ZN7S4845C22v8Ev();
extern void _ZN7S4845C22v9Ev();
extern void _ZN7S4845C12v1Ev();
extern void _ZN7S4845C12v2Ev();
static  VTBL_ENTRY vtc_S4845C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4845C1[0]),
  (VTBL_ENTRY)&_ZN7S4845C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4845C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4845C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4845C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4845C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4845C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4845C1[];
extern  VTBL_ENTRY _ZTV7S4845C1[];
Class_Descriptor cd_S4845C1 = {  "S4845C1", // class name
  bases_S4845C1, 2,
  &(vtc_S4845C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(552,532), // object size
  NSPAIRA(_ZTI7S4845C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4845C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C7  {
  virtual void  v1(); // _ZN7S3503C72v1Ev
  ~S3503C7(); // tgen
  S3503C7(); // tgen
};
//SIG(-1 S3503C7) C1{ v1}


void  S3503C7 ::v1(){vfunc_called(this, "_ZN7S3503C72v1Ev");}
S3503C7 ::~S3503C7(){ note_dtor("S3503C7", this);} // tgen
S3503C7 ::S3503C7(){ note_ctor("S3503C7", this);} // tgen

static void Test_S3503C7()
{
  extern Class_Descriptor cd_S3503C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3503C7, buf);
    S3503C7 *dp, &lv = *(dp=new (buf) S3503C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3503C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C7)");
    test_class_info(&lv, &cd_S3503C7);
    dp->~S3503C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C7(Test_S3503C7, "S3503C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3503C7C1Ev();
extern void _ZN7S3503C7D1Ev();
Name_Map name_map_S3503C7[] = {
  NSPAIR(_ZN7S3503C7C1Ev),
  NSPAIR(_ZN7S3503C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3503C7[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C7[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
Class_Descriptor cd_S3503C7 = {  "S3503C7", // class name
  0,0,//no base classes
  &(vtc_S3503C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3503C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3503C7),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C6  : virtual S2121C38 , S3503C7 , virtual S2121C28 {
  ~S3503C6(); // tgen
  S3503C6(); // tgen
};
//SIG(-1 S3503C6) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S3503C6 ::~S3503C6(){ note_dtor("S3503C6", this);} // tgen
S3503C6 ::S3503C6(){ note_ctor("S3503C6", this);} // tgen

static void Test_S3503C6()
{
  extern Class_Descriptor cd_S3503C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3503C6, buf);
    S3503C6 *dp, &lv = *(dp=new (buf) S3503C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3503C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C6)");
    check_base_class_offset(lv, (S2121C38*), 0, "S3503C6");
    check_base_class_offset(lv, (S3503C7*), 0, "S3503C6");
    check_base_class_offset(lv, (S2121C28*), 0, "S3503C6");
    test_class_info(&lv, &cd_S3503C6);
    dp->~S3503C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C6(Test_S3503C6, "S3503C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3503C6C1Ev();
extern void _ZN7S3503C6D1Ev();
Name_Map name_map_S3503C6[] = {
  NSPAIR(_ZN7S3503C6C1Ev),
  NSPAIR(_ZN7S3503C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S3503C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C6[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C6[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C6[];
static  VTT_ENTRY vtt_S3503C6[] = {
  {&(_ZTV7S3503C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
Class_Descriptor cd_S3503C6 = {  "S3503C6", // class name
  bases_S3503C6, 3,
  &(vtc_S3503C6[0]), // expected_vtbl_contents
  &(vtt_S3503C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3503C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3503C6),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C6),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C5  : S3503C6 , S3503C7 {
  ~S3503C5(); // tgen
  S3503C5(); // tgen
};
//SIG(-1 S3503C5) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S3503C5 ::~S3503C5(){ note_dtor("S3503C5", this);} // tgen
S3503C5 ::S3503C5(){ note_ctor("S3503C5", this);} // tgen

static void Test_S3503C5()
{
  extern Class_Descriptor cd_S3503C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3503C5, buf);
    S3503C5 *dp, &lv = *(dp=new (buf) S3503C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3503C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C5)");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*), 0, "S3503C5");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*), 0, "S3503C5");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*), 0, "S3503C5");
    check_base_class_offset(lv, (S3503C6*), 0, "S3503C5");
    /*is_ambiguous_... S3503C5::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*), ABISELECT(8,4), "S3503C5");
    test_class_info(&lv, &cd_S3503C5);
    dp->~S3503C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C5(Test_S3503C5, "S3503C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3503C5C1Ev();
extern void _ZN7S3503C5D1Ev();
Name_Map name_map_S3503C5[] = {
  NSPAIR(_ZN7S3503C5C1Ev),
  NSPAIR(_ZN7S3503C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
static Base_Class bases_S3503C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3503C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3503C7,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C5[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C5[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C6__7S3503C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C5[] = {
  {&(_ZTV7S3503C5[4]),  4,8},
  {&(_tg__ZTV7S3503C6__7S3503C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3503C5[];
extern  VTBL_ENTRY _ZTV7S3503C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C5[];
Class_Descriptor cd_S3503C5 = {  "S3503C5", // class name
  bases_S3503C5, 5,
  &(vtc_S3503C5[0]), // expected_vtbl_contents
  &(vtt_S3503C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3503C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3503C5),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C9  : S2121C38 , S3503C6 {
  virtual void  v2(); // _ZN7S3503C92v2Ev
  ~S3503C9(); // tgen
  S3503C9(); // tgen
};
//SIG(-1 S3503C9) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S3503C9 ::v2(){vfunc_called(this, "_ZN7S3503C92v2Ev");}
S3503C9 ::~S3503C9(){ note_dtor("S3503C9", this);} // tgen
S3503C9 ::S3503C9(){ note_ctor("S3503C9", this);} // tgen

static void Test_S3503C9()
{
  extern Class_Descriptor cd_S3503C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3503C9, buf);
    S3503C9 *dp, &lv = *(dp=new (buf) S3503C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3503C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C9)");
    /*is_ambiguous_... S3503C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S3503C9");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*), ABISELECT(8,4), "S3503C9");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*), 0, "S3503C9");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*), 0, "S3503C9");
    check_base_class_offset(lv, (S3503C6*), 0, "S3503C9");
    test_class_info(&lv, &cd_S3503C9);
    dp->~S3503C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C9(Test_S3503C9, "S3503C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3503C9C1Ev();
extern void _ZN7S3503C9D1Ev();
Name_Map name_map_S3503C9[] = {
  NSPAIR(_ZN7S3503C9C1Ev),
  NSPAIR(_ZN7S3503C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
static Base_Class bases_S3503C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3503C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C9[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY vtc_S3503C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C9[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern VTBL_ENTRY _ZTV7S3503C9[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C6__7S3503C9[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C9[] = {
  {&(_ZTV7S3503C9[4]),  4,6},
  {&(_tg__ZTV7S3503C6__7S3503C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3503C9[];
extern  VTBL_ENTRY _ZTV7S3503C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C9[];
Class_Descriptor cd_S3503C9 = {  "S3503C9", // class name
  bases_S3503C9, 5,
  &(vtc_S3503C9[0]), // expected_vtbl_contents
  &(vtt_S3503C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3503C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3503C9),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C9),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C10  : S3503C7 , S2121C28 , virtual S2121C38 {
  ~S3503C10(); // tgen
  S3503C10(); // tgen
};
//SIG(-1 S3503C10) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S3503C10 ::~S3503C10(){ note_dtor("S3503C10", this);} // tgen
S3503C10 ::S3503C10(){ note_ctor("S3503C10", this);} // tgen

static void Test_S3503C10()
{
  extern Class_Descriptor cd_S3503C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3503C10, buf);
    S3503C10 *dp, &lv = *(dp=new (buf) S3503C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3503C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C10)");
    check_base_class_offset(lv, (S3503C7*), 0, "S3503C10");
    check_base_class_offset(lv, (S2121C28*), 0, "S3503C10");
    check_base_class_offset(lv, (S2121C38*), 0, "S3503C10");
    test_class_info(&lv, &cd_S3503C10);
    dp->~S3503C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C10(Test_S3503C10, "S3503C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S3503C10C1Ev();
extern void _ZN8S3503C10D1Ev();
Name_Map name_map_S3503C10[] = {
  NSPAIR(_ZN8S3503C10C1Ev),
  NSPAIR(_ZN8S3503C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S3503C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3503C10[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S3503C10[];
static  VTT_ENTRY vtt_S3503C10[] = {
  {&(_ZTV8S3503C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
Class_Descriptor cd_S3503C10 = {  "S3503C10", // class name
  bases_S3503C10, 3,
  &(vtc_S3503C10[0]), // expected_vtbl_contents
  &(vtt_S3503C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S3503C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3503C10),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3503C10),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C3  : virtual S2121C38 , virtual S3503C5 , virtual S3503C9 , virtual S3503C10 , S3503C7 {
  ~S3503C3(); // tgen
  S3503C3(); // tgen
};
//SIG(-1 S3503C3) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S3503C3 ::~S3503C3(){ note_dtor("S3503C3", this);} // tgen
S3503C3 ::S3503C3(){ note_ctor("S3503C3", this);} // tgen

static void Test_S3503C3()
{
  extern Class_Descriptor cd_S3503C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3503C3, buf);
    S3503C3 *dp, &lv = *(dp=new (buf) S3503C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3503C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C3)");
    /*is_ambiguous_... S3503C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S3503C3");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C5*), 0, "S3503C3");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C9*), 0, "S3503C3");
    check_base_class_offset(lv, (S2121C38*)(S3503C10*), 0, "S3503C3");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C5*), ABISELECT(8,4), "S3503C3");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C5*), 0, "S3503C3");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C9*), 0, "S3503C3");
    check_base_class_offset(lv, (S3503C6*)(S3503C5*), ABISELECT(8,4), "S3503C3");
    /*is_ambiguous_... S3503C5::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C5*), ABISELECT(16,8), "S3503C3");
    check_base_class_offset(lv, (S3503C5*), ABISELECT(8,4), "S3503C3");
    /*is_ambiguous_... S3503C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C9*), ABISELECT(24,12), "S3503C3");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C9*), ABISELECT(24,12), "S3503C3");
    check_base_class_offset(lv, (S3503C6*)(S3503C9*), ABISELECT(24,12), "S3503C3");
    check_base_class_offset(lv, (S3503C9*), ABISELECT(24,12), "S3503C3");
    check_base_class_offset(lv, (S3503C7*)(S3503C10*), ABISELECT(32,16), "S3503C3");
    check_base_class_offset(lv, (S2121C28*)(S3503C10*), ABISELECT(32,16), "S3503C3");
    check_base_class_offset(lv, (S3503C10*), ABISELECT(32,16), "S3503C3");
    /*is_ambiguous_... S3503C3::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*), 0, "S3503C3");
    test_class_info(&lv, &cd_S3503C3);
    dp->~S3503C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C3(Test_S3503C3, "S3503C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3503C3C1Ev();
extern void _ZN7S3503C3D1Ev();
Name_Map name_map_S3503C3[] = {
  NSPAIR(_ZN7S3503C3C1Ev),
  NSPAIR(_ZN7S3503C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C5;
extern VTBL_ENTRY _ZTI7S3503C5[];
extern  VTBL_ENTRY _ZTV7S3503C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C9;
extern VTBL_ENTRY _ZTI7S3503C9[];
extern  VTBL_ENTRY _ZTV7S3503C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C9[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
static Base_Class bases_S3503C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3503C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3503C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C5,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3503C9,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3503C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C3[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C3[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C3[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C5__7S3503C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C9[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C9__A1__7S3503C3[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C3[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C3[] = {
  {&(_ZTV7S3503C3[7]),  7,30},
  {&(_ZTV7S3503C3[13]),  13,30},
  {&(_ZTV7S3503C3[16]),  16,30},
  {&(_ZTV7S3503C3[23]),  23,30},
  {&(_ZTV7S3503C3[29]),  29,30},
  {&(_tg__ZTV7S3503C5__7S3503C3[4]),  4,5},
  {&(_tg__ZTV7S3503C67S3503C5__7S3503C3[4]),  4,5},
  {&(_tg__ZTV7S3503C9__7S3503C3[4]),  4,6},
  {&(_tg__ZTV7S3503C67S3503C9__A1__7S3503C3[4]),  4,5},
  {&(_tg__ZTV8S3503C10__7S3503C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3503C3[];
extern  VTBL_ENTRY _ZTV7S3503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C3[];
Class_Descriptor cd_S3503C3 = {  "S3503C3", // class name
  bases_S3503C3, 14,
  &(vtc_S3503C3[0]), // expected_vtbl_contents
  &(vtt_S3503C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3503C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3503C3),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C3),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C2  : S3503C3 , virtual S2121C24 , S3503C6 , S2121C28 , S3503C10 {
  virtual  ~S3503C2(); // _ZN7S3503C2D2Ev
  S3503C2(); // tgen
};
//SIG(-1 S3503C2) C1{ BC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} VBC10{ m} BC5 BC7 BC9 vd}


 S3503C2 ::~S3503C2(){ note_dtor("S3503C2", this);}
S3503C2 ::S3503C2(){ note_ctor("S3503C2", this);} // tgen

static void Test_S3503C2()
{
  extern Class_Descriptor cd_S3503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S3503C2, buf);
    S3503C2 *dp, &lv = *(dp=new (buf) S3503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S3503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C2)");
    /*is_ambiguous_... S3503C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C3*), 0, "S3503C2");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C5*), 0, "S3503C2");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C9*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C10*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C6*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C10*), 0, "S3503C2");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C5*), ABISELECT(24,12), "S3503C2");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C5*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C9*), ABISELECT(40,20), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C6*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S3503C6*)(S3503C5*), ABISELECT(24,12), "S3503C2");
    /*is_ambiguous_... S3503C5::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C5*), ABISELECT(32,16), "S3503C2");
    check_base_class_offset(lv, (S3503C5*)(S3503C3*), ABISELECT(24,12), "S3503C2");
    /*is_ambiguous_... S3503C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C9*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C9*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S3503C6*)(S3503C9*), ABISELECT(40,20), "S3503C2");
    check_base_class_offset(lv, (S3503C9*)(S3503C3*), ABISELECT(40,20), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C10*), ABISELECT(48,24), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C10*), ABISELECT(48,24), "S3503C2");
    check_base_class_offset(lv, (S3503C10*)(S3503C3*), ABISELECT(48,24), "S3503C2");
    /*is_ambiguous_... S3503C3::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C3*), 0, "S3503C2");
    check_base_class_offset(lv, (S3503C3*), 0, "S3503C2");
    check_base_class_offset(lv, (S2121C24*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C6*), ABISELECT(8,4), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S3503C6*), ABISELECT(8,4), "S3503C2");
    /*is_ambiguous_... S3503C2::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*), 0, "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C10*), ABISELECT(16,8), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C10*), ABISELECT(16,8), "S3503C2");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C10*), ABISELECT(16,8), "S3503C2");
    test_class_info(&lv, &cd_S3503C2);
    dp->~S3503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C2(Test_S3503C2, "S3503C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S3503C2C1Ev();
extern void _ZN7S3503C2D2Ev();
Name_Map name_map_S3503C2[] = {
  NSPAIR(_ZN7S3503C2C1Ev),
  NSPAIR(_ZN7S3503C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C5;
extern VTBL_ENTRY _ZTI7S3503C5[];
extern  VTBL_ENTRY _ZTV7S3503C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C9;
extern VTBL_ENTRY _ZTI7S3503C9[];
extern  VTBL_ENTRY _ZTV7S3503C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C9[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C3;
extern VTBL_ENTRY _ZTI7S3503C3[];
extern  VTBL_ENTRY _ZTV7S3503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C3[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
static Base_Class bases_S3503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3503C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3503C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(32,16), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C5,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3503C9,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3503C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(48,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3503C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3503C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3503C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C2[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C2D1Ev();
extern void _ZN7S3503C2D0Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C2[] = {
  0,
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3503C2D0Ev,
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C2[];
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C3__7S3503C2[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C3__7S3503C2[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C77S3503C5__A1__7S3503C3__7S3503C2[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C3__7S3503C2[] = {
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C3__7S3503C2[] = {
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C6__A2__7S3503C2[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__A__7S3503C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C2[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C5__7S3503C2[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C2[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C9[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C9__A1__7S3503C2[] = {
  0,
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C2[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C2[] = {
  {&(_ZTV7S3503C2[8]),  8,42},
  {&(_tg__ZTV7S3503C3__7S3503C2[7]),  7,8},
  {&(_tg__ZTV7S3503C5__7S3503C3__7S3503C2[5]),  5,6},
  {&(_tg__ZTV7S3503C77S3503C5__A1__7S3503C3__7S3503C2[2]),  2,3},
  {&(_tg__ZTV7S3503C9__7S3503C3__7S3503C2[6]),  6,8},
  {&(_tg__ZTV8S3503C10__7S3503C3__7S3503C2[4]),  4,5},
  {&(_tg__ZTV7S3503C6__A2__7S3503C2[4]),  4,5},
  {&(_tg__ZTV8S3503C10__A__7S3503C2[3]),  3,4},
  {&(_ZTV7S3503C2[25]),  25,42},
  {&(_ZTV7S3503C2[28]),  28,42},
  {&(_ZTV7S3503C2[35]),  35,42},
  {&(_ZTV7S3503C2[41]),  41,42},
  {&(_ZTV7S3503C2[15]),  15,42},
  {&(_ZTV7S3503C2[19]),  19,42},
  {&(_tg__ZTV7S3503C5__7S3503C2[4]),  4,5},
  {&(_tg__ZTV7S3503C67S3503C5__7S3503C2[4]),  4,5},
  {&(_tg__ZTV7S3503C9__7S3503C2[4]),  4,6},
  {&(_tg__ZTV7S3503C67S3503C9__A1__7S3503C2[4]),  4,5},
  {&(_tg__ZTV8S3503C10__7S3503C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3503C2[];
extern  VTBL_ENTRY _ZTV7S3503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C2[];
Class_Descriptor cd_S3503C2 = {  "S3503C2", // class name
  bases_S3503C2, 22,
  &(vtc_S3503C2[0]), // expected_vtbl_contents
  &(vtt_S3503C2[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S3503C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3503C2),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C2),19, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3503C1  : S3503C2 , S3350C8_nt {
  ~S3503C1(); // tgen
  S3503C1(); // tgen
};
//SIG(1 S3503C1) C1{ BC2{ BC3{ VBC4{ m} VBC5{ BC6{ VBC4 BC7{ v1} VBC8{ m}} BC7} VBC9{ BC4 BC6 v2} VBC10{ BC7 BC8 VBC4} BC7} VBC11{ m} BC6 BC8 BC10 vd} BC12{ m Fi}}


S3503C1 ::~S3503C1(){ note_dtor("S3503C1", this);} // tgen
S3503C1 ::S3503C1(){ note_ctor("S3503C1", this);} // tgen

static void Test_S3503C1()
{
  extern Class_Descriptor cd_S3503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S3503C1, buf);
    S3503C1 *dp, &lv = *(dp=new (buf) S3503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3503C1)");
    /*is_ambiguous_... S3503C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C3*)(S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C5*), 0, "S3503C1");
    check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C9*), 0, "S3503C1");
    /*is_ambiguous_... S3503C1::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C10*), 0, "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C6*)(S3503C2*), 0, "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C10*)(S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C5*), ABISELECT(32,16), "S3503C1");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C5*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C9*), ABISELECT(48,24), "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C6*)(S3503C2*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S3503C6*)(S3503C5*), ABISELECT(32,16), "S3503C1");
    /*is_ambiguous_... S3503C5::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C5*), ABISELECT(40,20), "S3503C1");
    check_base_class_offset(lv, (S3503C5*)(S3503C3*)(S3503C2*), ABISELECT(32,16), "S3503C1");
    /*is_ambiguous_... S3503C9::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S3503C9*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C9*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S3503C6*)(S3503C9*), ABISELECT(48,24), "S3503C1");
    check_base_class_offset(lv, (S3503C9*)(S3503C3*)(S3503C2*), ABISELECT(48,24), "S3503C1");
    /*is_ambiguous_... S3503C1::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C10*), ABISELECT(56,28), "S3503C1");
    /*is_ambiguous_... S3503C1::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C10*), ABISELECT(56,28), "S3503C1");
    check_base_class_offset(lv, (S3503C10*)(S3503C3*)(S3503C2*), ABISELECT(56,28), "S3503C1");
    /*is_ambiguous_... S3503C3::S3503C7 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C3*)(S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S3503C3*)(S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S2121C24*)(S3503C2*), 0, "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C6*)(S3503C2*), ABISELECT(8,4), "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C6 */ AMB_check_base_class_offset(lv, (S3503C6*)(S3503C2*), ABISELECT(8,4), "S3503C1");
    /*is_ambiguous_... S3503C2::S2121C28 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C2*), 0, "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C7*)(S3503C10*)(S3503C2*), ABISELECT(16,8), "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S2121C28*)(S3503C10*)(S3503C2*), ABISELECT(16,8), "S3503C1");
    /*is_ambiguous_... S3503C2::S3503C10 */ AMB_check_base_class_offset(lv, (S3503C10*)(S3503C2*), ABISELECT(16,8), "S3503C1");
    check_base_class_offset(lv, (S3503C2*), 0, "S3503C1");
    check_base_class_offset(lv, (S3350C8_nt*), ABISELECT(24,12), "S3503C1");
    test_class_info(&lv, &cd_S3503C1);
    dp->~S3503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3503C1(Test_S3503C1, "S3503C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3503C1C1Ev();
extern void _ZN7S3503C1D1Ev();
Name_Map name_map_S3503C1[] = {
  NSPAIR(_ZN7S3503C1C1Ev),
  NSPAIR(_ZN7S3503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C5;
extern VTBL_ENTRY _ZTI7S3503C5[];
extern  VTBL_ENTRY _ZTV7S3503C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S3503C9;
extern VTBL_ENTRY _ZTI7S3503C9[];
extern  VTBL_ENTRY _ZTV7S3503C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C9[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C3;
extern VTBL_ENTRY _ZTI7S3503C3[];
extern  VTBL_ENTRY _ZTV7S3503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C3[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S3503C6;
extern VTBL_ENTRY _ZTI7S3503C6[];
extern  VTBL_ENTRY _ZTV7S3503C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C7;
extern VTBL_ENTRY _ZTI7S3503C7[];
extern  VTBL_ENTRY _ZTV7S3503C7[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S3503C10;
extern VTBL_ENTRY _ZTI8S3503C10[];
extern  VTBL_ENTRY _ZTV8S3503C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3503C10[];
extern Class_Descriptor cd_S3503C2;
extern VTBL_ENTRY _ZTI7S3503C2[];
extern  VTBL_ENTRY _ZTV7S3503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C2[];
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
static Base_Class bases_S3503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3503C7,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3503C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3503C5,    ABISELECT(32,16), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3503C9,    ABISELECT(48,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3503C7,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(56,28), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S3503C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3503C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S3503C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3503C6,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3503C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3503C10,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3503C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3350C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3503C1[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C1D1Ev();
extern void _ZN7S3503C1D0Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY vtc_S3503C1[] = {
  0,
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3503C1D0Ev,
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3503C1[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern VTBL_ENTRY _ZTV7S3503C1[];
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C2D1Ev();
extern void _ZN7S3503C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C2__7S3503C1[] = {
  0,
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3503C2D0Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C37S3503C2__7S3503C1[] = {
  ABISELECT(56,28),
  ABISELECT(48,24),
  ABISELECT(48,24),
  ABISELECT(32,16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C37S3503C2__7S3503C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C77S3503C5__A1__7S3503C37S3503C2__7S3503C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C37S3503C2__7S3503C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C37S3503C2__7S3503C1[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3503C3[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C2__A2__7S3503C1[] = {
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C107S3503C2__A1__7S3503C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C2__7S3503C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C77S3503C5__A1__7S3503C2__7S3503C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C2__7S3503C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C2__7S3503C1[] = {
  0,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C6__A2__7S3503C2__7S3503C1[] = {
  ABISELECT(40,20),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__A__7S3503C2__7S3503C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3503C2[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C5__7S3503C1[] = {
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C5[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C5__7S3503C1[] = {
  ABISELECT(16,8),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
extern void _ZN7S3503C92v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C9__7S3503C1[] = {
  0,
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C9[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3503C92v2Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV7S3503C67S3503C9__A1__7S3503C1[] = {
  0,
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3503C6[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
extern void _ZN7S3503C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S3503C10__7S3503C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S3503C10[0]),
  (VTBL_ENTRY)&_ZN7S3503C72v1Ev,
};
static  VTT_ENTRY vtt_S3503C1[] = {
  {&(_ZTV7S3503C1[8]),  8,42},
  {&(_tg__ZTV7S3503C2__7S3503C1[8]),  8,11},
  {&(_tg__ZTV7S3503C37S3503C2__7S3503C1[7]),  7,8},
  {&(_tg__ZTV7S3503C5__7S3503C37S3503C2__7S3503C1[5]),  5,6},
  {&(_tg__ZTV7S3503C77S3503C5__A1__7S3503C37S3503C2__7S3503C1[2]),  2,3},
  {&(_tg__ZTV7S3503C9__7S3503C37S3503C2__7S3503C1[6]),  6,8},
  {&(_tg__ZTV8S3503C10__7S3503C37S3503C2__7S3503C1[4]),  4,5},
  {&(_tg__ZTV7S3503C67S3503C2__A2__7S3503C1[4]),  4,5},
  {&(_tg__ZTV8S3503C107S3503C2__A1__7S3503C1[3]),  3,4},
  {&(_tg__ZTV7S3503C5__7S3503C2__7S3503C1[5]),  5,6},
  {&(_tg__ZTV7S3503C77S3503C5__A1__7S3503C2__7S3503C1[2]),  2,3},
  {&(_tg__ZTV7S3503C9__7S3503C2__7S3503C1[6]),  6,8},
  {&(_tg__ZTV8S3503C10__7S3503C2__7S3503C1[4]),  4,5},
  {&(_tg__ZTV7S3503C6__A2__7S3503C2__7S3503C1[4]),  4,5},
  {&(_tg__ZTV8S3503C10__A__7S3503C2__7S3503C1[3]),  3,4},
  {&(_ZTV7S3503C1[25]),  25,42},
  {&(_ZTV7S3503C1[28]),  28,42},
  {&(_ZTV7S3503C1[35]),  35,42},
  {&(_ZTV7S3503C1[41]),  41,42},
  {&(_ZTV7S3503C1[15]),  15,42},
  {&(_ZTV7S3503C1[19]),  19,42},
  {&(_tg__ZTV7S3503C5__7S3503C1[4]),  4,5},
  {&(_tg__ZTV7S3503C67S3503C5__7S3503C1[4]),  4,5},
  {&(_tg__ZTV7S3503C9__7S3503C1[4]),  4,6},
  {&(_tg__ZTV7S3503C67S3503C9__A1__7S3503C1[4]),  4,5},
  {&(_tg__ZTV8S3503C10__7S3503C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3503C1[];
extern  VTBL_ENTRY _ZTV7S3503C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3503C1[];
Class_Descriptor cd_S3503C1 = {  "S3503C1", // class name
  bases_S3503C1, 24,
  &(vtc_S3503C1[0]), // expected_vtbl_contents
  &(vtt_S3503C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3503C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3503C1),42, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3503C1),26, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C2_nt  {
  void *s21649c2f0[3];
};
//SIG(-1 S21649C2_nt) C1{ Fp[3]}



//skip512 S21649C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C3_nt  {
  int s21649c3f0;
  void *s21649c3f1;
};
//SIG(-1 S21649C3_nt) C1{ Fi Fp}



//skip512 S21649C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C6  {
  void *s21649c6f0;
  int s21649c6f1;
  void *s21649c6f2;
  int s21649c6f3;
  void *s21649c6f4[2];
  int s21649c6f5[2];
  ::S8480C8_nt s21649c6f6[16];
};
//SIG(-1 S21649C6) C1{ Fp Fi Fp Fi Fp[2] Fi[2] FC2{ Fi Fp Fi}[16]}



static void Test_S21649C6()
{
  {
    init_simple_test("S21649C6");
    S21649C6 lv;
    check2(sizeof(lv), ABISELECT(440,224), "sizeof(S21649C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21649C6)");
    check_field_offset(lv, s21649c6f0, 0, "S21649C6.s21649c6f0");
    check_field_offset(lv, s21649c6f1, ABISELECT(8,4), "S21649C6.s21649c6f1");
    check_field_offset(lv, s21649c6f2, ABISELECT(16,8), "S21649C6.s21649c6f2");
    check_field_offset(lv, s21649c6f3, ABISELECT(24,12), "S21649C6.s21649c6f3");
    check_field_offset(lv, s21649c6f4, ABISELECT(32,16), "S21649C6.s21649c6f4");
    check_field_offset(lv, s21649c6f5, ABISELECT(48,24), "S21649C6.s21649c6f5");
    check_field_offset(lv, s21649c6f6, ABISELECT(56,32), "S21649C6.s21649c6f6");
  }
}
static Arrange_To_Call_Me vS21649C6(Test_S21649C6, "S21649C6", ABISELECT(440,224));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C5  {
  int s21649c5f0;
  void *s21649c5f1;
  int s21649c5f2;
  ::S21649C6 s21649c5f3;
};
//SIG(1 S21649C5) C1{ Fi Fp Fi FC2{ Fp Fi Fp Fi Fp[2] Fi[2] FC3{ Fi Fp Fi}[16]}}



static void Test_S21649C5()
{
  {
    init_simple_test("S21649C5");
    S21649C5 lv;
    check2(sizeof(lv), ABISELECT(464,236), "sizeof(S21649C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21649C5)");
    check_field_offset(lv, s21649c5f0, 0, "S21649C5.s21649c5f0");
    check_field_offset(lv, s21649c5f1, ABISELECT(8,4), "S21649C5.s21649c5f1");
    check_field_offset(lv, s21649c5f2, ABISELECT(16,8), "S21649C5.s21649c5f2");
    check_field_offset(lv, s21649c5f3, ABISELECT(24,12), "S21649C5.s21649c5f3");
  }
}
static Arrange_To_Call_Me vS21649C5(Test_S21649C5, "S21649C5", ABISELECT(464,236));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C4  {
  int s21649c4f0;
  ::S21649C5 s21649c4f1[50];
};
//SIG(-1 S21649C4) C1{ Fi FC2{ Fi Fp Fi FC3{ Fp Fi Fp Fi Fp[2] Fi[2] FC4{ Fi Fp Fi}[16]}}[50]}



static void Test_S21649C4()
{
  {
    init_simple_test("S21649C4");
    S21649C4 lv;
    check2(sizeof(lv), ABISELECT(23208,11804), "sizeof(S21649C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21649C4)");
    check_field_offset(lv, s21649c4f0, 0, "S21649C4.s21649c4f0");
    check_field_offset(lv, s21649c4f1, ABISELECT(8,4), "S21649C4.s21649c4f1");
  }
}
static Arrange_To_Call_Me vS21649C4(Test_S21649C4, "S21649C4", ABISELECT(23208,11804));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21649C1  {
  int s21649c1f0[2];
  ::S21649C2_nt s21649c1f1;
  ::S21649C3_nt s21649c1f2;
  ::S21649C4 s21649c1f3;
  ::S21649C3_nt s21649c1f4[3];
  void  mf21649c1(); // _ZN8S21649C19mf21649c1Ev
  virtual  ~S21649C1(); // _ZN8S21649C1D1Ev
  S21649C1(); // tgen
};
//SIG(1 S21649C1) C1{ vd m Fi[2] FC2{ Fp[3]} FC3{ Fi Fp} FC4{ Fi FC5{ Fi Fp Fi FC6{ Fp Fi Fp Fi Fp[2] Fi[2] FC7{ Fi Fp Fi}[16]}}[50]} FC3[3]}


void  S21649C1 ::mf21649c1(){}
 S21649C1 ::~S21649C1(){ note_dtor("S21649C1", this);}
S21649C1 ::S21649C1(){ note_ctor("S21649C1", this);} // tgen

static void Test_S21649C1()
{
  extern Class_Descriptor cd_S21649C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2915,2966)];
    init_test(&cd_S21649C1, buf);
    S21649C1 *dp, &lv = *(dp=new (buf) S21649C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(23312,11860), "sizeof(S21649C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21649C1)");
    check_field_offset(lv, s21649c1f0, ABISELECT(8,4), "S21649C1.s21649c1f0");
    check_field_offset(lv, s21649c1f1, ABISELECT(16,12), "S21649C1.s21649c1f1");
    check_field_offset(lv, s21649c1f2, ABISELECT(40,24), "S21649C1.s21649c1f2");
    check_field_offset(lv, s21649c1f3, ABISELECT(56,32), "S21649C1.s21649c1f3");
    check_field_offset(lv, s21649c1f4, ABISELECT(23264,11836), "S21649C1.s21649c1f4");
    test_class_info(&lv, &cd_S21649C1);
    dp->~S21649C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21649C1(Test_S21649C1, "S21649C1", ABISELECT(23312,11860));

#else // __cplusplus

extern void _ZN8S21649C1C1Ev();
extern void _ZN8S21649C1D1Ev();
Name_Map name_map_S21649C1[] = {
  NSPAIR(_ZN8S21649C1C1Ev),
  NSPAIR(_ZN8S21649C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21649C1[];
extern void _ZN8S21649C1D1Ev();
extern void _ZN8S21649C1D0Ev();
static  VTBL_ENTRY vtc_S21649C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21649C1[0]),
  (VTBL_ENTRY)&_ZN8S21649C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21649C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21649C1[];
extern  VTBL_ENTRY _ZTV8S21649C1[];
Class_Descriptor cd_S21649C1 = {  "S21649C1", // class name
  0,0,//no base classes
  &(vtc_S21649C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(23312,11860), // object size
  NSPAIRA(_ZTI8S21649C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21649C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11271C3  {
  ::S4846C6_nt s11271c3f0;
  short s11271c3f1;
  char s11271c3f2[2];
  ::S4846C10_nt s11271c3f3;
  ::S4846C9_nt s11271c3f4;
};
//SIG(-1 S11271C3) C1{ FC2{ FC3{ Fc[20]} Fc[16]} Fs Fc[2] FC4{ Fi Fc[128] FC5{ Fi[2] Fc[320] Fi}} FC6{ Fc[12]}}



static void Test_S11271C3()
{
  {
    init_simple_test("S11271C3");
    S11271C3 lv;
    check2(sizeof(lv), 516, "sizeof(S11271C3)");
    check2(__alignof__(lv), 4, "__alignof__(S11271C3)");
    check_field_offset(lv, s11271c3f0, 0, "S11271C3.s11271c3f0");
    check_field_offset(lv, s11271c3f1, 36, "S11271C3.s11271c3f1");
    check_field_offset(lv, s11271c3f2, 38, "S11271C3.s11271c3f2");
    check_field_offset(lv, s11271c3f3, 40, "S11271C3.s11271c3f3");
    check_field_offset(lv, s11271c3f4, 504, "S11271C3.s11271c3f4");
  }
}
static Arrange_To_Call_Me vS11271C3(Test_S11271C3, "S11271C3", 516);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11271C9_nt  {
  __tsi64 s11271c9f0[3];
  char s11271c9f1;
};
//SIG(-1 S11271C9_nt) C1{ FL[3] Fc}



//skip512 S11271C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11271C2  {
  ::S11271C3 s11271c2f0;
  char s11271c2f1;
  ::S11271C9_nt s11271c2f2;
};
//SIG(1 S11271C2) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} Fs Fc[2] FC5{ Fi Fc[128] FC6{ Fi[2] Fc[320] Fi}} FC7{ Fc[12]}} Fc FC8{ FL[3] Fc}}



static void Test_S11271C2()
{
  {
    init_simple_test("S11271C2");
    S11271C2 lv;
    check2(sizeof(lv), ABISELECT(552,548), "sizeof(S11271C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11271C2)");
    check_field_offset(lv, s11271c2f0, 0, "S11271C2.s11271c2f0");
    check_field_offset(lv, s11271c2f1, 516, "S11271C2.s11271c2f1");
    check_field_offset(lv, s11271c2f2, 520, "S11271C2.s11271c2f2");
  }
}
static Arrange_To_Call_Me vS11271C2(Test_S11271C2, "S11271C2", ABISELECT(552,548));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11271C1  {
  ::S11271C2 s11271c1f0[8];
  int s11271c1f1;
};
//SIG(1 S11271C1) C1{ FC2{ FC3{ FC4{ FC5{ Fc[20]} Fc[16]} Fs Fc[2] FC6{ Fi Fc[128] FC7{ Fi[2] Fc[320] Fi}} FC8{ Fc[12]}} Fc FC9{ FL[3] Fc}}[8] Fi}



static void Test_S11271C1()
{
  {
    init_simple_test("S11271C1");
    S11271C1 lv;
    check2(sizeof(lv), ABISELECT(4424,4388), "sizeof(S11271C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11271C1)");
    check_field_offset(lv, s11271c1f0, 0, "S11271C1.s11271c1f0");
    check_field_offset(lv, s11271c1f1, ABISELECT(4416,4384), "S11271C1.s11271c1f1");
  }
}
static Arrange_To_Call_Me vS11271C1(Test_S11271C1, "S11271C1", ABISELECT(4424,4388));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5104C3  {
  ::S2185C10_nt s5104c3f0;
  int s5104c3f1[2];
  char s5104c3f2;
  virtual  ~S5104C3(); // _ZN7S5104C3D1Ev
  virtual void  v4(); // _ZN7S5104C32v4Ev
  virtual void  v5(); // _ZN7S5104C32v5Ev
  virtual void  v6(); // _ZN7S5104C32v6Ev
  S5104C3(); // tgen
};
//SIG(-1 S5104C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5104C3 ::~S5104C3(){ note_dtor("S5104C3", this);}
void  S5104C3 ::v4(){vfunc_called(this, "_ZN7S5104C32v4Ev");}
void  S5104C3 ::v5(){vfunc_called(this, "_ZN7S5104C32v5Ev");}
void  S5104C3 ::v6(){vfunc_called(this, "_ZN7S5104C32v6Ev");}
S5104C3 ::S5104C3(){ note_ctor("S5104C3", this);} // tgen

static void Test_S5104C3()
{
  extern Class_Descriptor cd_S5104C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5104C3, buf);
    S5104C3 *dp, &lv = *(dp=new (buf) S5104C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5104C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5104C3)");
    check_field_offset(lv, s5104c3f0, ABISELECT(8,4), "S5104C3.s5104c3f0");
    check_field_offset(lv, s5104c3f1, ABISELECT(24,16), "S5104C3.s5104c3f1");
    check_field_offset(lv, s5104c3f2, ABISELECT(32,24), "S5104C3.s5104c3f2");
    test_class_info(&lv, &cd_S5104C3);
    dp->~S5104C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5104C3(Test_S5104C3, "S5104C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5104C3C1Ev();
extern void _ZN7S5104C3D1Ev();
Name_Map name_map_S5104C3[] = {
  NSPAIR(_ZN7S5104C3C1Ev),
  NSPAIR(_ZN7S5104C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5104C3[];
extern void _ZN7S5104C3D1Ev();
extern void _ZN7S5104C3D0Ev();
extern void _ZN7S5104C32v4Ev();
extern void _ZN7S5104C32v5Ev();
extern void _ZN7S5104C32v6Ev();
static  VTBL_ENTRY vtc_S5104C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5104C3[0]),
  (VTBL_ENTRY)&_ZN7S5104C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5104C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5104C3[];
extern  VTBL_ENTRY _ZTV7S5104C3[];
Class_Descriptor cd_S5104C3 = {  "S5104C3", // class name
  0,0,//no base classes
  &(vtc_S5104C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5104C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5104C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5104C2  : S5104C3 {
  void *s5104c2f0[2];
  ::S4846C6_nt s5104c2f1;
  virtual  ~S5104C2(); // _ZN7S5104C2D1Ev
  virtual void  v7(); // _ZN7S5104C22v7Ev
  virtual void  v8(); // _ZN7S5104C22v8Ev
  virtual void  v9(); // _ZN7S5104C22v9Ev
  virtual void  v10(); // _ZN7S5104C23v10Ev
  S5104C2(); // tgen
};
//SIG(-1 S5104C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] FC5{ FC6{ Fc[20]} Fc[16]}}


 S5104C2 ::~S5104C2(){ note_dtor("S5104C2", this);}
void  S5104C2 ::v7(){vfunc_called(this, "_ZN7S5104C22v7Ev");}
void  S5104C2 ::v8(){vfunc_called(this, "_ZN7S5104C22v8Ev");}
void  S5104C2 ::v9(){vfunc_called(this, "_ZN7S5104C22v9Ev");}
void  S5104C2 ::v10(){vfunc_called(this, "_ZN7S5104C23v10Ev");}
S5104C2 ::S5104C2(){ note_ctor("S5104C2", this);} // tgen

static void Test_S5104C2()
{
  extern Class_Descriptor cd_S5104C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S5104C2, buf);
    S5104C2 *dp, &lv = *(dp=new (buf) S5104C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S5104C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5104C2)");
    check_base_class_offset(lv, (S5104C3*), 0, "S5104C2");
    check_field_offset(lv, s5104c2f0, ABISELECT(40,28), "S5104C2.s5104c2f0");
    check_field_offset(lv, s5104c2f1, ABISELECT(56,36), "S5104C2.s5104c2f1");
    test_class_info(&lv, &cd_S5104C2);
    dp->~S5104C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5104C2(Test_S5104C2, "S5104C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S5104C2C1Ev();
extern void _ZN7S5104C2D1Ev();
Name_Map name_map_S5104C2[] = {
  NSPAIR(_ZN7S5104C2C1Ev),
  NSPAIR(_ZN7S5104C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5104C3;
extern VTBL_ENTRY _ZTI7S5104C3[];
extern  VTBL_ENTRY _ZTV7S5104C3[];
static Base_Class bases_S5104C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5104C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5104C2[];
extern void _ZN7S5104C2D1Ev();
extern void _ZN7S5104C2D0Ev();
extern void _ZN7S5104C32v4Ev();
extern void _ZN7S5104C32v5Ev();
extern void _ZN7S5104C32v6Ev();
extern void _ZN7S5104C22v7Ev();
extern void _ZN7S5104C22v8Ev();
extern void _ZN7S5104C22v9Ev();
extern void _ZN7S5104C23v10Ev();
static  VTBL_ENTRY vtc_S5104C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5104C2[0]),
  (VTBL_ENTRY)&_ZN7S5104C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5104C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5104C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5104C2[];
extern  VTBL_ENTRY _ZTV7S5104C2[];
Class_Descriptor cd_S5104C2 = {  "S5104C2", // class name
  bases_S5104C2, 1,
  &(vtc_S5104C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S5104C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5104C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5104C1  : S5104C2 {
  int s5104c1f0;
  virtual  ~S5104C1(); // _ZN7S5104C1D1Ev
  virtual void  v1(); // _ZN7S5104C12v1Ev
  virtual void  v2(); // _ZN7S5104C12v2Ev
  virtual void  v3(); // _ZN7S5104C12v3Ev
  S5104C1(); // tgen
};
//SIG(1 S5104C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v7 v8 v9 v10 Fp[2] FC6{ FC7{ Fc[20]} Fc[16]}} vd v1 v2 v3 Fi}


 S5104C1 ::~S5104C1(){ note_dtor("S5104C1", this);}
void  S5104C1 ::v1(){vfunc_called(this, "_ZN7S5104C12v1Ev");}
void  S5104C1 ::v2(){vfunc_called(this, "_ZN7S5104C12v2Ev");}
void  S5104C1 ::v3(){vfunc_called(this, "_ZN7S5104C12v3Ev");}
S5104C1 ::S5104C1(){ note_ctor("S5104C1", this);} // tgen

static void Test_S5104C1()
{
  extern Class_Descriptor cd_S5104C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,20)];
    init_test(&cd_S5104C1, buf);
    S5104C1 *dp, &lv = *(dp=new (buf) S5104C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S5104C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5104C1)");
    check_base_class_offset(lv, (S5104C3*)(S5104C2*), 0, "S5104C1");
    check_base_class_offset(lv, (S5104C2*), 0, "S5104C1");
    check_field_offset(lv, s5104c1f0, ABISELECT(92,72), "S5104C1.s5104c1f0");
    test_class_info(&lv, &cd_S5104C1);
    dp->~S5104C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5104C1(Test_S5104C1, "S5104C1", ABISELECT(96,76));

#else // __cplusplus

extern void _ZN7S5104C1C1Ev();
extern void _ZN7S5104C1D1Ev();
Name_Map name_map_S5104C1[] = {
  NSPAIR(_ZN7S5104C1C1Ev),
  NSPAIR(_ZN7S5104C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5104C3;
extern VTBL_ENTRY _ZTI7S5104C3[];
extern  VTBL_ENTRY _ZTV7S5104C3[];
extern Class_Descriptor cd_S5104C2;
extern VTBL_ENTRY _ZTI7S5104C2[];
extern  VTBL_ENTRY _ZTV7S5104C2[];
static Base_Class bases_S5104C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5104C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5104C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5104C1[];
extern void _ZN7S5104C1D1Ev();
extern void _ZN7S5104C1D0Ev();
extern void _ZN7S5104C32v4Ev();
extern void _ZN7S5104C32v5Ev();
extern void _ZN7S5104C32v6Ev();
extern void _ZN7S5104C22v7Ev();
extern void _ZN7S5104C22v8Ev();
extern void _ZN7S5104C22v9Ev();
extern void _ZN7S5104C23v10Ev();
extern void _ZN7S5104C12v1Ev();
extern void _ZN7S5104C12v2Ev();
extern void _ZN7S5104C12v3Ev();
static  VTBL_ENTRY vtc_S5104C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5104C1[0]),
  (VTBL_ENTRY)&_ZN7S5104C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5104C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5104C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5104C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5104C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5104C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5104C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5104C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5104C1[];
extern  VTBL_ENTRY _ZTV7S5104C1[];
Class_Descriptor cd_S5104C1 = {  "S5104C1", // class name
  bases_S5104C1, 2,
  &(vtc_S5104C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,76), // object size
  NSPAIRA(_ZTI7S5104C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5104C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16089C1  {
  ::S3350C8_nt s16089c1f0;
  ::S4846C6_nt s16089c1f1;
  ::S4846C8 s16089c1f2;
  int s16089c1f3;
  void  mf16089c1(); // _ZN8S16089C19mf16089c1Ev
};
//SIG(1 S16089C1) C1{ m FC2{ m Fi} FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fi FC6{ Fc[12]} Fc[48] FC6 FC6 FC7{ Fi Fc[128] FC8{ Fi[2] Fc[320] Fi}}} Fi}


void  S16089C1 ::mf16089c1(){}

static void Test_S16089C1()
{
  {
    init_simple_test("S16089C1");
    S16089C1 lv;
    check2(sizeof(lv), 596, "sizeof(S16089C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16089C1)");
    check_field_offset(lv, s16089c1f0, 0, "S16089C1.s16089c1f0");
    check_field_offset(lv, s16089c1f1, 4, "S16089C1.s16089c1f1");
    check_field_offset(lv, s16089c1f2, 40, "S16089C1.s16089c1f2");
    check_field_offset(lv, s16089c1f3, 592, "S16089C1.s16089c1f3");
  }
}
static Arrange_To_Call_Me vS16089C1(Test_S16089C1, "S16089C1", 596);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3772C2  : S6282C14_nt {
  int s3772c2f0[6];
  char s3772c2f1[2];
  virtual  ~S3772C2(); // _ZN7S3772C2D1Ev
  S3772C2(); // tgen
};
//SIG(-1 S3772C2) C1{ BC2{ vd m Fi} vd Fi[6] Fc[2]}


 S3772C2 ::~S3772C2(){ note_dtor("S3772C2", this);}
S3772C2 ::S3772C2(){ note_ctor("S3772C2", this);} // tgen

static void Test_S3772C2()
{
  extern Class_Descriptor cd_S3772C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S3772C2, buf);
    S3772C2 *dp, &lv = *(dp=new (buf) S3772C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S3772C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3772C2)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S3772C2");
    check_field_offset(lv, s3772c2f0, ABISELECT(12,8), "S3772C2.s3772c2f0");
    check_field_offset(lv, s3772c2f1, ABISELECT(36,32), "S3772C2.s3772c2f1");
    test_class_info(&lv, &cd_S3772C2);
    dp->~S3772C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3772C2(Test_S3772C2, "S3772C2", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN7S3772C2C1Ev();
extern void _ZN7S3772C2D1Ev();
Name_Map name_map_S3772C2[] = {
  NSPAIR(_ZN7S3772C2C1Ev),
  NSPAIR(_ZN7S3772C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S3772C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3772C2[];
extern void _ZN7S3772C2D1Ev();
extern void _ZN7S3772C2D0Ev();
static  VTBL_ENTRY vtc_S3772C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3772C2[0]),
  (VTBL_ENTRY)&_ZN7S3772C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3772C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3772C2[];
extern  VTBL_ENTRY _ZTV7S3772C2[];
Class_Descriptor cd_S3772C2 = {  "S3772C2", // class name
  bases_S3772C2, 1,
  &(vtc_S3772C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI7S3772C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3772C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3772C1  : S3772C2 {
  int s3772c1f0[5];
  char s3772c1f1[5];
  int s3772c1f2[5];
  ::S21535C5 s3772c1f3;
  virtual  ~S3772C1(); // _ZN7S3772C1D1Ev
  S3772C1(); // tgen
};
//SIG(1 S3772C1) C1{ BC2{ BC3{ vd m Fi} vd Fi[6] Fc[2]} vd Fi[5] Fc[5] Fi[5] FC4{ vd m FC5{ m Fp Fi FC6{ m}} FC7{ m Fp Fi FC8{ m} FC9{ m}}}}


 S3772C1 ::~S3772C1(){ note_dtor("S3772C1", this);}
S3772C1 ::S3772C1(){ note_ctor("S3772C1", this);} // tgen

static void Test_S3772C1()
{
  extern Class_Descriptor cd_S3772C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,29)];
    init_test(&cd_S3772C1, buf);
    S3772C1 *dp, &lv = *(dp=new (buf) S3772C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,112), "sizeof(S3772C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3772C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S3772C2*), 0, "S3772C1");
    check_base_class_offset(lv, (S3772C2*), 0, "S3772C1");
    check_field_offset(lv, s3772c1f0, ABISELECT(40,36), "S3772C1.s3772c1f0");
    check_field_offset(lv, s3772c1f1, ABISELECT(60,56), "S3772C1.s3772c1f1");
    check_field_offset(lv, s3772c1f2, ABISELECT(68,64), "S3772C1.s3772c1f2");
    check_field_offset(lv, s3772c1f3, ABISELECT(88,84), "S3772C1.s3772c1f3");
    test_class_info(&lv, &cd_S3772C1);
    dp->~S3772C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3772C1(Test_S3772C1, "S3772C1", ABISELECT(128,112));

#else // __cplusplus

extern void _ZN7S3772C1C1Ev();
extern void _ZN7S3772C1D1Ev();
Name_Map name_map_S3772C1[] = {
  NSPAIR(_ZN7S3772C1C1Ev),
  NSPAIR(_ZN7S3772C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S3772C2;
extern VTBL_ENTRY _ZTI7S3772C2[];
extern  VTBL_ENTRY _ZTV7S3772C2[];
static Base_Class bases_S3772C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3772C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3772C1[];
extern void _ZN7S3772C1D1Ev();
extern void _ZN7S3772C1D0Ev();
static  VTBL_ENTRY vtc_S3772C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3772C1[0]),
  (VTBL_ENTRY)&_ZN7S3772C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3772C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3772C1[];
extern  VTBL_ENTRY _ZTV7S3772C1[];
Class_Descriptor cd_S3772C1 = {  "S3772C1", // class name
  bases_S3772C1, 2,
  &(vtc_S3772C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,112), // object size
  NSPAIRA(_ZTI7S3772C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3772C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3563C5  {
  virtual  ~S3563C5(); // _ZN7S3563C5D1Ev
  virtual void  v4(); // _ZN7S3563C52v4Ev
  virtual void  v5(); // _ZN7S3563C52v5Ev
  virtual void  v6(); // _ZN7S3563C52v6Ev
  virtual void  v7(); // _ZN7S3563C52v7Ev
  virtual void  v8(); // _ZN7S3563C52v8Ev
  S3563C5(); // tgen
};
//SIG(-1 S3563C5) C1{ vd v1 v2 v3 v4 v5}


 S3563C5 ::~S3563C5(){ note_dtor("S3563C5", this);}
void  S3563C5 ::v4(){vfunc_called(this, "_ZN7S3563C52v4Ev");}
void  S3563C5 ::v5(){vfunc_called(this, "_ZN7S3563C52v5Ev");}
void  S3563C5 ::v6(){vfunc_called(this, "_ZN7S3563C52v6Ev");}
void  S3563C5 ::v7(){vfunc_called(this, "_ZN7S3563C52v7Ev");}
void  S3563C5 ::v8(){vfunc_called(this, "_ZN7S3563C52v8Ev");}
S3563C5 ::S3563C5(){ note_ctor("S3563C5", this);} // tgen

static void Test_S3563C5()
{
  extern Class_Descriptor cd_S3563C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3563C5, buf);
    S3563C5 *dp, &lv = *(dp=new (buf) S3563C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3563C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C5)");
    test_class_info(&lv, &cd_S3563C5);
    dp->~S3563C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C5(Test_S3563C5, "S3563C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3563C5C1Ev();
extern void _ZN7S3563C5D1Ev();
Name_Map name_map_S3563C5[] = {
  NSPAIR(_ZN7S3563C5C1Ev),
  NSPAIR(_ZN7S3563C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3563C5[];
extern void _ZN7S3563C5D1Ev();
extern void _ZN7S3563C5D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
static  VTBL_ENTRY vtc_S3563C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C5[0]),
  (VTBL_ENTRY)&_ZN7S3563C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
Class_Descriptor cd_S3563C5 = {  "S3563C5", // class name
  0,0,//no base classes
  &(vtc_S3563C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3563C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3563C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3563C4  : virtual S3563C5 {
  void *s3563c4f0;
  ::S3563C5 s3563c4f1;
  void *s3563c4f2;
  virtual  ~S3563C4(); // _ZN7S3563C4D2Ev
  virtual void  v9(); // _ZN7S3563C42v9Ev
  virtual void  v10(); // _ZN7S3563C43v10Ev
  virtual void  v11(); // _ZN7S3563C43v11Ev
  S3563C4(); // tgen
};
//SIG(-1 S3563C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S3563C4 ::~S3563C4(){ note_dtor("S3563C4", this);}
void  S3563C4 ::v9(){vfunc_called(this, "_ZN7S3563C42v9Ev");}
void  S3563C4 ::v10(){vfunc_called(this, "_ZN7S3563C43v10Ev");}
void  S3563C4 ::v11(){vfunc_called(this, "_ZN7S3563C43v11Ev");}
S3563C4 ::S3563C4(){ note_ctor("S3563C4", this);} // tgen

static void Test_S3563C4()
{
  extern Class_Descriptor cd_S3563C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3563C4, buf);
    S3563C4 *dp, &lv = *(dp=new (buf) S3563C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3563C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C4)");
    check_base_class_offset(lv, (S3563C5*), 0, "S3563C4");
    check_field_offset(lv, s3563c4f0, ABISELECT(8,4), "S3563C4.s3563c4f0");
    check_field_offset(lv, s3563c4f1, ABISELECT(16,8), "S3563C4.s3563c4f1");
    check_field_offset(lv, s3563c4f2, ABISELECT(24,12), "S3563C4.s3563c4f2");
    test_class_info(&lv, &cd_S3563C4);
    dp->~S3563C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C4(Test_S3563C4, "S3563C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3563C4C1Ev();
extern void _ZN7S3563C4D2Ev();
Name_Map name_map_S3563C4[] = {
  NSPAIR(_ZN7S3563C4C1Ev),
  NSPAIR(_ZN7S3563C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3563C5;
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
static Base_Class bases_S3563C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3563C4[];
extern void _ZN7S3563C4D1Ev();
extern void _ZN7S3563C4D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY vtc_S3563C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&_ZN7S3563C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3563C4[];
static  VTT_ENTRY vtt_S3563C4[] = {
  {&(_ZTV7S3563C4[9]),  9,19},
  {&(_ZTV7S3563C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S3563C4[];
extern  VTBL_ENTRY _ZTV7S3563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C4[];
Class_Descriptor cd_S3563C4 = {  "S3563C4", // class name
  bases_S3563C4, 1,
  &(vtc_S3563C4[0]), // expected_vtbl_contents
  &(vtt_S3563C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3563C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3563C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3563C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3563C3  : virtual S3563C4 {
  virtual  ~S3563C3(); // _ZN7S3563C3D2Ev
  virtual void  v12(); // _ZN7S3563C33v12Ev
  S3563C3(); // tgen
};
//SIG(-1 S3563C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S3563C3 ::~S3563C3(){ note_dtor("S3563C3", this);}
void  S3563C3 ::v12(){vfunc_called(this, "_ZN7S3563C33v12Ev");}
S3563C3 ::S3563C3(){ note_ctor("S3563C3", this);} // tgen

static void Test_S3563C3()
{
  extern Class_Descriptor cd_S3563C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3563C3, buf);
    S3563C3 *dp, &lv = *(dp=new (buf) S3563C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3563C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C3)");
    check_base_class_offset(lv, (S3563C5*)(S3563C4*), 0, "S3563C3");
    check_base_class_offset(lv, (S3563C4*), ABISELECT(8,4), "S3563C3");
    test_class_info(&lv, &cd_S3563C3);
    dp->~S3563C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C3(Test_S3563C3, "S3563C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3563C3C1Ev();
extern void _ZN7S3563C3D2Ev();
Name_Map name_map_S3563C3[] = {
  NSPAIR(_ZN7S3563C3C1Ev),
  NSPAIR(_ZN7S3563C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3563C5;
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
extern Class_Descriptor cd_S3563C4;
extern VTBL_ENTRY _ZTI7S3563C4[];
extern  VTBL_ENTRY _ZTV7S3563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C4[];
static Base_Class bases_S3563C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3563C4,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3563C3[];
extern void _ZN7S3563C3D1Ev();
extern void _ZN7S3563C3D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
extern void ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3563C3D1Ev,_ZThn4_N7S3563C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3563C3D0Ev,_ZThn4_N7S3563C3D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY vtc_S3563C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&_ZN7S3563C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3563C3[];
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void _ZN7S3563C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C4D0Ev() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C5__7S3563C4__7S3563C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
};
static  VTT_ENTRY vtt_S3563C3[] = {
  {&(_ZTV7S3563C3[10]),  10,40},
  {&(_ZTV7S3563C3[30]),  30,40},
  {&(_ZTV7S3563C3[10]),  10,40},
  {&(_tg__ZTV7S3563C4__7S3563C3[9]),  9,19},
  {&(_tg__ZTV7S3563C5__7S3563C4__7S3563C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3563C3[];
extern  VTBL_ENTRY _ZTV7S3563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C3[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C3D0Ev,_ZThn4_N7S3563C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C3D1Ev,_ZThn4_N7S3563C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3563C3 = {  "S3563C3", // class name
  bases_S3563C3, 2,
  &(vtc_S3563C3[0]), // expected_vtbl_contents
  &(vtt_S3563C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3563C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3563C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3563C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3563C2  : S3563C3 {
  virtual void  v13(); // _ZN7S3563C23v13Ev
  ~S3563C2(); // tgen
  S3563C2(); // tgen
};
//SIG(-1 S3563C2) C1{ BC2{ VBC3{ VBC4{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC4 Fp} vd v10} v1}


void  S3563C2 ::v13(){vfunc_called(this, "_ZN7S3563C23v13Ev");}
S3563C2 ::~S3563C2(){ note_dtor("S3563C2", this);} // tgen
S3563C2 ::S3563C2(){ note_ctor("S3563C2", this);} // tgen

static void Test_S3563C2()
{
  extern Class_Descriptor cd_S3563C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3563C2, buf);
    S3563C2 *dp, &lv = *(dp=new (buf) S3563C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3563C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C2)");
    check_base_class_offset(lv, (S3563C5*)(S3563C4*), 0, "S3563C2");
    check_base_class_offset(lv, (S3563C4*)(S3563C3*), ABISELECT(8,4), "S3563C2");
    check_base_class_offset(lv, (S3563C3*), 0, "S3563C2");
    test_class_info(&lv, &cd_S3563C2);
    dp->~S3563C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C2(Test_S3563C2, "S3563C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3563C2C1Ev();
extern void _ZN7S3563C2D1Ev();
Name_Map name_map_S3563C2[] = {
  NSPAIR(_ZN7S3563C2C1Ev),
  NSPAIR(_ZN7S3563C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3563C5;
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
extern Class_Descriptor cd_S3563C4;
extern VTBL_ENTRY _ZTI7S3563C4[];
extern  VTBL_ENTRY _ZTV7S3563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C4[];
extern Class_Descriptor cd_S3563C3;
extern VTBL_ENTRY _ZTI7S3563C3[];
extern  VTBL_ENTRY _ZTV7S3563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C3[];
static Base_Class bases_S3563C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3563C4,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3563C2[];
extern void _ZN7S3563C2D1Ev();
extern void _ZN7S3563C2D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
extern void _ZN7S3563C23v13Ev();
extern void ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3563C2D1Ev,_ZThn4_N7S3563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S3563C2D0Ev,_ZThn4_N7S3563C2D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY vtc_S3563C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C2[0]),
  (VTBL_ENTRY)&_ZN7S3563C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3563C23v13Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3563C2[];
extern void _ZN7S3563C3D1Ev();
extern void _ZN7S3563C3D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C3__7S3563C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&_ZN7S3563C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3563C3D1Ev,_ZThn4_N7S3563C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3563C3D0Ev,_ZThn4_N7S3563C3D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C3__7S3563C2[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void _ZN7S3563C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C4D0Ev() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C5__7S3563C4__7S3563C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
};
static  VTT_ENTRY vtt_S3563C2[] = {
  {&(_ZTV7S3563C2[10]),  10,41},
  {&(_tg__ZTV7S3563C3__7S3563C2[10]),  10,18},
  {&(_tg__ZTV7S3563C4__7S3563C3__7S3563C2[12]),  12,22},
  {&(_tg__ZTV7S3563C3__7S3563C2[10]),  10,18},
  {&(_ZTV7S3563C2[31]),  31,41},
  {&(_ZTV7S3563C2[10]),  10,41},
  {&(_tg__ZTV7S3563C4__7S3563C2[9]),  9,19},
  {&(_tg__ZTV7S3563C5__7S3563C4__7S3563C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3563C2[];
extern  VTBL_ENTRY _ZTV7S3563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C2[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C3D0Ev,_ZThn4_N7S3563C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C3D1Ev,_ZThn4_N7S3563C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C2D0Ev,_ZThn4_N7S3563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3563C2D1Ev,_ZThn4_N7S3563C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3563C2 = {  "S3563C2", // class name
  bases_S3563C2, 3,
  &(vtc_S3563C2[0]), // expected_vtbl_contents
  &(vtt_S3563C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3563C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3563C2),41, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3563C2),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3563C1  : S3563C2 {
  ::S19580C7 s3563c1f0[9];
  virtual  ~S3563C1(); // _ZN7S3563C1D2Ev
  virtual void  v1(); // _ZN7S3563C12v1Ev
  virtual void  v2(); // _ZN7S3563C12v2Ev
  virtual void  v3(); // _ZN7S3563C12v3Ev
  S3563C1(); // tgen
};
//SIG(1 S3563C1) C1{ BC2{ BC3{ VBC4{ VBC5{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC5 Fp} vd v12} v13} vd v1 v2 v3 FC6{ BC7{ VBC8{ vd v15 v16 v17 v18 v19} vd v20 v21 v22 Fp FC8 Fp} v14 FC7[6]}[9]}


 S3563C1 ::~S3563C1(){ note_dtor("S3563C1", this);}
void  S3563C1 ::v1(){vfunc_called(this, "_ZN7S3563C12v1Ev");}
void  S3563C1 ::v2(){vfunc_called(this, "_ZN7S3563C12v2Ev");}
void  S3563C1 ::v3(){vfunc_called(this, "_ZN7S3563C12v3Ev");}
S3563C1 ::S3563C1(){ note_ctor("S3563C1", this);} // tgen

static void Test_S3563C1()
{
  extern Class_Descriptor cd_S3563C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[258];
    init_test(&cd_S3563C1, buf);
    S3563C1 *dp, &lv = *(dp=new (buf) S3563C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2056,1028), "sizeof(S3563C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3563C1)");
    check_base_class_offset(lv, (S3563C5*)(S3563C4*), 0, "S3563C1");
    check_base_class_offset(lv, (S3563C4*)(S3563C3*)(S3563C2*), ABISELECT(2024,1012), "S3563C1");
    check_base_class_offset(lv, (S3563C3*)(S3563C2*), 0, "S3563C1");
    check_base_class_offset(lv, (S3563C2*), 0, "S3563C1");
    check_field_offset(lv, s3563c1f0, ABISELECT(8,4), "S3563C1.s3563c1f0");
    test_class_info(&lv, &cd_S3563C1);
    dp->~S3563C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3563C1(Test_S3563C1, "S3563C1", ABISELECT(2056,1028));

#else // __cplusplus

extern void _ZN7S3563C1C1Ev();
extern void _ZN7S3563C1D2Ev();
Name_Map name_map_S3563C1[] = {
  NSPAIR(_ZN7S3563C1C1Ev),
  NSPAIR(_ZN7S3563C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3563C5;
extern VTBL_ENTRY _ZTI7S3563C5[];
extern  VTBL_ENTRY _ZTV7S3563C5[];
extern Class_Descriptor cd_S3563C4;
extern VTBL_ENTRY _ZTI7S3563C4[];
extern  VTBL_ENTRY _ZTV7S3563C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C4[];
extern Class_Descriptor cd_S3563C3;
extern VTBL_ENTRY _ZTI7S3563C3[];
extern  VTBL_ENTRY _ZTV7S3563C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C3[];
extern Class_Descriptor cd_S3563C2;
extern VTBL_ENTRY _ZTI7S3563C2[];
extern  VTBL_ENTRY _ZTV7S3563C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C2[];
static Base_Class bases_S3563C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3563C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3563C4,    ABISELECT(2024,1012), //bcp->offset
    22, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3563C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3563C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3563C1[];
extern void _ZN7S3563C1D1Ev();
extern void _ZN7S3563C1D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
extern void _ZN7S3563C23v13Ev();
extern void _ZN7S3563C12v1Ev();
extern void _ZN7S3563C12v2Ev();
extern void _ZN7S3563C12v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S3563C1D1Ev,_ZTv0_n12_N7S3563C1D1Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C1D1Ev,_ZThn1012_N7S3563C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C1D0Ev,_ZTv0_n12_N7S3563C1D0Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C1D0Ev,_ZThn1012_N7S3563C1D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY vtc_S3563C1[] = {
  0,
  ABISELECT(2024,1012),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C1[0]),
  (VTBL_ENTRY)&_ZN7S3563C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3563C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3563C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3563C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3563C12v3Ev,
  0,
  0,
  0,
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  (VTBL_ENTRY)&(_ZTI7S3563C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C1D1Ev,_ZTv0_n12_N7S3563C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C1D0Ev,_ZTv0_n12_N7S3563C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern VTBL_ENTRY _ZTV7S3563C1[];
extern void _ZN7S3563C2D1Ev();
extern void _ZN7S3563C2D0Ev();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
extern void _ZN7S3563C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C2__7S3563C1[] = {
  0,
  ABISELECT(2024,1012),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C2[0]),
  (VTBL_ENTRY)&_ZN7S3563C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3563C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3563C23v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev)();
extern void _ZN7S3563C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev)();
extern void _ZN7S3563C3D0Ev() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C37S3563C2__7S3563C1[] = {
  0,
  ABISELECT(2024,1012),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C33v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C3D1Ev,_ZThn1012_N7S3563C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C3D0Ev,_ZThn1012_N7S3563C3D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C37S3563C2__7S3563C1[] = {
  0,
  0,
  0,
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  (VTBL_ENTRY)&(_ZTI7S3563C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C2D1Ev,_ZThn1012_N7S3563C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev)();
extern void ABISELECT(_ZThn2024_N7S3563C2D0Ev,_ZThn1012_N7S3563C2D0Ev)() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C2__7S3563C1[] = {
  0,
  0,
  0,
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  (VTBL_ENTRY)&(_ZTI7S3563C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void _ZN7S3563C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C4D0Ev() __attribute__((weak));
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
extern void _ZN7S3563C42v9Ev();
extern void _ZN7S3563C43v10Ev();
extern void _ZN7S3563C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C4__7S3563C1[] = {
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  ABISELECT(-2024,-1012),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3563C42v9Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v10Ev,
  (VTBL_ENTRY)&_ZN7S3563C43v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev)();
extern void _ZN7S3563C52v4Ev();
extern void _ZN7S3563C52v5Ev();
extern void _ZN7S3563C52v6Ev();
extern void _ZN7S3563C52v7Ev();
extern void _ZN7S3563C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3563C5__7S3563C4__7S3563C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(2024,1012),
  ABISELECT(2024,1012),
  (VTBL_ENTRY)&(_ZTI7S3563C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3563C52v4Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v5Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3563C52v8Ev,
};
static  VTT_ENTRY vtt_S3563C1[] = {
  {&(_ZTV7S3563C1[10]),  10,44},
  {&(_tg__ZTV7S3563C2__7S3563C1[10]),  10,19},
  {&(_tg__ZTV7S3563C37S3563C2__7S3563C1[10]),  10,18},
  {&(_tg__ZTV7S3563C4__7S3563C37S3563C2__7S3563C1[12]),  12,22},
  {&(_tg__ZTV7S3563C37S3563C2__7S3563C1[10]),  10,18},
  {&(_tg__ZTV7S3563C4__7S3563C2__7S3563C1[12]),  12,22},
  {&(_tg__ZTV7S3563C2__7S3563C1[10]),  10,19},
  {&(_ZTV7S3563C1[34]),  34,44},
  {&(_ZTV7S3563C1[10]),  10,44},
  {&(_tg__ZTV7S3563C4__7S3563C1[9]),  9,19},
  {&(_tg__ZTV7S3563C5__7S3563C4__7S3563C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3563C1[];
extern  VTBL_ENTRY _ZTV7S3563C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3563C1[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D0Ev,_ZTv0_n12_N7S3563C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C4D1Ev,_ZTv0_n12_N7S3563C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3563C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C2D0Ev,_ZTv0_n12_N7S3563C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C2D0Ev,_ZThn1012_N7S3563C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C2D1Ev,_ZTv0_n12_N7S3563C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C2D1Ev,_ZThn1012_N7S3563C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D0Ev,_ZTv0_n12_N7S3563C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C3D0Ev,_ZThn1012_N7S3563C3D0Ev),
  (VTBL_ENTRY)_ZN7S3563C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C3D1Ev,_ZTv0_n12_N7S3563C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C3D1Ev,_ZThn1012_N7S3563C3D1Ev),
  (VTBL_ENTRY)_ZN7S3563C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C1D0Ev,_ZTv0_n12_N7S3563C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C1D0Ev,_ZThn1012_N7S3563C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3563C1D1Ev,_ZTv0_n12_N7S3563C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2024_N7S3563C1D1Ev,_ZThn1012_N7S3563C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3563C1 = {  "S3563C1", // class name
  bases_S3563C1, 4,
  &(vtc_S3563C1[0]), // expected_vtbl_contents
  &(vtt_S3563C1[0]), // expected_vtt_contents
  ABISELECT(2056,1028), // object size
  NSPAIRA(_ZTI7S3563C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3563C1),44, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3563C1),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7128C2  {
  virtual void  v7(); // _ZN7S7128C22v7Ev
  ~S7128C2(); // tgen
  S7128C2(); // tgen
};
//SIG(-1 S7128C2) C1{ v1}


void  S7128C2 ::v7(){vfunc_called(this, "_ZN7S7128C22v7Ev");}
S7128C2 ::~S7128C2(){ note_dtor("S7128C2", this);} // tgen
S7128C2 ::S7128C2(){ note_ctor("S7128C2", this);} // tgen

static void Test_S7128C2()
{
  extern Class_Descriptor cd_S7128C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7128C2, buf);
    S7128C2 *dp, &lv = *(dp=new (buf) S7128C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7128C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C2)");
    test_class_info(&lv, &cd_S7128C2);
    dp->~S7128C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C2(Test_S7128C2, "S7128C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7128C2C1Ev();
extern void _ZN7S7128C2D1Ev();
Name_Map name_map_S7128C2[] = {
  NSPAIR(_ZN7S7128C2C1Ev),
  NSPAIR(_ZN7S7128C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7128C2[];
extern void _ZN7S7128C22v7Ev();
static  VTBL_ENTRY vtc_S7128C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C2[0]),
  (VTBL_ENTRY)&_ZN7S7128C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S7128C2[];
extern  VTBL_ENTRY _ZTV7S7128C2[];
Class_Descriptor cd_S7128C2 = {  "S7128C2", // class name
  0,0,//no base classes
  &(vtc_S7128C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7128C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7128C2),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7128C5  {
  virtual  ~S7128C5(); // _ZN7S7128C5D1Ev
  virtual void  v8(); // _ZN7S7128C52v8Ev
  virtual void  v9(); // _ZN7S7128C52v9Ev
  virtual void  v10(); // _ZN7S7128C53v10Ev
  virtual void  v11(); // _ZN7S7128C53v11Ev
  virtual void  v12(); // _ZN7S7128C53v12Ev
  S7128C5(); // tgen
};
//SIG(-1 S7128C5) C1{ vd v1 v2 v3 v4 v5}


 S7128C5 ::~S7128C5(){ note_dtor("S7128C5", this);}
void  S7128C5 ::v8(){vfunc_called(this, "_ZN7S7128C52v8Ev");}
void  S7128C5 ::v9(){vfunc_called(this, "_ZN7S7128C52v9Ev");}
void  S7128C5 ::v10(){vfunc_called(this, "_ZN7S7128C53v10Ev");}
void  S7128C5 ::v11(){vfunc_called(this, "_ZN7S7128C53v11Ev");}
void  S7128C5 ::v12(){vfunc_called(this, "_ZN7S7128C53v12Ev");}
S7128C5 ::S7128C5(){ note_ctor("S7128C5", this);} // tgen

static void Test_S7128C5()
{
  extern Class_Descriptor cd_S7128C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7128C5, buf);
    S7128C5 *dp, &lv = *(dp=new (buf) S7128C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7128C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C5)");
    test_class_info(&lv, &cd_S7128C5);
    dp->~S7128C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C5(Test_S7128C5, "S7128C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7128C5C1Ev();
extern void _ZN7S7128C5D1Ev();
Name_Map name_map_S7128C5[] = {
  NSPAIR(_ZN7S7128C5C1Ev),
  NSPAIR(_ZN7S7128C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7128C5[];
extern void _ZN7S7128C5D1Ev();
extern void _ZN7S7128C5D0Ev();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
static  VTBL_ENTRY vtc_S7128C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C5[0]),
  (VTBL_ENTRY)&_ZN7S7128C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7128C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S7128C5[];
extern  VTBL_ENTRY _ZTV7S7128C5[];
Class_Descriptor cd_S7128C5 = {  "S7128C5", // class name
  0,0,//no base classes
  &(vtc_S7128C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7128C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7128C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7128C4  : virtual S7128C5 {
  void *s7128c4f0;
  ::S7128C5 s7128c4f1;
  void *s7128c4f2;
  virtual  ~S7128C4(); // _ZN7S7128C4D2Ev
  virtual void  v13(); // _ZN7S7128C43v13Ev
  virtual void  v14(); // _ZN7S7128C43v14Ev
  virtual void  v15(); // _ZN7S7128C43v15Ev
  S7128C4(); // tgen
};
//SIG(-1 S7128C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S7128C4 ::~S7128C4(){ note_dtor("S7128C4", this);}
void  S7128C4 ::v13(){vfunc_called(this, "_ZN7S7128C43v13Ev");}
void  S7128C4 ::v14(){vfunc_called(this, "_ZN7S7128C43v14Ev");}
void  S7128C4 ::v15(){vfunc_called(this, "_ZN7S7128C43v15Ev");}
S7128C4 ::S7128C4(){ note_ctor("S7128C4", this);} // tgen

static void Test_S7128C4()
{
  extern Class_Descriptor cd_S7128C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7128C4, buf);
    S7128C4 *dp, &lv = *(dp=new (buf) S7128C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7128C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C4)");
    check_base_class_offset(lv, (S7128C5*), 0, "S7128C4");
    check_field_offset(lv, s7128c4f0, ABISELECT(8,4), "S7128C4.s7128c4f0");
    check_field_offset(lv, s7128c4f1, ABISELECT(16,8), "S7128C4.s7128c4f1");
    check_field_offset(lv, s7128c4f2, ABISELECT(24,12), "S7128C4.s7128c4f2");
    test_class_info(&lv, &cd_S7128C4);
    dp->~S7128C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C4(Test_S7128C4, "S7128C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7128C4C1Ev();
extern void _ZN7S7128C4D2Ev();
Name_Map name_map_S7128C4[] = {
  NSPAIR(_ZN7S7128C4C1Ev),
  NSPAIR(_ZN7S7128C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7128C5;
extern VTBL_ENTRY _ZTI7S7128C5[];
extern  VTBL_ENTRY _ZTV7S7128C5[];
static Base_Class bases_S7128C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7128C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7128C4[];
extern void _ZN7S7128C4D1Ev();
extern void _ZN7S7128C4D0Ev();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY vtc_S7128C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&_ZN7S7128C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7128C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7128C4[];
static  VTT_ENTRY vtt_S7128C4[] = {
  {&(_ZTV7S7128C4[9]),  9,19},
  {&(_ZTV7S7128C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S7128C4[];
extern  VTBL_ENTRY _ZTV7S7128C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C4[];
Class_Descriptor cd_S7128C4 = {  "S7128C4", // class name
  bases_S7128C4, 1,
  &(vtc_S7128C4[0]), // expected_vtbl_contents
  &(vtt_S7128C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7128C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7128C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7128C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7128C3  : virtual S7128C4 {
  virtual  ~S7128C3(); // _ZN7S7128C3D2Ev
  virtual void  v16(); // _ZN7S7128C33v16Ev
  S7128C3(); // tgen
};
//SIG(-1 S7128C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S7128C3 ::~S7128C3(){ note_dtor("S7128C3", this);}
void  S7128C3 ::v16(){vfunc_called(this, "_ZN7S7128C33v16Ev");}
S7128C3 ::S7128C3(){ note_ctor("S7128C3", this);} // tgen

static void Test_S7128C3()
{
  extern Class_Descriptor cd_S7128C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7128C3, buf);
    S7128C3 *dp, &lv = *(dp=new (buf) S7128C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7128C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C3)");
    check_base_class_offset(lv, (S7128C5*)(S7128C4*), 0, "S7128C3");
    check_base_class_offset(lv, (S7128C4*), ABISELECT(8,4), "S7128C3");
    test_class_info(&lv, &cd_S7128C3);
    dp->~S7128C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C3(Test_S7128C3, "S7128C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7128C3C1Ev();
extern void _ZN7S7128C3D2Ev();
Name_Map name_map_S7128C3[] = {
  NSPAIR(_ZN7S7128C3C1Ev),
  NSPAIR(_ZN7S7128C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7128C5;
extern VTBL_ENTRY _ZTI7S7128C5[];
extern  VTBL_ENTRY _ZTV7S7128C5[];
extern Class_Descriptor cd_S7128C4;
extern VTBL_ENTRY _ZTI7S7128C4[];
extern  VTBL_ENTRY _ZTV7S7128C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C4[];
static Base_Class bases_S7128C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7128C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7128C4,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7128C3[];
extern void _ZN7S7128C3D1Ev();
extern void _ZN7S7128C3D0Ev();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S7128C3D1Ev,_ZThn4_N7S7128C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S7128C3D0Ev,_ZThn4_N7S7128C3D0Ev)() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY vtc_S7128C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C3[0]),
  (VTBL_ENTRY)&_ZN7S7128C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7128C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C33v16Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7128C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7128C3[];
extern void ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev)();
extern void _ZN7S7128C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev)();
extern void _ZN7S7128C4D0Ev() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C4__7S7128C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev)();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C5__7S7128C4__7S7128C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
};
static  VTT_ENTRY vtt_S7128C3[] = {
  {&(_ZTV7S7128C3[10]),  10,40},
  {&(_ZTV7S7128C3[30]),  30,40},
  {&(_ZTV7S7128C3[10]),  10,40},
  {&(_tg__ZTV7S7128C4__7S7128C3[9]),  9,19},
  {&(_tg__ZTV7S7128C5__7S7128C4__7S7128C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7128C3[];
extern  VTBL_ENTRY _ZTV7S7128C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C3[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7128C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7128C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7128C3D0Ev,_ZThn4_N7S7128C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7128C3D1Ev,_ZThn4_N7S7128C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7128C3 = {  "S7128C3", // class name
  bases_S7128C3, 2,
  &(vtc_S7128C3[0]), // expected_vtbl_contents
  &(vtt_S7128C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7128C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7128C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7128C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7128C1  : S7128C2 , virtual S7128C3 {
  int s7128c1f0;
  char s7128c1f1;
  int s7128c1f2;
  virtual  ~S7128C1(); // _ZN7S7128C1D2Ev
  virtual void  v1(); // _ZN7S7128C12v1Ev
  virtual void  v2(); // _ZN7S7128C12v2Ev
  virtual void  v3(); // _ZN7S7128C12v3Ev
  virtual void  v4(); // _ZN7S7128C12v4Ev
  virtual void  v5(); // _ZN7S7128C12v5Ev
  virtual void  v6(); // _ZN7S7128C12v6Ev
  S7128C1(); // tgen
};
//SIG(1 S7128C1) C1{ BC2{ v7} VBC3{ VBC4{ VBC5{ vd v8 v9 v10 v11 v12} vd v13 v14 v15 Fp FC5 Fp} vd v16} vd v1 v2 v3 v4 v5 v6 Fi Fc Fi}


 S7128C1 ::~S7128C1(){ note_dtor("S7128C1", this);}
void  S7128C1 ::v1(){vfunc_called(this, "_ZN7S7128C12v1Ev");}
void  S7128C1 ::v2(){vfunc_called(this, "_ZN7S7128C12v2Ev");}
void  S7128C1 ::v3(){vfunc_called(this, "_ZN7S7128C12v3Ev");}
void  S7128C1 ::v4(){vfunc_called(this, "_ZN7S7128C12v4Ev");}
void  S7128C1 ::v5(){vfunc_called(this, "_ZN7S7128C12v5Ev");}
void  S7128C1 ::v6(){vfunc_called(this, "_ZN7S7128C12v6Ev");}
S7128C1 ::S7128C1(){ note_ctor("S7128C1", this);} // tgen

static void Test_S7128C1()
{
  extern Class_Descriptor cd_S7128C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S7128C1, buf);
    S7128C1 *dp, &lv = *(dp=new (buf) S7128C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S7128C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7128C1)");
    check_base_class_offset(lv, (S7128C2*), 0, "S7128C1");
    check_base_class_offset(lv, (S7128C5*)(S7128C4*), ABISELECT(24,16), "S7128C1");
    check_base_class_offset(lv, (S7128C4*)(S7128C3*), ABISELECT(32,20), "S7128C1");
    check_base_class_offset(lv, (S7128C3*), ABISELECT(24,16), "S7128C1");
    check_field_offset(lv, s7128c1f0, ABISELECT(8,4), "S7128C1.s7128c1f0");
    check_field_offset(lv, s7128c1f1, ABISELECT(12,8), "S7128C1.s7128c1f1");
    check_field_offset(lv, s7128c1f2, ABISELECT(16,12), "S7128C1.s7128c1f2");
    test_class_info(&lv, &cd_S7128C1);
    dp->~S7128C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7128C1(Test_S7128C1, "S7128C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S7128C1C1Ev();
extern void _ZN7S7128C1D2Ev();
Name_Map name_map_S7128C1[] = {
  NSPAIR(_ZN7S7128C1C1Ev),
  NSPAIR(_ZN7S7128C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7128C2;
extern VTBL_ENTRY _ZTI7S7128C2[];
extern  VTBL_ENTRY _ZTV7S7128C2[];
extern Class_Descriptor cd_S7128C5;
extern VTBL_ENTRY _ZTI7S7128C5[];
extern  VTBL_ENTRY _ZTV7S7128C5[];
extern Class_Descriptor cd_S7128C4;
extern VTBL_ENTRY _ZTI7S7128C4[];
extern  VTBL_ENTRY _ZTV7S7128C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C4[];
extern Class_Descriptor cd_S7128C3;
extern VTBL_ENTRY _ZTI7S7128C3[];
extern  VTBL_ENTRY _ZTV7S7128C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C3[];
static Base_Class bases_S7128C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7128C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7128C5,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7128C4,    ABISELECT(32,20), //bcp->offset
    33, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7128C3,    ABISELECT(24,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7128C1[];
extern void _ZN7S7128C22v7Ev();
extern void _ZN7S7128C1D1Ev();
extern void _ZN7S7128C1D0Ev();
extern void _ZN7S7128C12v1Ev();
extern void _ZN7S7128C12v2Ev();
extern void _ZN7S7128C12v3Ev();
extern void _ZN7S7128C12v4Ev();
extern void _ZN7S7128C12v5Ev();
extern void _ZN7S7128C12v6Ev();
extern void ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7128C1D1Ev,_ZThn16_N7S7128C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7128C1D0Ev,_ZThn16_N7S7128C1D0Ev)() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C33v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7128C1D1Ev,_ZThn20_N7S7128C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7128C1D0Ev,_ZThn20_N7S7128C1D0Ev)() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY vtc_S7128C1[] = {
  ABISELECT(24,16),
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C1[0]),
  (VTBL_ENTRY)&_ZN7S7128C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7128C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7128C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7128C12v6Ev,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7128C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C33v16Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7128C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern VTBL_ENTRY _ZTV7S7128C1[];
extern void ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev)();
extern void _ZN7S7128C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev)();
extern void _ZN7S7128C3D0Ev() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C3__7S7128C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S7128C3D1Ev,_ZThn4_N7S7128C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S7128C3D0Ev,_ZThn4_N7S7128C3D0Ev)() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C4__7S7128C3__7S7128C1[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7128C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev)();
extern void _ZN7S7128C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev)();
extern void _ZN7S7128C4D0Ev() __attribute__((weak));
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
extern void _ZN7S7128C43v13Ev();
extern void _ZN7S7128C43v14Ev();
extern void _ZN7S7128C43v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C4__7S7128C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v14Ev,
  (VTBL_ENTRY)&_ZN7S7128C43v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev)();
extern void _ZN7S7128C52v8Ev();
extern void _ZN7S7128C52v9Ev();
extern void _ZN7S7128C53v10Ev();
extern void _ZN7S7128C53v11Ev();
extern void _ZN7S7128C53v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7128C5__7S7128C4__7S7128C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S7128C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7128C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7128C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7128C53v12Ev,
};
static  VTT_ENTRY vtt_S7128C1[] = {
  {&(_ZTV7S7128C1[5]),  5,55},
  {&(_ZTV7S7128C1[25]),  25,55},
  {&(_ZTV7S7128C1[45]),  45,55},
  {&(_ZTV7S7128C1[25]),  25,55},
  {&(_tg__ZTV7S7128C3__7S7128C1[10]),  10,18},
  {&(_tg__ZTV7S7128C4__7S7128C3__7S7128C1[12]),  12,22},
  {&(_tg__ZTV7S7128C3__7S7128C1[10]),  10,18},
  {&(_tg__ZTV7S7128C4__7S7128C1[9]),  9,19},
  {&(_tg__ZTV7S7128C5__7S7128C4__7S7128C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7128C1[];
extern  VTBL_ENTRY _ZTV7S7128C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7128C1[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C4D0Ev,_ZTv0_n12_N7S7128C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S7128C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C4D1Ev,_ZTv0_n12_N7S7128C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S7128C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C3D0Ev,_ZTv0_n12_N7S7128C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7128C3D0Ev,_ZThn4_N7S7128C3D0Ev),
  (VTBL_ENTRY)_ZN7S7128C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C3D1Ev,_ZTv0_n12_N7S7128C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7128C3D1Ev,_ZThn4_N7S7128C3D1Ev),
  (VTBL_ENTRY)_ZN7S7128C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C1D0Ev,_ZTv0_n12_N7S7128C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7128C1D0Ev,_ZThn20_N7S7128C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7128C1D0Ev,_ZThn16_N7S7128C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7128C1D1Ev,_ZTv0_n12_N7S7128C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7128C1D1Ev,_ZThn20_N7S7128C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7128C1D1Ev,_ZThn16_N7S7128C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7128C1 = {  "S7128C1", // class name
  bases_S7128C1, 4,
  &(vtc_S7128C1[0]), // expected_vtbl_contents
  &(vtt_S7128C1[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S7128C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7128C1),55, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7128C1),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16090C1  {
  ::S3350C8_nt s16090c1f0;
  ::S4846C6_nt s16090c1f1;
  ::S4846C8 s16090c1f2;
  void  mf16090c1(); // _ZN8S16090C19mf16090c1Ev
};
//SIG(1 S16090C1) C1{ m FC2{ m Fi} FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fi FC6{ Fc[12]} Fc[48] FC6 FC6 FC7{ Fi Fc[128] FC8{ Fi[2] Fc[320] Fi}}}}


void  S16090C1 ::mf16090c1(){}

static void Test_S16090C1()
{
  {
    init_simple_test("S16090C1");
    S16090C1 lv;
    check2(sizeof(lv), 592, "sizeof(S16090C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16090C1)");
    check_field_offset(lv, s16090c1f0, 0, "S16090C1.s16090c1f0");
    check_field_offset(lv, s16090c1f1, 4, "S16090C1.s16090c1f1");
    check_field_offset(lv, s16090c1f2, 40, "S16090C1.s16090c1f2");
  }
}
static Arrange_To_Call_Me vS16090C1(Test_S16090C1, "S16090C1", 592);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1624C5  {
  virtual  ~S1624C5(); // _ZN7S1624C5D1Ev
  virtual void  v5(); // _ZN7S1624C52v5Ev
  virtual void  v6(); // _ZN7S1624C52v6Ev
  virtual void  v7(); // _ZN7S1624C52v7Ev
  virtual void  v8(); // _ZN7S1624C52v8Ev
  virtual void  v9(); // _ZN7S1624C52v9Ev
  S1624C5(); // tgen
};
//SIG(-1 S1624C5) C1{ vd v1 v2 v3 v4 v5}


 S1624C5 ::~S1624C5(){ note_dtor("S1624C5", this);}
void  S1624C5 ::v5(){vfunc_called(this, "_ZN7S1624C52v5Ev");}
void  S1624C5 ::v6(){vfunc_called(this, "_ZN7S1624C52v6Ev");}
void  S1624C5 ::v7(){vfunc_called(this, "_ZN7S1624C52v7Ev");}
void  S1624C5 ::v8(){vfunc_called(this, "_ZN7S1624C52v8Ev");}
void  S1624C5 ::v9(){vfunc_called(this, "_ZN7S1624C52v9Ev");}
S1624C5 ::S1624C5(){ note_ctor("S1624C5", this);} // tgen

static void Test_S1624C5()
{
  extern Class_Descriptor cd_S1624C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1624C5, buf);
    S1624C5 *dp, &lv = *(dp=new (buf) S1624C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1624C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C5)");
    test_class_info(&lv, &cd_S1624C5);
    dp->~S1624C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C5(Test_S1624C5, "S1624C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1624C5C1Ev();
extern void _ZN7S1624C5D1Ev();
Name_Map name_map_S1624C5[] = {
  NSPAIR(_ZN7S1624C5C1Ev),
  NSPAIR(_ZN7S1624C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1624C5[];
extern void _ZN7S1624C5D1Ev();
extern void _ZN7S1624C5D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
static  VTBL_ENTRY vtc_S1624C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C5[0]),
  (VTBL_ENTRY)&_ZN7S1624C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
Class_Descriptor cd_S1624C5 = {  "S1624C5", // class name
  0,0,//no base classes
  &(vtc_S1624C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1624C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1624C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1624C4  : virtual S1624C5 {
  void *s1624c4f0;
  ::S1624C5 s1624c4f1;
  void *s1624c4f2;
  virtual  ~S1624C4(); // _ZN7S1624C4D2Ev
  virtual void  v10(); // _ZN7S1624C43v10Ev
  virtual void  v11(); // _ZN7S1624C43v11Ev
  virtual void  v12(); // _ZN7S1624C43v12Ev
  S1624C4(); // tgen
};
//SIG(-1 S1624C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S1624C4 ::~S1624C4(){ note_dtor("S1624C4", this);}
void  S1624C4 ::v10(){vfunc_called(this, "_ZN7S1624C43v10Ev");}
void  S1624C4 ::v11(){vfunc_called(this, "_ZN7S1624C43v11Ev");}
void  S1624C4 ::v12(){vfunc_called(this, "_ZN7S1624C43v12Ev");}
S1624C4 ::S1624C4(){ note_ctor("S1624C4", this);} // tgen

static void Test_S1624C4()
{
  extern Class_Descriptor cd_S1624C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S1624C4, buf);
    S1624C4 *dp, &lv = *(dp=new (buf) S1624C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S1624C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C4)");
    check_base_class_offset(lv, (S1624C5*), 0, "S1624C4");
    check_field_offset(lv, s1624c4f0, ABISELECT(8,4), "S1624C4.s1624c4f0");
    check_field_offset(lv, s1624c4f1, ABISELECT(16,8), "S1624C4.s1624c4f1");
    check_field_offset(lv, s1624c4f2, ABISELECT(24,12), "S1624C4.s1624c4f2");
    test_class_info(&lv, &cd_S1624C4);
    dp->~S1624C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C4(Test_S1624C4, "S1624C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S1624C4C1Ev();
extern void _ZN7S1624C4D2Ev();
Name_Map name_map_S1624C4[] = {
  NSPAIR(_ZN7S1624C4C1Ev),
  NSPAIR(_ZN7S1624C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1624C5;
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
static Base_Class bases_S1624C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1624C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1624C4[];
extern void _ZN7S1624C4D1Ev();
extern void _ZN7S1624C4D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY vtc_S1624C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&_ZN7S1624C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S1624C4[];
static  VTT_ENTRY vtt_S1624C4[] = {
  {&(_ZTV7S1624C4[9]),  9,19},
  {&(_ZTV7S1624C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
Class_Descriptor cd_S1624C4 = {  "S1624C4", // class name
  bases_S1624C4, 1,
  &(vtc_S1624C4[0]), // expected_vtbl_contents
  &(vtt_S1624C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S1624C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1624C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1624C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1624C3  : S1624C4 {
  ::S1624C4 s1624c3f0[6];
  virtual void  v13(); // _ZN7S1624C33v13Ev
  ~S1624C3(); // tgen
  S1624C3(); // tgen
};
//SIG(-1 S1624C3) C1{ BC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} v1 FC2[6]}


void  S1624C3 ::v13(){vfunc_called(this, "_ZN7S1624C33v13Ev");}
S1624C3 ::~S1624C3(){ note_dtor("S1624C3", this);} // tgen
S1624C3 ::S1624C3(){ note_ctor("S1624C3", this);} // tgen

static void Test_S1624C3()
{
  extern Class_Descriptor cd_S1624C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S1624C3, buf);
    S1624C3 *dp, &lv = *(dp=new (buf) S1624C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S1624C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C3)");
    check_base_class_offset(lv, (S1624C5*)(S1624C4*), 0, "S1624C3");
    check_base_class_offset(lv, (S1624C4*), 0, "S1624C3");
    check_field_offset(lv, s1624c3f0, ABISELECT(32,16), "S1624C3.s1624c3f0");
    test_class_info(&lv, &cd_S1624C3);
    dp->~S1624C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C3(Test_S1624C3, "S1624C3", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN7S1624C3C1Ev();
extern void _ZN7S1624C3D1Ev();
Name_Map name_map_S1624C3[] = {
  NSPAIR(_ZN7S1624C3C1Ev),
  NSPAIR(_ZN7S1624C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1624C5;
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
extern Class_Descriptor cd_S1624C4;
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
static Base_Class bases_S1624C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1624C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1624C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1624C3[];
extern void _ZN7S1624C3D1Ev();
extern void _ZN7S1624C3D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
static  VTBL_ENTRY vtc_S1624C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C3[0]),
  (VTBL_ENTRY)&_ZN7S1624C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S1624C3[];
extern void _ZN7S1624C4D1Ev();
extern void _ZN7S1624C4D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C4__7S1624C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&_ZN7S1624C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
static  VTT_ENTRY vtt_S1624C3[] = {
  {&(_ZTV7S1624C3[9]),  9,20},
  {&(_tg__ZTV7S1624C4__7S1624C3[9]),  9,19},
  {&(_tg__ZTV7S1624C4__7S1624C3[9]),  9,19},
  {&(_ZTV7S1624C3[9]),  9,20},
};
extern VTBL_ENTRY _ZTI7S1624C3[];
extern  VTBL_ENTRY _ZTV7S1624C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C3[];
Class_Descriptor cd_S1624C3 = {  "S1624C3", // class name
  bases_S1624C3, 2,
  &(vtc_S1624C3[0]), // expected_vtbl_contents
  &(vtt_S1624C3[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI7S1624C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1624C3),20, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1624C3),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1624C2  : S1624C3 {
  virtual  ~S1624C2(); // _ZN7S1624C2D2Ev
  virtual void  v14(); // _ZN7S1624C23v14Ev
  virtual void  v15(); // _ZN7S1624C23v15Ev
  S1624C2(); // tgen
};
//SIG(-1 S1624C2) C1{ BC2{ BC3{ VBC4{ vd v3 v4 v5 v6 v7} vd v8 v9 v10 Fp FC4 Fp} v11 FC3[6]} vd v1 v2}


 S1624C2 ::~S1624C2(){ note_dtor("S1624C2", this);}
void  S1624C2 ::v14(){vfunc_called(this, "_ZN7S1624C23v14Ev");}
void  S1624C2 ::v15(){vfunc_called(this, "_ZN7S1624C23v15Ev");}
S1624C2 ::S1624C2(){ note_ctor("S1624C2", this);} // tgen

static void Test_S1624C2()
{
  extern Class_Descriptor cd_S1624C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[29];
    init_test(&cd_S1624C2, buf);
    S1624C2 *dp, &lv = *(dp=new (buf) S1624C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S1624C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C2)");
    check_base_class_offset(lv, (S1624C5*)(S1624C4*)(S1624C3*), 0, "S1624C2");
    check_base_class_offset(lv, (S1624C4*)(S1624C3*), 0, "S1624C2");
    check_base_class_offset(lv, (S1624C3*), 0, "S1624C2");
    test_class_info(&lv, &cd_S1624C2);
    dp->~S1624C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C2(Test_S1624C2, "S1624C2", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN7S1624C2C1Ev();
extern void _ZN7S1624C2D2Ev();
Name_Map name_map_S1624C2[] = {
  NSPAIR(_ZN7S1624C2C1Ev),
  NSPAIR(_ZN7S1624C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1624C5;
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
extern Class_Descriptor cd_S1624C4;
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
extern Class_Descriptor cd_S1624C3;
extern VTBL_ENTRY _ZTI7S1624C3[];
extern  VTBL_ENTRY _ZTV7S1624C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C3[];
static Base_Class bases_S1624C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1624C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1624C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1624C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1624C2[];
extern void _ZN7S1624C2D1Ev();
extern void _ZN7S1624C2D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
extern void _ZN7S1624C23v14Ev();
extern void _ZN7S1624C23v15Ev();
static  VTBL_ENTRY vtc_S1624C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C2[0]),
  (VTBL_ENTRY)&_ZN7S1624C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S1624C2[];
extern void _ZN7S1624C3D1Ev();
extern void _ZN7S1624C3D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C3__7S1624C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C3[0]),
  (VTBL_ENTRY)&_ZN7S1624C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev)();
extern void _ZN7S1624C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev)();
extern void _ZN7S1624C4D0Ev() __attribute__((weak));
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C47S1624C3__7S1624C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
static  VTT_ENTRY vtt_S1624C2[] = {
  {&(_ZTV7S1624C2[9]),  9,22},
  {&(_tg__ZTV7S1624C3__7S1624C2[9]),  9,20},
  {&(_tg__ZTV7S1624C47S1624C3__7S1624C2[9]),  9,19},
  {&(_tg__ZTV7S1624C47S1624C3__7S1624C2[9]),  9,19},
  {&(_tg__ZTV7S1624C3__7S1624C2[9]),  9,20},
  {&(_ZTV7S1624C2[9]),  9,22},
};
extern VTBL_ENTRY _ZTI7S1624C2[];
extern  VTBL_ENTRY _ZTV7S1624C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C2[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S1624C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S1624C4D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1624C2 = {  "S1624C2", // class name
  bases_S1624C2, 3,
  &(vtc_S1624C2[0]), // expected_vtbl_contents
  &(vtt_S1624C2[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI7S1624C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1624C2),22, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1624C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1624C1  : S1624C2 , S1624C4 {
  int s1624c1f0[2];
  virtual void  v1(); // _ZN7S1624C12v1Ev
  virtual void  v2(); // _ZN7S1624C12v2Ev
  virtual void  v3(); // _ZN7S1624C12v3Ev
  virtual void  v4(); // _ZN7S1624C12v4Ev
  ~S1624C1(); // tgen
  S1624C1(); // tgen
};
//SIG(1 S1624C1) C1{ BC2{ BC3{ BC4{ VBC5{ vd v5 v6 v7 v8 v9} vd v10 v11 v12 Fp FC5 Fp} v13 FC4[6]} vd v14 v15} BC4 v1 v2 v3 v4 Fi[2]}


void  S1624C1 ::v1(){vfunc_called(this, "_ZN7S1624C12v1Ev");}
void  S1624C1 ::v2(){vfunc_called(this, "_ZN7S1624C12v2Ev");}
void  S1624C1 ::v3(){vfunc_called(this, "_ZN7S1624C12v3Ev");}
void  S1624C1 ::v4(){vfunc_called(this, "_ZN7S1624C12v4Ev");}
S1624C1 ::~S1624C1(){ note_dtor("S1624C1", this);} // tgen
S1624C1 ::S1624C1(){ note_ctor("S1624C1", this);} // tgen

static void Test_S1624C1()
{
  extern Class_Descriptor cd_S1624C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,35)];
    init_test(&cd_S1624C1, buf);
    S1624C1 *dp, &lv = *(dp=new (buf) S1624C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,136), "sizeof(S1624C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1624C1)");
    check_base_class_offset(lv, (S1624C5*)(S1624C4*)(S1624C3*)(S1624C2*), 0, "S1624C1");
    /*is_ambiguous_... S1624C1::S1624C4 */ AMB_check_base_class_offset(lv, (S1624C5*)(S1624C4*), 0, "S1624C1");
    check_base_class_offset(lv, (S1624C4*)(S1624C3*)(S1624C2*), 0, "S1624C1");
    check_base_class_offset(lv, (S1624C3*)(S1624C2*), 0, "S1624C1");
    check_base_class_offset(lv, (S1624C2*), 0, "S1624C1");
    /*is_ambiguous_... S1624C1::S1624C4 */ AMB_check_base_class_offset(lv, (S1624C4*), ABISELECT(224,112), "S1624C1");
    check_field_offset(lv, s1624c1f0, ABISELECT(256,128), "S1624C1.s1624c1f0");
    test_class_info(&lv, &cd_S1624C1);
    dp->~S1624C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1624C1(Test_S1624C1, "S1624C1", ABISELECT(264,136));

#else // __cplusplus

extern void _ZN7S1624C1C1Ev();
extern void _ZN7S1624C1D1Ev();
Name_Map name_map_S1624C1[] = {
  NSPAIR(_ZN7S1624C1C1Ev),
  NSPAIR(_ZN7S1624C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1624C5;
extern VTBL_ENTRY _ZTI7S1624C5[];
extern  VTBL_ENTRY _ZTV7S1624C5[];
extern Class_Descriptor cd_S1624C4;
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
extern Class_Descriptor cd_S1624C3;
extern VTBL_ENTRY _ZTI7S1624C3[];
extern  VTBL_ENTRY _ZTV7S1624C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C3[];
extern Class_Descriptor cd_S1624C2;
extern VTBL_ENTRY _ZTI7S1624C2[];
extern  VTBL_ENTRY _ZTV7S1624C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C2[];
extern Class_Descriptor cd_S1624C4;
extern VTBL_ENTRY _ZTI7S1624C4[];
extern  VTBL_ENTRY _ZTV7S1624C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C4[];
static Base_Class bases_S1624C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1624C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S1624C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1624C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1624C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1624C4,    ABISELECT(224,112), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1624C1[];
extern void _ZN7S1624C1D1Ev();
extern void _ZN7S1624C1D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
extern void _ZN7S1624C23v14Ev();
extern void _ZN7S1624C23v15Ev();
extern void _ZN7S1624C12v1Ev();
extern void _ZN7S1624C12v2Ev();
extern void _ZN7S1624C12v3Ev();
extern void _ZN7S1624C12v4Ev();
extern void ABISELECT(_ZThn224_N7S1624C1D1Ev,_ZThn112_N7S1624C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S1624C1D0Ev,_ZThn112_N7S1624C1D0Ev)();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY vtc_S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C1[0]),
  (VTBL_ENTRY)&_ZN7S1624C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1624C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1624C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1624C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1624C12v4Ev,
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S1624C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1624C1D1Ev,_ZThn112_N7S1624C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1624C1D0Ev,_ZThn112_N7S1624C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
extern VTBL_ENTRY _ZTV7S1624C1[];
extern void _ZN7S1624C2D1Ev();
extern void _ZN7S1624C2D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
extern void _ZN7S1624C23v14Ev();
extern void _ZN7S1624C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C2__7S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C2[0]),
  (VTBL_ENTRY)&_ZN7S1624C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1624C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1624C3D1Ev,_ZTv0_n12_N7S1624C3D1Ev)();
extern void _ZN7S1624C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1624C3D0Ev,_ZTv0_n12_N7S1624C3D0Ev)();
extern void _ZN7S1624C3D0Ev() __attribute__((weak));
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
extern void _ZN7S1624C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C37S1624C2__7S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C3D1Ev,_ZTv0_n12_N7S1624C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C3D0Ev,_ZTv0_n12_N7S1624C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1624C33v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev)();
extern void _ZN7S1624C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev)();
extern void _ZN7S1624C4D0Ev() __attribute__((weak));
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C47S1624C37S1624C2__7S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
extern void _ZN7S1624C4D1Ev();
extern void _ZN7S1624C4D0Ev();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
extern void _ZN7S1624C43v10Ev();
extern void _ZN7S1624C43v11Ev();
extern void _ZN7S1624C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C4__A1__7S1624C1[] = {
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&_ZN7S1624C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1624C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1624C43v12Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev)();
extern void _ZN7S1624C52v5Ev();
extern void _ZN7S1624C52v6Ev();
extern void _ZN7S1624C52v7Ev();
extern void _ZN7S1624C52v8Ev();
extern void _ZN7S1624C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S1624C5__7S1624C4__A1__7S1624C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(224,112),
  ABISELECT(224,112),
  (VTBL_ENTRY)&(_ZTI7S1624C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev),
  (VTBL_ENTRY)&_ZN7S1624C52v5Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v6Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v7Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v8Ev,
  (VTBL_ENTRY)&_ZN7S1624C52v9Ev,
};
static  VTT_ENTRY vtt_S1624C1[] = {
  {&(_ZTV7S1624C1[9]),  9,45},
  {&(_tg__ZTV7S1624C2__7S1624C1[9]),  9,22},
  {&(_tg__ZTV7S1624C37S1624C2__7S1624C1[9]),  9,20},
  {&(_tg__ZTV7S1624C47S1624C37S1624C2__7S1624C1[9]),  9,19},
  {&(_tg__ZTV7S1624C47S1624C37S1624C2__7S1624C1[9]),  9,19},
  {&(_tg__ZTV7S1624C37S1624C2__7S1624C1[9]),  9,20},
  {&(_tg__ZTV7S1624C2__7S1624C1[9]),  9,22},
  {&(_tg__ZTV7S1624C4__A1__7S1624C1[9]),  9,19},
  {&(_tg__ZTV7S1624C5__7S1624C4__A1__7S1624C1[8]),  8,15},
  {&(_ZTV7S1624C1[9]),  9,45},
  {&(_ZTV7S1624C1[35]),  35,45},
};
extern VTBL_ENTRY _ZTI7S1624C1[];
extern  VTBL_ENTRY _ZTV7S1624C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1624C1[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C4D0Ev,_ZTv0_n12_N7S1624C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S1624C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C4D1Ev,_ZTv0_n12_N7S1624C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S1624C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C3D0Ev,_ZTv0_n12_N7S1624C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S1624C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S1624C3D1Ev,_ZTv0_n12_N7S1624C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S1624C3D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1624C1 = {  "S1624C1", // class name
  bases_S1624C1, 5,
  &(vtc_S1624C1[0]), // expected_vtbl_contents
  &(vtt_S1624C1[0]), // expected_vtt_contents
  ABISELECT(264,136), // object size
  NSPAIRA(_ZTI7S1624C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1624C1),45, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1624C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4847C3  {
  ::S2185C10_nt s4847c3f0;
  int s4847c3f1[2];
  char s4847c3f2;
  virtual  ~S4847C3(); // _ZN7S4847C3D1Ev
  virtual void  v3(); // _ZN7S4847C32v3Ev
  virtual void  v4(); // _ZN7S4847C32v4Ev
  virtual void  v5(); // _ZN7S4847C32v5Ev
  S4847C3(); // tgen
};
//SIG(-1 S4847C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4847C3 ::~S4847C3(){ note_dtor("S4847C3", this);}
void  S4847C3 ::v3(){vfunc_called(this, "_ZN7S4847C32v3Ev");}
void  S4847C3 ::v4(){vfunc_called(this, "_ZN7S4847C32v4Ev");}
void  S4847C3 ::v5(){vfunc_called(this, "_ZN7S4847C32v5Ev");}
S4847C3 ::S4847C3(){ note_ctor("S4847C3", this);} // tgen

static void Test_S4847C3()
{
  extern Class_Descriptor cd_S4847C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4847C3, buf);
    S4847C3 *dp, &lv = *(dp=new (buf) S4847C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4847C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4847C3)");
    check_field_offset(lv, s4847c3f0, ABISELECT(8,4), "S4847C3.s4847c3f0");
    check_field_offset(lv, s4847c3f1, ABISELECT(24,16), "S4847C3.s4847c3f1");
    check_field_offset(lv, s4847c3f2, ABISELECT(32,24), "S4847C3.s4847c3f2");
    test_class_info(&lv, &cd_S4847C3);
    dp->~S4847C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4847C3(Test_S4847C3, "S4847C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4847C3C1Ev();
extern void _ZN7S4847C3D1Ev();
Name_Map name_map_S4847C3[] = {
  NSPAIR(_ZN7S4847C3C1Ev),
  NSPAIR(_ZN7S4847C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4847C3[];
extern void _ZN7S4847C3D1Ev();
extern void _ZN7S4847C3D0Ev();
extern void _ZN7S4847C32v3Ev();
extern void _ZN7S4847C32v4Ev();
extern void _ZN7S4847C32v5Ev();
static  VTBL_ENTRY vtc_S4847C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4847C3[0]),
  (VTBL_ENTRY)&_ZN7S4847C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4847C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4847C3[];
extern  VTBL_ENTRY _ZTV7S4847C3[];
Class_Descriptor cd_S4847C3 = {  "S4847C3", // class name
  0,0,//no base classes
  &(vtc_S4847C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4847C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4847C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4847C2  : S4847C3 {
  void *s4847c2f0[2];
  ::S4846C6_nt s4847c2f1;
  virtual  ~S4847C2(); // _ZN7S4847C2D1Ev
  virtual void  v6(); // _ZN7S4847C22v6Ev
  virtual void  v7(); // _ZN7S4847C22v7Ev
  virtual void  v8(); // _ZN7S4847C22v8Ev
  virtual void  v9(); // _ZN7S4847C22v9Ev
  S4847C2(); // tgen
};
//SIG(-1 S4847C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[2] FC5{ FC6{ Fc[20]} Fc[16]}}


 S4847C2 ::~S4847C2(){ note_dtor("S4847C2", this);}
void  S4847C2 ::v6(){vfunc_called(this, "_ZN7S4847C22v6Ev");}
void  S4847C2 ::v7(){vfunc_called(this, "_ZN7S4847C22v7Ev");}
void  S4847C2 ::v8(){vfunc_called(this, "_ZN7S4847C22v8Ev");}
void  S4847C2 ::v9(){vfunc_called(this, "_ZN7S4847C22v9Ev");}
S4847C2 ::S4847C2(){ note_ctor("S4847C2", this);} // tgen

static void Test_S4847C2()
{
  extern Class_Descriptor cd_S4847C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S4847C2, buf);
    S4847C2 *dp, &lv = *(dp=new (buf) S4847C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S4847C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4847C2)");
    check_base_class_offset(lv, (S4847C3*), 0, "S4847C2");
    check_field_offset(lv, s4847c2f0, ABISELECT(40,28), "S4847C2.s4847c2f0");
    check_field_offset(lv, s4847c2f1, ABISELECT(56,36), "S4847C2.s4847c2f1");
    test_class_info(&lv, &cd_S4847C2);
    dp->~S4847C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4847C2(Test_S4847C2, "S4847C2", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S4847C2C1Ev();
extern void _ZN7S4847C2D1Ev();
Name_Map name_map_S4847C2[] = {
  NSPAIR(_ZN7S4847C2C1Ev),
  NSPAIR(_ZN7S4847C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4847C3;
extern VTBL_ENTRY _ZTI7S4847C3[];
extern  VTBL_ENTRY _ZTV7S4847C3[];
static Base_Class bases_S4847C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4847C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4847C2[];
extern void _ZN7S4847C2D1Ev();
extern void _ZN7S4847C2D0Ev();
extern void _ZN7S4847C32v3Ev();
extern void _ZN7S4847C32v4Ev();
extern void _ZN7S4847C32v5Ev();
extern void _ZN7S4847C22v6Ev();
extern void _ZN7S4847C22v7Ev();
extern void _ZN7S4847C22v8Ev();
extern void _ZN7S4847C22v9Ev();
static  VTBL_ENTRY vtc_S4847C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4847C2[0]),
  (VTBL_ENTRY)&_ZN7S4847C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4847C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4847C2[];
extern  VTBL_ENTRY _ZTV7S4847C2[];
Class_Descriptor cd_S4847C2 = {  "S4847C2", // class name
  bases_S4847C2, 1,
  &(vtc_S4847C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S4847C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4847C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4847C1  : S4847C2 {
  int s4847c1f0;
  virtual  ~S4847C1(); // _ZN7S4847C1D1Ev
  virtual void  v1(); // _ZN7S4847C12v1Ev
  virtual void  v2(); // _ZN7S4847C12v2Ev
  S4847C1(); // tgen
};
//SIG(1 S4847C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp[2] FC6{ FC7{ Fc[20]} Fc[16]}} vd v1 v2 Fi}


 S4847C1 ::~S4847C1(){ note_dtor("S4847C1", this);}
void  S4847C1 ::v1(){vfunc_called(this, "_ZN7S4847C12v1Ev");}
void  S4847C1 ::v2(){vfunc_called(this, "_ZN7S4847C12v2Ev");}
S4847C1 ::S4847C1(){ note_ctor("S4847C1", this);} // tgen

static void Test_S4847C1()
{
  extern Class_Descriptor cd_S4847C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,20)];
    init_test(&cd_S4847C1, buf);
    S4847C1 *dp, &lv = *(dp=new (buf) S4847C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S4847C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4847C1)");
    check_base_class_offset(lv, (S4847C3*)(S4847C2*), 0, "S4847C1");
    check_base_class_offset(lv, (S4847C2*), 0, "S4847C1");
    check_field_offset(lv, s4847c1f0, ABISELECT(92,72), "S4847C1.s4847c1f0");
    test_class_info(&lv, &cd_S4847C1);
    dp->~S4847C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4847C1(Test_S4847C1, "S4847C1", ABISELECT(96,76));

#else // __cplusplus

extern void _ZN7S4847C1C1Ev();
extern void _ZN7S4847C1D1Ev();
Name_Map name_map_S4847C1[] = {
  NSPAIR(_ZN7S4847C1C1Ev),
  NSPAIR(_ZN7S4847C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4847C3;
extern VTBL_ENTRY _ZTI7S4847C3[];
extern  VTBL_ENTRY _ZTV7S4847C3[];
extern Class_Descriptor cd_S4847C2;
extern VTBL_ENTRY _ZTI7S4847C2[];
extern  VTBL_ENTRY _ZTV7S4847C2[];
static Base_Class bases_S4847C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4847C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4847C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4847C1[];
extern void _ZN7S4847C1D1Ev();
extern void _ZN7S4847C1D0Ev();
extern void _ZN7S4847C32v3Ev();
extern void _ZN7S4847C32v4Ev();
extern void _ZN7S4847C32v5Ev();
extern void _ZN7S4847C22v6Ev();
extern void _ZN7S4847C22v7Ev();
extern void _ZN7S4847C22v8Ev();
extern void _ZN7S4847C22v9Ev();
extern void _ZN7S4847C12v1Ev();
extern void _ZN7S4847C12v2Ev();
static  VTBL_ENTRY vtc_S4847C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4847C1[0]),
  (VTBL_ENTRY)&_ZN7S4847C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4847C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4847C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4847C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4847C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4847C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4847C1[];
extern  VTBL_ENTRY _ZTV7S4847C1[];
Class_Descriptor cd_S4847C1 = {  "S4847C1", // class name
  bases_S4847C1, 2,
  &(vtc_S4847C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,76), // object size
  NSPAIRA(_ZTI7S4847C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4847C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7801C4  {
  virtual  ~S7801C4(); // _ZN7S7801C4D1Ev
  virtual void  v4(); // _ZN7S7801C42v4Ev
  virtual void  v5(); // _ZN7S7801C42v5Ev
  virtual void  v6(); // _ZN7S7801C42v6Ev
  virtual void  v7(); // _ZN7S7801C42v7Ev
  virtual void  v8(); // _ZN7S7801C42v8Ev
  S7801C4(); // tgen
};
//SIG(-1 S7801C4) C1{ vd v1 v2 v3 v4 v5}


 S7801C4 ::~S7801C4(){ note_dtor("S7801C4", this);}
void  S7801C4 ::v4(){vfunc_called(this, "_ZN7S7801C42v4Ev");}
void  S7801C4 ::v5(){vfunc_called(this, "_ZN7S7801C42v5Ev");}
void  S7801C4 ::v6(){vfunc_called(this, "_ZN7S7801C42v6Ev");}
void  S7801C4 ::v7(){vfunc_called(this, "_ZN7S7801C42v7Ev");}
void  S7801C4 ::v8(){vfunc_called(this, "_ZN7S7801C42v8Ev");}
S7801C4 ::S7801C4(){ note_ctor("S7801C4", this);} // tgen

static void Test_S7801C4()
{
  extern Class_Descriptor cd_S7801C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7801C4, buf);
    S7801C4 *dp, &lv = *(dp=new (buf) S7801C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7801C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7801C4)");
    test_class_info(&lv, &cd_S7801C4);
    dp->~S7801C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7801C4(Test_S7801C4, "S7801C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7801C4C1Ev();
extern void _ZN7S7801C4D1Ev();
Name_Map name_map_S7801C4[] = {
  NSPAIR(_ZN7S7801C4C1Ev),
  NSPAIR(_ZN7S7801C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7801C4[];
extern void _ZN7S7801C4D1Ev();
extern void _ZN7S7801C4D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
static  VTBL_ENTRY vtc_S7801C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C4[0]),
  (VTBL_ENTRY)&_ZN7S7801C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S7801C4[];
extern  VTBL_ENTRY _ZTV7S7801C4[];
Class_Descriptor cd_S7801C4 = {  "S7801C4", // class name
  0,0,//no base classes
  &(vtc_S7801C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7801C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7801C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7801C3  : virtual S7801C4 {
  void *s7801c3f0;
  ::S7801C4 s7801c3f1;
  void *s7801c3f2;
  virtual  ~S7801C3(); // _ZN7S7801C3D2Ev
  virtual void  v9(); // _ZN7S7801C32v9Ev
  virtual void  v10(); // _ZN7S7801C33v10Ev
  virtual void  v11(); // _ZN7S7801C33v11Ev
  S7801C3(); // tgen
};
//SIG(-1 S7801C3) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S7801C3 ::~S7801C3(){ note_dtor("S7801C3", this);}
void  S7801C3 ::v9(){vfunc_called(this, "_ZN7S7801C32v9Ev");}
void  S7801C3 ::v10(){vfunc_called(this, "_ZN7S7801C33v10Ev");}
void  S7801C3 ::v11(){vfunc_called(this, "_ZN7S7801C33v11Ev");}
S7801C3 ::S7801C3(){ note_ctor("S7801C3", this);} // tgen

static void Test_S7801C3()
{
  extern Class_Descriptor cd_S7801C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7801C3, buf);
    S7801C3 *dp, &lv = *(dp=new (buf) S7801C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7801C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7801C3)");
    check_base_class_offset(lv, (S7801C4*), 0, "S7801C3");
    check_field_offset(lv, s7801c3f0, ABISELECT(8,4), "S7801C3.s7801c3f0");
    check_field_offset(lv, s7801c3f1, ABISELECT(16,8), "S7801C3.s7801c3f1");
    check_field_offset(lv, s7801c3f2, ABISELECT(24,12), "S7801C3.s7801c3f2");
    test_class_info(&lv, &cd_S7801C3);
    dp->~S7801C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7801C3(Test_S7801C3, "S7801C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7801C3C1Ev();
extern void _ZN7S7801C3D2Ev();
Name_Map name_map_S7801C3[] = {
  NSPAIR(_ZN7S7801C3C1Ev),
  NSPAIR(_ZN7S7801C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7801C4;
extern VTBL_ENTRY _ZTI7S7801C4[];
extern  VTBL_ENTRY _ZTV7S7801C4[];
static Base_Class bases_S7801C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7801C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7801C3[];
extern void _ZN7S7801C3D1Ev();
extern void _ZN7S7801C3D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY vtc_S7801C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&_ZN7S7801C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7801C3[];
static  VTT_ENTRY vtt_S7801C3[] = {
  {&(_ZTV7S7801C3[9]),  9,19},
  {&(_ZTV7S7801C3[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S7801C3[];
extern  VTBL_ENTRY _ZTV7S7801C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C3[];
Class_Descriptor cd_S7801C3 = {  "S7801C3", // class name
  bases_S7801C3, 1,
  &(vtc_S7801C3[0]), // expected_vtbl_contents
  &(vtt_S7801C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7801C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7801C3),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7801C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7801C2  : virtual S7801C3 {
  char s7801c2f0;
  virtual  ~S7801C2(); // _ZN7S7801C2D2Ev
  virtual void  v12(); // _ZN7S7801C23v12Ev
  virtual void  v13(); // _ZN7S7801C23v13Ev
  virtual void  v14(); // _ZN7S7801C23v14Ev
  virtual void  v15(); // _ZN7S7801C23v15Ev
  virtual void  v16(); // _ZN7S7801C23v16Ev
  S7801C2(); // tgen
};
//SIG(-1 S7801C2) C1{ VBC2{ VBC3{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 Fp FC3 Fp} vd v1 v2 v3 v4 v5 Fc}


 S7801C2 ::~S7801C2(){ note_dtor("S7801C2", this);}
void  S7801C2 ::v12(){vfunc_called(this, "_ZN7S7801C23v12Ev");}
void  S7801C2 ::v13(){vfunc_called(this, "_ZN7S7801C23v13Ev");}
void  S7801C2 ::v14(){vfunc_called(this, "_ZN7S7801C23v14Ev");}
void  S7801C2 ::v15(){vfunc_called(this, "_ZN7S7801C23v15Ev");}
void  S7801C2 ::v16(){vfunc_called(this, "_ZN7S7801C23v16Ev");}
S7801C2 ::S7801C2(){ note_ctor("S7801C2", this);} // tgen

static void Test_S7801C2()
{
  extern Class_Descriptor cd_S7801C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7801C2, buf);
    S7801C2 *dp, &lv = *(dp=new (buf) S7801C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7801C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7801C2)");
    check_base_class_offset(lv, (S7801C4*)(S7801C3*), 0, "S7801C2");
    check_base_class_offset(lv, (S7801C3*), ABISELECT(16,8), "S7801C2");
    check_field_offset(lv, s7801c2f0, ABISELECT(8,4), "S7801C2.s7801c2f0");
    test_class_info(&lv, &cd_S7801C2);
    dp->~S7801C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7801C2(Test_S7801C2, "S7801C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7801C2C1Ev();
extern void _ZN7S7801C2D2Ev();
Name_Map name_map_S7801C2[] = {
  NSPAIR(_ZN7S7801C2C1Ev),
  NSPAIR(_ZN7S7801C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7801C4;
extern VTBL_ENTRY _ZTI7S7801C4[];
extern  VTBL_ENTRY _ZTV7S7801C4[];
extern Class_Descriptor cd_S7801C3;
extern VTBL_ENTRY _ZTI7S7801C3[];
extern  VTBL_ENTRY _ZTV7S7801C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C3[];
static Base_Class bases_S7801C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7801C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7801C3,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7801C2[];
extern void _ZN7S7801C2D1Ev();
extern void _ZN7S7801C2D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C23v12Ev();
extern void _ZN7S7801C23v13Ev();
extern void _ZN7S7801C23v14Ev();
extern void _ZN7S7801C23v15Ev();
extern void _ZN7S7801C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7801C2D1Ev,_ZThn8_N7S7801C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7801C2D0Ev,_ZThn8_N7S7801C2D0Ev)() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY vtc_S7801C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C2[0]),
  (VTBL_ENTRY)&_ZN7S7801C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7801C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7801C2[];
extern void ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev)();
extern void _ZN7S7801C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev)();
extern void _ZN7S7801C3D0Ev() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C3__7S7801C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev)();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C4__7S7801C3__7S7801C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
};
static  VTT_ENTRY vtt_S7801C2[] = {
  {&(_ZTV7S7801C2[10]),  10,44},
  {&(_ZTV7S7801C2[34]),  34,44},
  {&(_ZTV7S7801C2[10]),  10,44},
  {&(_tg__ZTV7S7801C3__7S7801C2[9]),  9,19},
  {&(_tg__ZTV7S7801C4__7S7801C3__7S7801C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7801C2[];
extern  VTBL_ENTRY _ZTV7S7801C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C2[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7801C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7801C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7801C2D0Ev,_ZThn8_N7S7801C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7801C2D1Ev,_ZThn8_N7S7801C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7801C2 = {  "S7801C2", // class name
  bases_S7801C2, 2,
  &(vtc_S7801C2[0]), // expected_vtbl_contents
  &(vtt_S7801C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7801C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7801C2),44, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7801C2),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7801C1  : S7801C2 {
  int s7801c1f0[2];
  short s7801c1f1;
  virtual void  v1(); // _ZN7S7801C12v1Ev
  virtual void  v2(); // _ZN7S7801C12v2Ev
  virtual void  v3(); // _ZN7S7801C12v3Ev
  ~S7801C1(); // tgen
  S7801C1(); // tgen
};
//SIG(1 S7801C1) C1{ BC2{ VBC3{ VBC4{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC4 Fp} vd v12 v13 v14 v15 v16 Fc} v1 v2 v3 Fi[2] Fs}


void  S7801C1 ::v1(){vfunc_called(this, "_ZN7S7801C12v1Ev");}
void  S7801C1 ::v2(){vfunc_called(this, "_ZN7S7801C12v2Ev");}
void  S7801C1 ::v3(){vfunc_called(this, "_ZN7S7801C12v3Ev");}
S7801C1 ::~S7801C1(){ note_dtor("S7801C1", this);} // tgen
S7801C1 ::S7801C1(){ note_ctor("S7801C1", this);} // tgen

static void Test_S7801C1()
{
  extern Class_Descriptor cd_S7801C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S7801C1, buf);
    S7801C1 *dp, &lv = *(dp=new (buf) S7801C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S7801C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7801C1)");
    check_base_class_offset(lv, (S7801C4*)(S7801C3*), 0, "S7801C1");
    check_base_class_offset(lv, (S7801C3*)(S7801C2*), ABISELECT(24,20), "S7801C1");
    check_base_class_offset(lv, (S7801C2*), 0, "S7801C1");
    check_field_offset(lv, s7801c1f0, ABISELECT(12,8), "S7801C1.s7801c1f0");
    check_field_offset(lv, s7801c1f1, ABISELECT(20,16), "S7801C1.s7801c1f1");
    test_class_info(&lv, &cd_S7801C1);
    dp->~S7801C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7801C1(Test_S7801C1, "S7801C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S7801C1C1Ev();
extern void _ZN7S7801C1D1Ev();
Name_Map name_map_S7801C1[] = {
  NSPAIR(_ZN7S7801C1C1Ev),
  NSPAIR(_ZN7S7801C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7801C4;
extern VTBL_ENTRY _ZTI7S7801C4[];
extern  VTBL_ENTRY _ZTV7S7801C4[];
extern Class_Descriptor cd_S7801C3;
extern VTBL_ENTRY _ZTI7S7801C3[];
extern  VTBL_ENTRY _ZTV7S7801C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C3[];
extern Class_Descriptor cd_S7801C2;
extern VTBL_ENTRY _ZTI7S7801C2[];
extern  VTBL_ENTRY _ZTV7S7801C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C2[];
static Base_Class bases_S7801C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7801C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7801C3,    ABISELECT(24,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7801C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7801C1[];
extern void _ZN7S7801C1D1Ev();
extern void _ZN7S7801C1D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C23v12Ev();
extern void _ZN7S7801C23v13Ev();
extern void _ZN7S7801C23v14Ev();
extern void _ZN7S7801C23v15Ev();
extern void _ZN7S7801C23v16Ev();
extern void _ZN7S7801C12v1Ev();
extern void _ZN7S7801C12v2Ev();
extern void _ZN7S7801C12v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S7801C1D1Ev,_ZTv0_n12_N7S7801C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S7801C1D1Ev,_ZThn20_N7S7801C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C1D0Ev,_ZTv0_n12_N7S7801C1D0Ev)();
extern void ABISELECT(_ZThn24_N7S7801C1D0Ev,_ZThn20_N7S7801C1D0Ev)() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY vtc_S7801C1[] = {
  0,
  ABISELECT(24,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C1[0]),
  (VTBL_ENTRY)&_ZN7S7801C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7801C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7801C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7801C12v3Ev,
  0,
  0,
  0,
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI7S7801C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C1D1Ev,_ZTv0_n12_N7S7801C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C1D0Ev,_ZTv0_n12_N7S7801C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern VTBL_ENTRY _ZTV7S7801C1[];
extern void _ZN7S7801C2D1Ev();
extern void _ZN7S7801C2D0Ev();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C23v12Ev();
extern void _ZN7S7801C23v13Ev();
extern void _ZN7S7801C23v14Ev();
extern void _ZN7S7801C23v15Ev();
extern void _ZN7S7801C23v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C2__7S7801C1[] = {
  0,
  ABISELECT(24,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C2[0]),
  (VTBL_ENTRY)&_ZN7S7801C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7801C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7801C23v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7801C2D1Ev,_ZThn20_N7S7801C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7801C2D0Ev,_ZThn20_N7S7801C2D0Ev)() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C3__7S7801C2__7S7801C1[] = {
  0,
  0,
  0,
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI7S7801C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev)();
extern void _ZN7S7801C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev)();
extern void _ZN7S7801C3D0Ev() __attribute__((weak));
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
extern void _ZN7S7801C32v9Ev();
extern void _ZN7S7801C33v10Ev();
extern void _ZN7S7801C33v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C3__7S7801C1[] = {
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7801C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7801C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev)();
extern void _ZN7S7801C42v4Ev();
extern void _ZN7S7801C42v5Ev();
extern void _ZN7S7801C42v6Ev();
extern void _ZN7S7801C42v7Ev();
extern void _ZN7S7801C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7801C4__7S7801C3__7S7801C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(24,20),
  ABISELECT(24,20),
  (VTBL_ENTRY)&(_ZTI7S7801C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7801C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7801C42v8Ev,
};
static  VTT_ENTRY vtt_S7801C1[] = {
  {&(_ZTV7S7801C1[10]),  10,47},
  {&(_tg__ZTV7S7801C2__7S7801C1[10]),  10,22},
  {&(_tg__ZTV7S7801C3__7S7801C2__7S7801C1[12]),  12,22},
  {&(_tg__ZTV7S7801C2__7S7801C1[10]),  10,22},
  {&(_ZTV7S7801C1[37]),  37,47},
  {&(_ZTV7S7801C1[10]),  10,47},
  {&(_tg__ZTV7S7801C3__7S7801C1[9]),  9,19},
  {&(_tg__ZTV7S7801C4__7S7801C3__7S7801C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S7801C1[];
extern  VTBL_ENTRY _ZTV7S7801C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7801C1[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C3D0Ev,_ZTv0_n12_N7S7801C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7801C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C3D1Ev,_ZTv0_n12_N7S7801C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7801C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C2D0Ev,_ZTv0_n12_N7S7801C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7801C2D0Ev,_ZThn20_N7S7801C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C2D1Ev,_ZTv0_n12_N7S7801C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7801C2D1Ev,_ZThn20_N7S7801C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C1D0Ev,_ZTv0_n12_N7S7801C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7801C1D0Ev,_ZThn20_N7S7801C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7801C1D1Ev,_ZTv0_n12_N7S7801C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7801C1D1Ev,_ZThn20_N7S7801C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7801C1 = {  "S7801C1", // class name
  bases_S7801C1, 3,
  &(vtc_S7801C1[0]), // expected_vtbl_contents
  &(vtt_S7801C1[0]), // expected_vtt_contents
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S7801C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7801C1),47, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7801C1),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21835C1  {
  void *s21835c1f0[3];
  ::S21535C2 s21835c1f1;
  ::S2185C10_nt s21835c1f2;
  ::S21811C16 s21835c1f3;
  void  mf21835c1(); // _ZN8S21835C19mf21835c1Ev
  virtual  ~S21835C1(); // _ZN8S21835C1D1Ev
  S21835C1(); // tgen
};
//SIG(1 S21835C1) C1{ vd m Fp[3] FC2{ vd m Fc[3] Fs[2] Fi[4] FC3{ m FC4{ m FL[2]}}} FC5{ m Fp Fi FC6{ m}} FC7{ m Fp Fi[2] FC8{ m}}}


void  S21835C1 ::mf21835c1(){}
 S21835C1 ::~S21835C1(){ note_dtor("S21835C1", this);}
S21835C1 ::S21835C1(){ note_ctor("S21835C1", this);} // tgen

static void Test_S21835C1()
{
  extern Class_Descriptor cd_S21835C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,23)];
    init_test(&cd_S21835C1, buf);
    S21835C1 *dp, &lv = *(dp=new (buf) S21835C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,88), "sizeof(S21835C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21835C1)");
    check_field_offset(lv, s21835c1f0, ABISELECT(8,4), "S21835C1.s21835c1f0");
    check_field_offset(lv, s21835c1f1, ABISELECT(32,16), "S21835C1.s21835c1f1");
    check_field_offset(lv, s21835c1f2, ABISELECT(80,60), "S21835C1.s21835c1f2");
    check_field_offset(lv, s21835c1f3, ABISELECT(96,72), "S21835C1.s21835c1f3");
    test_class_info(&lv, &cd_S21835C1);
    dp->~S21835C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21835C1(Test_S21835C1, "S21835C1", ABISELECT(120,88));

#else // __cplusplus

extern void _ZN8S21835C1C1Ev();
extern void _ZN8S21835C1D1Ev();
Name_Map name_map_S21835C1[] = {
  NSPAIR(_ZN8S21835C1C1Ev),
  NSPAIR(_ZN8S21835C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21835C1[];
extern void _ZN8S21835C1D1Ev();
extern void _ZN8S21835C1D0Ev();
static  VTBL_ENTRY vtc_S21835C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21835C1[0]),
  (VTBL_ENTRY)&_ZN8S21835C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21835C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21835C1[];
extern  VTBL_ENTRY _ZTV8S21835C1[];
Class_Descriptor cd_S21835C1 = {  "S21835C1", // class name
  0,0,//no base classes
  &(vtc_S21835C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,88), // object size
  NSPAIRA(_ZTI8S21835C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21835C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3566C5  {
  virtual  ~S3566C5(); // _ZN7S3566C5D1Ev
  virtual void  v6(); // _ZN7S3566C52v6Ev
  virtual void  v7(); // _ZN7S3566C52v7Ev
  virtual void  v8(); // _ZN7S3566C52v8Ev
  virtual void  v9(); // _ZN7S3566C52v9Ev
  virtual void  v10(); // _ZN7S3566C53v10Ev
  S3566C5(); // tgen
};
//SIG(-1 S3566C5) C1{ vd v1 v2 v3 v4 v5}


 S3566C5 ::~S3566C5(){ note_dtor("S3566C5", this);}
void  S3566C5 ::v6(){vfunc_called(this, "_ZN7S3566C52v6Ev");}
void  S3566C5 ::v7(){vfunc_called(this, "_ZN7S3566C52v7Ev");}
void  S3566C5 ::v8(){vfunc_called(this, "_ZN7S3566C52v8Ev");}
void  S3566C5 ::v9(){vfunc_called(this, "_ZN7S3566C52v9Ev");}
void  S3566C5 ::v10(){vfunc_called(this, "_ZN7S3566C53v10Ev");}
S3566C5 ::S3566C5(){ note_ctor("S3566C5", this);} // tgen

static void Test_S3566C5()
{
  extern Class_Descriptor cd_S3566C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3566C5, buf);
    S3566C5 *dp, &lv = *(dp=new (buf) S3566C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3566C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C5)");
    test_class_info(&lv, &cd_S3566C5);
    dp->~S3566C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C5(Test_S3566C5, "S3566C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3566C5C1Ev();
extern void _ZN7S3566C5D1Ev();
Name_Map name_map_S3566C5[] = {
  NSPAIR(_ZN7S3566C5C1Ev),
  NSPAIR(_ZN7S3566C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3566C5[];
extern void _ZN7S3566C5D1Ev();
extern void _ZN7S3566C5D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY vtc_S3566C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C5[0]),
  (VTBL_ENTRY)&_ZN7S3566C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
Class_Descriptor cd_S3566C5 = {  "S3566C5", // class name
  0,0,//no base classes
  &(vtc_S3566C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3566C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3566C5),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3566C4  : virtual S3566C5 {
  void *s3566c4f0;
  ::S3566C5 s3566c4f1;
  void *s3566c4f2;
  virtual  ~S3566C4(); // _ZN7S3566C4D2Ev
  virtual void  v11(); // _ZN7S3566C43v11Ev
  virtual void  v12(); // _ZN7S3566C43v12Ev
  virtual void  v13(); // _ZN7S3566C43v13Ev
  S3566C4(); // tgen
};
//SIG(-1 S3566C4) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S3566C4 ::~S3566C4(){ note_dtor("S3566C4", this);}
void  S3566C4 ::v11(){vfunc_called(this, "_ZN7S3566C43v11Ev");}
void  S3566C4 ::v12(){vfunc_called(this, "_ZN7S3566C43v12Ev");}
void  S3566C4 ::v13(){vfunc_called(this, "_ZN7S3566C43v13Ev");}
S3566C4 ::S3566C4(){ note_ctor("S3566C4", this);} // tgen

static void Test_S3566C4()
{
  extern Class_Descriptor cd_S3566C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3566C4, buf);
    S3566C4 *dp, &lv = *(dp=new (buf) S3566C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3566C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C4)");
    check_base_class_offset(lv, (S3566C5*), 0, "S3566C4");
    check_field_offset(lv, s3566c4f0, ABISELECT(8,4), "S3566C4.s3566c4f0");
    check_field_offset(lv, s3566c4f1, ABISELECT(16,8), "S3566C4.s3566c4f1");
    check_field_offset(lv, s3566c4f2, ABISELECT(24,12), "S3566C4.s3566c4f2");
    test_class_info(&lv, &cd_S3566C4);
    dp->~S3566C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C4(Test_S3566C4, "S3566C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3566C4C1Ev();
extern void _ZN7S3566C4D2Ev();
Name_Map name_map_S3566C4[] = {
  NSPAIR(_ZN7S3566C4C1Ev),
  NSPAIR(_ZN7S3566C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3566C5;
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
static Base_Class bases_S3566C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3566C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3566C4[];
extern void _ZN7S3566C4D1Ev();
extern void _ZN7S3566C4D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY vtc_S3566C4[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&_ZN7S3566C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3566C4[];
static  VTT_ENTRY vtt_S3566C4[] = {
  {&(_ZTV7S3566C4[9]),  9,19},
  {&(_ZTV7S3566C4[9]),  9,19},
};
extern VTBL_ENTRY _ZTI7S3566C4[];
extern  VTBL_ENTRY _ZTV7S3566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C4[];
Class_Descriptor cd_S3566C4 = {  "S3566C4", // class name
  bases_S3566C4, 1,
  &(vtc_S3566C4[0]), // expected_vtbl_contents
  &(vtt_S3566C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3566C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3566C4),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3566C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3566C3  : virtual S3566C4 {
  virtual  ~S3566C3(); // _ZN7S3566C3D2Ev
  virtual void  v14(); // _ZN7S3566C33v14Ev
  S3566C3(); // tgen
};
//SIG(-1 S3566C3) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S3566C3 ::~S3566C3(){ note_dtor("S3566C3", this);}
void  S3566C3 ::v14(){vfunc_called(this, "_ZN7S3566C33v14Ev");}
S3566C3 ::S3566C3(){ note_ctor("S3566C3", this);} // tgen

static void Test_S3566C3()
{
  extern Class_Descriptor cd_S3566C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3566C3, buf);
    S3566C3 *dp, &lv = *(dp=new (buf) S3566C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3566C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C3)");
    check_base_class_offset(lv, (S3566C5*)(S3566C4*), 0, "S3566C3");
    check_base_class_offset(lv, (S3566C4*), ABISELECT(8,4), "S3566C3");
    test_class_info(&lv, &cd_S3566C3);
    dp->~S3566C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C3(Test_S3566C3, "S3566C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3566C3C1Ev();
extern void _ZN7S3566C3D2Ev();
Name_Map name_map_S3566C3[] = {
  NSPAIR(_ZN7S3566C3C1Ev),
  NSPAIR(_ZN7S3566C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3566C5;
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
extern Class_Descriptor cd_S3566C4;
extern VTBL_ENTRY _ZTI7S3566C4[];
extern  VTBL_ENTRY _ZTV7S3566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C4[];
static Base_Class bases_S3566C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3566C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3566C4,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3566C3[];
extern void _ZN7S3566C3D1Ev();
extern void _ZN7S3566C3D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3566C3D1Ev,_ZThn4_N7S3566C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3566C3D0Ev,_ZThn4_N7S3566C3D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY vtc_S3566C3[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&_ZN7S3566C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3566C3[];
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void _ZN7S3566C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C4D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C3[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C5__7S3566C4__7S3566C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
static  VTT_ENTRY vtt_S3566C3[] = {
  {&(_ZTV7S3566C3[10]),  10,40},
  {&(_ZTV7S3566C3[30]),  30,40},
  {&(_ZTV7S3566C3[10]),  10,40},
  {&(_tg__ZTV7S3566C4__7S3566C3[9]),  9,19},
  {&(_tg__ZTV7S3566C5__7S3566C4__7S3566C3[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3566C3[];
extern  VTBL_ENTRY _ZTV7S3566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C3[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C3D0Ev,_ZThn4_N7S3566C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C3D1Ev,_ZThn4_N7S3566C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3566C3 = {  "S3566C3", // class name
  bases_S3566C3, 2,
  &(vtc_S3566C3[0]), // expected_vtbl_contents
  &(vtt_S3566C3[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3566C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3566C3),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3566C3),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3566C2  : S3566C3 {
  virtual void  v15(); // _ZN7S3566C23v15Ev
  ~S3566C2(); // tgen
  S3566C2(); // tgen
};
//SIG(-1 S3566C2) C1{ BC2{ VBC3{ VBC4{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC4 Fp} vd v10} v1}


void  S3566C2 ::v15(){vfunc_called(this, "_ZN7S3566C23v15Ev");}
S3566C2 ::~S3566C2(){ note_dtor("S3566C2", this);} // tgen
S3566C2 ::S3566C2(){ note_ctor("S3566C2", this);} // tgen

static void Test_S3566C2()
{
  extern Class_Descriptor cd_S3566C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S3566C2, buf);
    S3566C2 *dp, &lv = *(dp=new (buf) S3566C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S3566C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C2)");
    check_base_class_offset(lv, (S3566C5*)(S3566C4*), 0, "S3566C2");
    check_base_class_offset(lv, (S3566C4*)(S3566C3*), ABISELECT(8,4), "S3566C2");
    check_base_class_offset(lv, (S3566C3*), 0, "S3566C2");
    test_class_info(&lv, &cd_S3566C2);
    dp->~S3566C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C2(Test_S3566C2, "S3566C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S3566C2C1Ev();
extern void _ZN7S3566C2D1Ev();
Name_Map name_map_S3566C2[] = {
  NSPAIR(_ZN7S3566C2C1Ev),
  NSPAIR(_ZN7S3566C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3566C5;
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
extern Class_Descriptor cd_S3566C4;
extern VTBL_ENTRY _ZTI7S3566C4[];
extern  VTBL_ENTRY _ZTV7S3566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C4[];
extern Class_Descriptor cd_S3566C3;
extern VTBL_ENTRY _ZTI7S3566C3[];
extern  VTBL_ENTRY _ZTV7S3566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C3[];
static Base_Class bases_S3566C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3566C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3566C4,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3566C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3566C2[];
extern void _ZN7S3566C2D1Ev();
extern void _ZN7S3566C2D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
extern void _ZN7S3566C23v15Ev();
extern void ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3566C2D1Ev,_ZThn4_N7S3566C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev)();
extern void ABISELECT(_ZThn8_N7S3566C2D0Ev,_ZThn4_N7S3566C2D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY vtc_S3566C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C2[0]),
  (VTBL_ENTRY)&_ZN7S3566C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3566C23v15Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3566C2[];
extern void _ZN7S3566C3D1Ev();
extern void _ZN7S3566C3D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C3__7S3566C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&_ZN7S3566C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3566C3D1Ev,_ZThn4_N7S3566C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3566C3D0Ev,_ZThn4_N7S3566C3D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C3__7S3566C2[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void _ZN7S3566C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C4D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C5__7S3566C4__7S3566C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
static  VTT_ENTRY vtt_S3566C2[] = {
  {&(_ZTV7S3566C2[10]),  10,41},
  {&(_tg__ZTV7S3566C3__7S3566C2[10]),  10,18},
  {&(_tg__ZTV7S3566C4__7S3566C3__7S3566C2[12]),  12,22},
  {&(_tg__ZTV7S3566C3__7S3566C2[10]),  10,18},
  {&(_ZTV7S3566C2[31]),  31,41},
  {&(_ZTV7S3566C2[10]),  10,41},
  {&(_tg__ZTV7S3566C4__7S3566C2[9]),  9,19},
  {&(_tg__ZTV7S3566C5__7S3566C4__7S3566C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3566C2[];
extern  VTBL_ENTRY _ZTV7S3566C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C2[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C3D0Ev,_ZThn4_N7S3566C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C3D1Ev,_ZThn4_N7S3566C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C2D0Ev,_ZThn4_N7S3566C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3566C2D1Ev,_ZThn4_N7S3566C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3566C2 = {  "S3566C2", // class name
  bases_S3566C2, 3,
  &(vtc_S3566C2[0]), // expected_vtbl_contents
  &(vtt_S3566C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S3566C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3566C2),41, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3566C2),8, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3566C1  : S3566C2 , virtual S3566C3 {
  __tsi64 s3566c1f0;
  virtual  ~S3566C1(); // _ZN7S3566C1D2Ev
  virtual void  v1(); // _ZN7S3566C12v1Ev
  virtual void  v2(); // _ZN7S3566C12v2Ev
  virtual void  v3(); // _ZN7S3566C12v3Ev
  virtual void  v4(); // _ZN7S3566C12v4Ev
  virtual void  v5(); // _ZN7S3566C12v5Ev
  S3566C1(); // tgen
};
//SIG(1 S3566C1) C1{ BC2{ BC3{ VBC4{ VBC5{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 Fp FC5 Fp} vd v14} v15} VBC3 vd v1 v2 v3 v4 v5 FL}


 S3566C1 ::~S3566C1(){ note_dtor("S3566C1", this);}
void  S3566C1 ::v1(){vfunc_called(this, "_ZN7S3566C12v1Ev");}
void  S3566C1 ::v2(){vfunc_called(this, "_ZN7S3566C12v2Ev");}
void  S3566C1 ::v3(){vfunc_called(this, "_ZN7S3566C12v3Ev");}
void  S3566C1 ::v4(){vfunc_called(this, "_ZN7S3566C12v4Ev");}
void  S3566C1 ::v5(){vfunc_called(this, "_ZN7S3566C12v5Ev");}
S3566C1 ::S3566C1(){ note_ctor("S3566C1", this);} // tgen

static void Test_S3566C1()
{
  extern Class_Descriptor cd_S3566C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S3566C1, buf);
    S3566C1 *dp, &lv = *(dp=new (buf) S3566C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S3566C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3566C1)");
    check_base_class_offset(lv, (S3566C5*)(S3566C4*), 0, "S3566C1");
    check_base_class_offset(lv, (S3566C4*)(S3566C3*)(S3566C2*), ABISELECT(16,12), "S3566C1");
    /*is_ambiguous_... S3566C1::S3566C3 */ AMB_check_base_class_offset(lv, (S3566C4*)(S3566C3*), ABISELECT(16,12), "S3566C1");
    check_base_class_offset(lv, (S3566C3*)(S3566C2*), 0, "S3566C1");
    check_base_class_offset(lv, (S3566C2*), 0, "S3566C1");
    /*is_ambiguous_... S3566C1::S3566C3 */ AMB_check_base_class_offset(lv, (S3566C3*), ABISELECT(48,28), "S3566C1");
    check_field_offset(lv, s3566c1f0, ABISELECT(8,4), "S3566C1.s3566c1f0");
    test_class_info(&lv, &cd_S3566C1);
    dp->~S3566C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3566C1(Test_S3566C1, "S3566C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S3566C1C1Ev();
extern void _ZN7S3566C1D2Ev();
Name_Map name_map_S3566C1[] = {
  NSPAIR(_ZN7S3566C1C1Ev),
  NSPAIR(_ZN7S3566C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3566C5;
extern VTBL_ENTRY _ZTI7S3566C5[];
extern  VTBL_ENTRY _ZTV7S3566C5[];
extern Class_Descriptor cd_S3566C4;
extern VTBL_ENTRY _ZTI7S3566C4[];
extern  VTBL_ENTRY _ZTV7S3566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C4[];
extern Class_Descriptor cd_S3566C3;
extern VTBL_ENTRY _ZTI7S3566C3[];
extern  VTBL_ENTRY _ZTV7S3566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C3[];
extern Class_Descriptor cd_S3566C2;
extern VTBL_ENTRY _ZTI7S3566C2[];
extern  VTBL_ENTRY _ZTV7S3566C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C2[];
extern Class_Descriptor cd_S3566C3;
extern VTBL_ENTRY _ZTI7S3566C3[];
extern  VTBL_ENTRY _ZTV7S3566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C3[];
static Base_Class bases_S3566C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3566C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3566C4,    ABISELECT(16,12), //bcp->offset
    25, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3566C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3566C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3566C3,    ABISELECT(48,28), //bcp->offset
    47, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3566C1[];
extern void _ZN7S3566C1D1Ev();
extern void _ZN7S3566C1D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
extern void _ZN7S3566C23v15Ev();
extern void _ZN7S3566C12v1Ev();
extern void _ZN7S3566C12v2Ev();
extern void _ZN7S3566C12v3Ev();
extern void _ZN7S3566C12v4Ev();
extern void _ZN7S3566C12v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3566C1D1Ev,_ZThn12_N7S3566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S3566C1D0Ev,_ZThn12_N7S3566C1D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
extern void ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3566C1D1Ev,_ZThn28_N7S3566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S3566C1D0Ev,_ZThn28_N7S3566C1D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
static  VTBL_ENTRY vtc_S3566C1[] = {
  ABISELECT(48,28),
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C1[0]),
  (VTBL_ENTRY)&_ZN7S3566C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3566C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3566C12v5Ev,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
  0,
  ABISELECT(-48,-28),
  ABISELECT(-32,-16),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S3566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
};
extern VTBL_ENTRY _ZTV7S3566C1[];
extern void _ZN7S3566C2D1Ev();
extern void _ZN7S3566C2D0Ev();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
extern void _ZN7S3566C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C2__7S3566C1[] = {
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C2[0]),
  (VTBL_ENTRY)&_ZN7S3566C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3566C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3566C23v15Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void _ZN7S3566C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void _ZN7S3566C3D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C37S3566C2__7S3566C1[] = {
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S3566C3D1Ev,_ZThn12_N7S3566C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S3566C3D0Ev,_ZThn12_N7S3566C3D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C37S3566C2__7S3566C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3566C2D1Ev,_ZThn12_N7S3566C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3566C2D0Ev,_ZThn12_N7S3566C2D0Ev)() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C2__7S3566C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void _ZN7S3566C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C4D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C5__7S3566C4__7S3566C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI7S3566C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void _ZN7S3566C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void _ZN7S3566C3D0Ev() __attribute__((weak));
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C3__A1__7S3566C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-32,-16),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C33v14Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
extern void _ZN7S3566C43v11Ev();
extern void _ZN7S3566C43v12Ev();
extern void _ZN7S3566C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C4__7S3566C3__A1__7S3566C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v11Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v12Ev,
  (VTBL_ENTRY)&_ZN7S3566C43v13Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev)();
extern void _ZN7S3566C52v6Ev();
extern void _ZN7S3566C52v7Ev();
extern void _ZN7S3566C52v8Ev();
extern void _ZN7S3566C52v9Ev();
extern void _ZN7S3566C53v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3566C5__7S3566C3__A1__7S3566C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S3566C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3566C52v6Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3566C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3566C53v10Ev,
};
static  VTT_ENTRY vtt_S3566C1[] = {
  {&(_ZTV7S3566C1[11]),  11,66},
  {&(_tg__ZTV7S3566C2__7S3566C1[10]),  10,19},
  {&(_tg__ZTV7S3566C37S3566C2__7S3566C1[10]),  10,18},
  {&(_tg__ZTV7S3566C4__7S3566C37S3566C2__7S3566C1[12]),  12,22},
  {&(_tg__ZTV7S3566C37S3566C2__7S3566C1[10]),  10,18},
  {&(_tg__ZTV7S3566C4__7S3566C2__7S3566C1[12]),  12,22},
  {&(_tg__ZTV7S3566C2__7S3566C1[10]),  10,19},
  {&(_ZTV7S3566C1[37]),  37,66},
  {&(_ZTV7S3566C1[11]),  11,66},
  {&(_ZTV7S3566C1[58]),  58,66},
  {&(_tg__ZTV7S3566C4__7S3566C1[9]),  9,19},
  {&(_tg__ZTV7S3566C5__7S3566C4__7S3566C1[8]),  8,15},
  {&(_tg__ZTV7S3566C3__A1__7S3566C1[10]),  10,18},
  {&(_tg__ZTV7S3566C4__7S3566C3__A1__7S3566C1[12]),  12,22},
  {&(_tg__ZTV7S3566C5__7S3566C3__A1__7S3566C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI7S3566C1[];
extern  VTBL_ENTRY _ZTV7S3566C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3566C1[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D0Ev,_ZTv0_n12_N7S3566C4D0Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C4D1Ev,_ZTv0_n12_N7S3566C4D1Ev), // 
  (VTBL_ENTRY)_ZN7S3566C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C2D0Ev,_ZTv0_n12_N7S3566C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C2D0Ev,_ZThn12_N7S3566C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C2D1Ev,_ZTv0_n12_N7S3566C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C2D1Ev,_ZThn12_N7S3566C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D0Ev,_ZTv0_n12_N7S3566C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S3566C3D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C3D0Ev,_ZThn12_N7S3566C3D0Ev),
  (VTBL_ENTRY)_ZN7S3566C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C3D1Ev,_ZTv0_n12_N7S3566C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S3566C3D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C3D1Ev,_ZThn12_N7S3566C3D1Ev),
  (VTBL_ENTRY)_ZN7S3566C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C1D0Ev,_ZTv0_n12_N7S3566C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3566C1D0Ev,_ZThn28_N7S3566C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C1D0Ev,_ZThn12_N7S3566C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3566C1D1Ev,_ZTv0_n12_N7S3566C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S3566C1D1Ev,_ZThn28_N7S3566C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3566C1D1Ev,_ZThn12_N7S3566C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3566C1 = {  "S3566C1", // class name
  bases_S3566C1, 5,
  &(vtc_S3566C1[0]), // expected_vtbl_contents
  &(vtt_S3566C1[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S3566C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3566C1),66, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3566C1),15, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1751C3  : S6282C14_nt {
  void *s1751c3f0;
  int s1751c3f1[2];
  unsigned int s1751c3f2:1;
  unsigned int s1751c3f3:1;
  unsigned int s1751c3f4:1;
  unsigned int s1751c3f5:1;
  int s1751c3f6[2];
  virtual  ~S1751C3(); // _ZN7S1751C3D1Ev
  S1751C3(); // tgen
};
//SIG(-1 S1751C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1751C3 ::~S1751C3(){ note_dtor("S1751C3", this);}
S1751C3 ::S1751C3(){ note_ctor("S1751C3", this);} // tgen

static void Test_S1751C3()
{
  extern Class_Descriptor cd_S1751C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1751C3, buf);
    S1751C3 *dp, &lv = *(dp=new (buf) S1751C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1751C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1751C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1751C3");
    check_field_offset(lv, s1751c3f0, ABISELECT(16,8), "S1751C3.s1751c3f0");
    check_field_offset(lv, s1751c3f1, ABISELECT(24,12), "S1751C3.s1751c3f1");
    set_bf_and_test(lv, s1751c3f2, ABISELECT(32,20), 0, 1, 1, "S1751C3");
    set_bf_and_test(lv, s1751c3f3, ABISELECT(32,20), 1, 1, 1, "S1751C3");
    set_bf_and_test(lv, s1751c3f4, ABISELECT(32,20), 2, 1, 1, "S1751C3");
    set_bf_and_test(lv, s1751c3f5, ABISELECT(32,20), 3, 1, 1, "S1751C3");
    check_field_offset(lv, s1751c3f6, ABISELECT(36,24), "S1751C3.s1751c3f6");
    test_class_info(&lv, &cd_S1751C3);
    dp->~S1751C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1751C3(Test_S1751C3, "S1751C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1751C3C1Ev();
extern void _ZN7S1751C3D1Ev();
Name_Map name_map_S1751C3[] = {
  NSPAIR(_ZN7S1751C3C1Ev),
  NSPAIR(_ZN7S1751C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1751C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1751C3[];
extern void _ZN7S1751C3D1Ev();
extern void _ZN7S1751C3D0Ev();
static  VTBL_ENTRY vtc_S1751C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1751C3[0]),
  (VTBL_ENTRY)&_ZN7S1751C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1751C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1751C3[];
extern  VTBL_ENTRY _ZTV7S1751C3[];
Class_Descriptor cd_S1751C3 = {  "S1751C3", // class name
  bases_S1751C3, 1,
  &(vtc_S1751C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1751C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1751C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1751C2  : S1751C3 {
  ::S8480C5 s1751c2f0;
  int s1751c2f1[4];
  virtual  ~S1751C2(); // _ZN7S1751C2D1Ev
  S1751C2(); // tgen
};
//SIG(-1 S1751C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd FC4{ Fc[4] Fi Fs[3] Fc[2] Fi[2]} Fi[4]}


 S1751C2 ::~S1751C2(){ note_dtor("S1751C2", this);}
S1751C2 ::S1751C2(){ note_ctor("S1751C2", this);} // tgen

static void Test_S1751C2()
{
  extern Class_Descriptor cd_S1751C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S1751C2, buf);
    S1751C2 *dp, &lv = *(dp=new (buf) S1751C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S1751C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1751C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1751C3*), 0, "S1751C2");
    check_base_class_offset(lv, (S1751C3*), 0, "S1751C2");
    check_field_offset(lv, s1751c2f0, ABISELECT(44,32), "S1751C2.s1751c2f0");
    check_field_offset(lv, s1751c2f1, ABISELECT(68,56), "S1751C2.s1751c2f1");
    test_class_info(&lv, &cd_S1751C2);
    dp->~S1751C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1751C2(Test_S1751C2, "S1751C2", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S1751C2C1Ev();
extern void _ZN7S1751C2D1Ev();
Name_Map name_map_S1751C2[] = {
  NSPAIR(_ZN7S1751C2C1Ev),
  NSPAIR(_ZN7S1751C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1751C3;
extern VTBL_ENTRY _ZTI7S1751C3[];
extern  VTBL_ENTRY _ZTV7S1751C3[];
static Base_Class bases_S1751C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1751C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1751C2[];
extern void _ZN7S1751C2D1Ev();
extern void _ZN7S1751C2D0Ev();
static  VTBL_ENTRY vtc_S1751C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1751C2[0]),
  (VTBL_ENTRY)&_ZN7S1751C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1751C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1751C2[];
extern  VTBL_ENTRY _ZTV7S1751C2[];
Class_Descriptor cd_S1751C2 = {  "S1751C2", // class name
  bases_S1751C2, 2,
  &(vtc_S1751C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S1751C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1751C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1751C1  : S1751C2 {
  ~S1751C1(); // tgen
  S1751C1(); // tgen
};
//SIG(1 S1751C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd FC5{ Fc[4] Fi Fs[3] Fc[2] Fi[2]} Fi[4]}}


S1751C1 ::~S1751C1(){ note_dtor("S1751C1", this);} // tgen
S1751C1 ::S1751C1(){ note_ctor("S1751C1", this);} // tgen

static void Test_S1751C1()
{
  extern Class_Descriptor cd_S1751C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,19)];
    init_test(&cd_S1751C1, buf);
    S1751C1 *dp, &lv = *(dp=new (buf) S1751C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S1751C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1751C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1751C3*)(S1751C2*), 0, "S1751C1");
    check_base_class_offset(lv, (S1751C3*)(S1751C2*), 0, "S1751C1");
    check_base_class_offset(lv, (S1751C2*), 0, "S1751C1");
    test_class_info(&lv, &cd_S1751C1);
    dp->~S1751C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1751C1(Test_S1751C1, "S1751C1", ABISELECT(88,72));

#else // __cplusplus

extern void _ZN7S1751C1C1Ev();
extern void _ZN7S1751C1D1Ev();
Name_Map name_map_S1751C1[] = {
  NSPAIR(_ZN7S1751C1C1Ev),
  NSPAIR(_ZN7S1751C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1751C3;
extern VTBL_ENTRY _ZTI7S1751C3[];
extern  VTBL_ENTRY _ZTV7S1751C3[];
extern Class_Descriptor cd_S1751C2;
extern VTBL_ENTRY _ZTI7S1751C2[];
extern  VTBL_ENTRY _ZTV7S1751C2[];
static Base_Class bases_S1751C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1751C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1751C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1751C1[];
extern void _ZN7S1751C1D1Ev();
extern void _ZN7S1751C1D0Ev();
static  VTBL_ENTRY vtc_S1751C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1751C1[0]),
  (VTBL_ENTRY)&_ZN7S1751C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1751C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1751C1[];
extern  VTBL_ENTRY _ZTV7S1751C1[];
Class_Descriptor cd_S1751C1 = {  "S1751C1", // class name
  bases_S1751C1, 3,
  &(vtc_S1751C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,72), // object size
  NSPAIRA(_ZTI7S1751C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1751C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21104C4  {
  virtual  ~S21104C4(); // _ZN8S21104C4D1Ev
  virtual void  v9(); // _ZN8S21104C42v9Ev
  virtual void  v10(); // _ZN8S21104C43v10Ev
  virtual void  v11(); // _ZN8S21104C43v11Ev
  virtual void  v12(); // _ZN8S21104C43v12Ev
  virtual void  v13(); // _ZN8S21104C43v13Ev
  S21104C4(); // tgen
};
//SIG(-1 S21104C4) C1{ vd v1 v2 v3 v4 v5}


 S21104C4 ::~S21104C4(){ note_dtor("S21104C4", this);}
void  S21104C4 ::v9(){vfunc_called(this, "_ZN8S21104C42v9Ev");}
void  S21104C4 ::v10(){vfunc_called(this, "_ZN8S21104C43v10Ev");}
void  S21104C4 ::v11(){vfunc_called(this, "_ZN8S21104C43v11Ev");}
void  S21104C4 ::v12(){vfunc_called(this, "_ZN8S21104C43v12Ev");}
void  S21104C4 ::v13(){vfunc_called(this, "_ZN8S21104C43v13Ev");}
S21104C4 ::S21104C4(){ note_ctor("S21104C4", this);} // tgen

static void Test_S21104C4()
{
  extern Class_Descriptor cd_S21104C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21104C4, buf);
    S21104C4 *dp, &lv = *(dp=new (buf) S21104C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21104C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21104C4)");
    test_class_info(&lv, &cd_S21104C4);
    dp->~S21104C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21104C4(Test_S21104C4, "S21104C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S21104C4C1Ev();
extern void _ZN8S21104C4D1Ev();
Name_Map name_map_S21104C4[] = {
  NSPAIR(_ZN8S21104C4C1Ev),
  NSPAIR(_ZN8S21104C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21104C4[];
extern void _ZN8S21104C4D1Ev();
extern void _ZN8S21104C4D0Ev();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
static  VTBL_ENTRY vtc_S21104C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C4[0]),
  (VTBL_ENTRY)&_ZN8S21104C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21104C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
};
extern VTBL_ENTRY _ZTI8S21104C4[];
extern  VTBL_ENTRY _ZTV8S21104C4[];
Class_Descriptor cd_S21104C4 = {  "S21104C4", // class name
  0,0,//no base classes
  &(vtc_S21104C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21104C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21104C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21104C3  : virtual S21104C4 {
  void *s21104c3f0;
  ::S21104C4 s21104c3f1;
  void *s21104c3f2;
  virtual  ~S21104C3(); // _ZN8S21104C3D2Ev
  virtual void  v14(); // _ZN8S21104C33v14Ev
  virtual void  v15(); // _ZN8S21104C33v15Ev
  virtual void  v16(); // _ZN8S21104C33v16Ev
  S21104C3(); // tgen
};
//SIG(-1 S21104C3) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S21104C3 ::~S21104C3(){ note_dtor("S21104C3", this);}
void  S21104C3 ::v14(){vfunc_called(this, "_ZN8S21104C33v14Ev");}
void  S21104C3 ::v15(){vfunc_called(this, "_ZN8S21104C33v15Ev");}
void  S21104C3 ::v16(){vfunc_called(this, "_ZN8S21104C33v16Ev");}
S21104C3 ::S21104C3(){ note_ctor("S21104C3", this);} // tgen

static void Test_S21104C3()
{
  extern Class_Descriptor cd_S21104C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21104C3, buf);
    S21104C3 *dp, &lv = *(dp=new (buf) S21104C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21104C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21104C3)");
    check_base_class_offset(lv, (S21104C4*), 0, "S21104C3");
    check_field_offset(lv, s21104c3f0, ABISELECT(8,4), "S21104C3.s21104c3f0");
    check_field_offset(lv, s21104c3f1, ABISELECT(16,8), "S21104C3.s21104c3f1");
    check_field_offset(lv, s21104c3f2, ABISELECT(24,12), "S21104C3.s21104c3f2");
    test_class_info(&lv, &cd_S21104C3);
    dp->~S21104C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21104C3(Test_S21104C3, "S21104C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21104C3C1Ev();
extern void _ZN8S21104C3D2Ev();
Name_Map name_map_S21104C3[] = {
  NSPAIR(_ZN8S21104C3C1Ev),
  NSPAIR(_ZN8S21104C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21104C4;
extern VTBL_ENTRY _ZTI8S21104C4[];
extern  VTBL_ENTRY _ZTV8S21104C4[];
static Base_Class bases_S21104C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21104C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21104C3[];
extern void _ZN8S21104C3D1Ev();
extern void _ZN8S21104C3D0Ev();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY vtc_S21104C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&_ZN8S21104C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21104C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern VTBL_ENTRY _ZTV8S21104C3[];
static  VTT_ENTRY vtt_S21104C3[] = {
  {&(_ZTV8S21104C3[9]),  9,19},
  {&(_ZTV8S21104C3[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S21104C3[];
extern  VTBL_ENTRY _ZTV8S21104C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C3[];
Class_Descriptor cd_S21104C3 = {  "S21104C3", // class name
  bases_S21104C3, 1,
  &(vtc_S21104C3[0]), // expected_vtbl_contents
  &(vtt_S21104C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21104C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21104C3),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21104C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21104C2  : virtual S21104C3 {
  virtual  ~S21104C2(); // _ZN8S21104C2D2Ev
  virtual void  v17(); // _ZN8S21104C23v17Ev
  S21104C2(); // tgen
};
//SIG(-1 S21104C2) C1{ VBC2{ VBC3{ vd v2 v3 v4 v5 v6} vd v7 v8 v9 Fp FC3 Fp} vd v1}


 S21104C2 ::~S21104C2(){ note_dtor("S21104C2", this);}
void  S21104C2 ::v17(){vfunc_called(this, "_ZN8S21104C23v17Ev");}
S21104C2 ::S21104C2(){ note_ctor("S21104C2", this);} // tgen

static void Test_S21104C2()
{
  extern Class_Descriptor cd_S21104C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21104C2, buf);
    S21104C2 *dp, &lv = *(dp=new (buf) S21104C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21104C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21104C2)");
    check_base_class_offset(lv, (S21104C4*)(S21104C3*), 0, "S21104C2");
    check_base_class_offset(lv, (S21104C3*), ABISELECT(8,4), "S21104C2");
    test_class_info(&lv, &cd_S21104C2);
    dp->~S21104C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21104C2(Test_S21104C2, "S21104C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21104C2C1Ev();
extern void _ZN8S21104C2D2Ev();
Name_Map name_map_S21104C2[] = {
  NSPAIR(_ZN8S21104C2C1Ev),
  NSPAIR(_ZN8S21104C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21104C4;
extern VTBL_ENTRY _ZTI8S21104C4[];
extern  VTBL_ENTRY _ZTV8S21104C4[];
extern Class_Descriptor cd_S21104C3;
extern VTBL_ENTRY _ZTI8S21104C3[];
extern  VTBL_ENTRY _ZTV8S21104C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C3[];
static Base_Class bases_S21104C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21104C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21104C3,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21104C2[];
extern void _ZN8S21104C2D1Ev();
extern void _ZN8S21104C2D0Ev();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C23v17Ev();
extern void ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21104C2D1Ev,_ZThn4_N8S21104C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21104C2D0Ev,_ZThn4_N8S21104C2D0Ev)() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY vtc_S21104C2[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C2[0]),
  (VTBL_ENTRY)&_ZN8S21104C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21104C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C23v17Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21104C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern VTBL_ENTRY _ZTV8S21104C2[];
extern void ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev)();
extern void _ZN8S21104C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev)();
extern void _ZN8S21104C3D0Ev() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C3__8S21104C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev)();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C4__8S21104C3__8S21104C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
};
static  VTT_ENTRY vtt_S21104C2[] = {
  {&(_ZTV8S21104C2[10]),  10,40},
  {&(_ZTV8S21104C2[30]),  30,40},
  {&(_ZTV8S21104C2[10]),  10,40},
  {&(_tg__ZTV8S21104C3__8S21104C2[9]),  9,19},
  {&(_tg__ZTV8S21104C4__8S21104C3__8S21104C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S21104C2[];
extern  VTBL_ENTRY _ZTV8S21104C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C2[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21104C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21104C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C2D0Ev,_ZThn4_N8S21104C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C2D1Ev,_ZThn4_N8S21104C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21104C2 = {  "S21104C2", // class name
  bases_S21104C2, 2,
  &(vtc_S21104C2[0]), // expected_vtbl_contents
  &(vtt_S21104C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21104C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21104C2),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21104C2),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21104C1  : virtual S21104C2 {
  virtual  ~S21104C1(); // _ZN8S21104C1D2Ev
  virtual void  v1(); // _ZN8S21104C12v1Ev
  virtual void  v2(); // _ZN8S21104C12v2Ev
  virtual void  v3(); // _ZN8S21104C12v3Ev
  virtual void  v4(); // _ZN8S21104C12v4Ev
  virtual void  v5(); // _ZN8S21104C12v5Ev
  virtual void  v6(); // _ZN8S21104C12v6Ev
  virtual void  v7(); // _ZN8S21104C12v7Ev
  virtual void  v8(); // _ZN8S21104C12v8Ev
  S21104C1(); // tgen
};
//SIG(1 S21104C1) C1{ VBC2{ VBC3{ VBC4{ vd v9 v10 v11 v12 v13} vd v14 v15 v16 Fp FC4 Fp} vd v17} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S21104C1 ::~S21104C1(){ note_dtor("S21104C1", this);}
void  S21104C1 ::v1(){vfunc_called(this, "_ZN8S21104C12v1Ev");}
void  S21104C1 ::v2(){vfunc_called(this, "_ZN8S21104C12v2Ev");}
void  S21104C1 ::v3(){vfunc_called(this, "_ZN8S21104C12v3Ev");}
void  S21104C1 ::v4(){vfunc_called(this, "_ZN8S21104C12v4Ev");}
void  S21104C1 ::v5(){vfunc_called(this, "_ZN8S21104C12v5Ev");}
void  S21104C1 ::v6(){vfunc_called(this, "_ZN8S21104C12v6Ev");}
void  S21104C1 ::v7(){vfunc_called(this, "_ZN8S21104C12v7Ev");}
void  S21104C1 ::v8(){vfunc_called(this, "_ZN8S21104C12v8Ev");}
S21104C1 ::S21104C1(){ note_ctor("S21104C1", this);} // tgen

static void Test_S21104C1()
{
  extern Class_Descriptor cd_S21104C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S21104C1, buf);
    S21104C1 *dp, &lv = *(dp=new (buf) S21104C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S21104C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21104C1)");
    check_base_class_offset(lv, (S21104C4*)(S21104C3*), 0, "S21104C1");
    check_base_class_offset(lv, (S21104C3*)(S21104C2*), ABISELECT(8,4), "S21104C1");
    check_base_class_offset(lv, (S21104C2*), 0, "S21104C1");
    test_class_info(&lv, &cd_S21104C1);
    dp->~S21104C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21104C1(Test_S21104C1, "S21104C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S21104C1C1Ev();
extern void _ZN8S21104C1D2Ev();
Name_Map name_map_S21104C1[] = {
  NSPAIR(_ZN8S21104C1C1Ev),
  NSPAIR(_ZN8S21104C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21104C4;
extern VTBL_ENTRY _ZTI8S21104C4[];
extern  VTBL_ENTRY _ZTV8S21104C4[];
extern Class_Descriptor cd_S21104C3;
extern VTBL_ENTRY _ZTI8S21104C3[];
extern  VTBL_ENTRY _ZTV8S21104C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C3[];
extern Class_Descriptor cd_S21104C2;
extern VTBL_ENTRY _ZTI8S21104C2[];
extern  VTBL_ENTRY _ZTV8S21104C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C2[];
static Base_Class bases_S21104C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21104C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21104C3,    ABISELECT(8,4), //bcp->offset
    28, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21104C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21104C1[];
extern void _ZN8S21104C1D1Ev();
extern void _ZN8S21104C1D0Ev();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C23v17Ev();
extern void _ZN8S21104C12v1Ev();
extern void _ZN8S21104C12v2Ev();
extern void _ZN8S21104C12v3Ev();
extern void _ZN8S21104C12v4Ev();
extern void _ZN8S21104C12v5Ev();
extern void _ZN8S21104C12v6Ev();
extern void _ZN8S21104C12v7Ev();
extern void _ZN8S21104C12v8Ev();
extern void ABISELECT(_ZTv0_n24_N8S21104C1D1Ev,_ZTv0_n12_N8S21104C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S21104C1D1Ev,_ZThn4_N8S21104C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C1D0Ev,_ZTv0_n12_N8S21104C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S21104C1D0Ev,_ZThn4_N8S21104C1D0Ev)() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY vtc_S21104C1[] = {
  0,
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C1[0]),
  (VTBL_ENTRY)&_ZN8S21104C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21104C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C23v17Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v3Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v4Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v5Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v6Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v7Ev,
  (VTBL_ENTRY)&_ZN8S21104C12v8Ev,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21104C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C1D1Ev,_ZTv0_n12_N8S21104C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C1D0Ev,_ZTv0_n12_N8S21104C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern VTBL_ENTRY _ZTV8S21104C1[];
extern void ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev)();
extern void _ZN8S21104C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev)();
extern void _ZN8S21104C2D0Ev() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C23v17Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C2__8S21104C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C23v17Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S21104C2D1Ev,_ZThn4_N8S21104C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S21104C2D0Ev,_ZThn4_N8S21104C2D0Ev)() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C3__8S21104C2__8S21104C1[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21104C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev)();
extern void _ZN8S21104C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev)();
extern void _ZN8S21104C3D0Ev() __attribute__((weak));
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
extern void _ZN8S21104C33v14Ev();
extern void _ZN8S21104C33v15Ev();
extern void _ZN8S21104C33v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C3__8S21104C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v14Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v15Ev,
  (VTBL_ENTRY)&_ZN8S21104C33v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev)();
extern void _ZN8S21104C42v9Ev();
extern void _ZN8S21104C43v10Ev();
extern void _ZN8S21104C43v11Ev();
extern void _ZN8S21104C43v12Ev();
extern void _ZN8S21104C43v13Ev();
static  VTBL_ENTRY _tg__ZTV8S21104C4__8S21104C3__8S21104C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S21104C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21104C42v9Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v10Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v11Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v12Ev,
  (VTBL_ENTRY)&_ZN8S21104C43v13Ev,
};
static  VTT_ENTRY vtt_S21104C1[] = {
  {&(_ZTV8S21104C1[12]),  12,50},
  {&(_ZTV8S21104C1[12]),  12,50},
  {&(_ZTV8S21104C1[40]),  40,50},
  {&(_ZTV8S21104C1[12]),  12,50},
  {&(_tg__ZTV8S21104C2__8S21104C1[10]),  10,18},
  {&(_tg__ZTV8S21104C3__8S21104C2__8S21104C1[12]),  12,22},
  {&(_tg__ZTV8S21104C2__8S21104C1[10]),  10,18},
  {&(_tg__ZTV8S21104C3__8S21104C1[9]),  9,19},
  {&(_tg__ZTV8S21104C4__8S21104C3__8S21104C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S21104C1[];
extern  VTBL_ENTRY _ZTV8S21104C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21104C1[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C3D0Ev,_ZTv0_n12_N8S21104C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21104C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C3D1Ev,_ZTv0_n12_N8S21104C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21104C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C2D0Ev,_ZTv0_n12_N8S21104C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C2D0Ev,_ZThn4_N8S21104C2D0Ev),
  (VTBL_ENTRY)_ZN8S21104C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C2D1Ev,_ZTv0_n12_N8S21104C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C2D1Ev,_ZThn4_N8S21104C2D1Ev),
  (VTBL_ENTRY)_ZN8S21104C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C1D0Ev,_ZTv0_n12_N8S21104C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C1D0Ev,_ZThn4_N8S21104C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21104C1D1Ev,_ZTv0_n12_N8S21104C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21104C1D1Ev,_ZThn4_N8S21104C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21104C1 = {  "S21104C1", // class name
  bases_S21104C1, 3,
  &(vtc_S21104C1[0]), // expected_vtbl_contents
  &(vtt_S21104C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S21104C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21104C1),50, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21104C1),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16093C1  {
  ::S3350C8_nt s16093c1f0;
  ::S11271C3 s16093c1f1;
  void  mf16093c1(); // _ZN8S16093C19mf16093c1Ev
};
//SIG(1 S16093C1) C1{ m FC2{ m Fi} FC3{ FC4{ FC5{ Fc[20]} Fc[16]} Fs Fc[2] FC6{ Fi Fc[128] FC7{ Fi[2] Fc[320] Fi}} FC8{ Fc[12]}}}


void  S16093C1 ::mf16093c1(){}

static void Test_S16093C1()
{
  {
    init_simple_test("S16093C1");
    S16093C1 lv;
    check2(sizeof(lv), 520, "sizeof(S16093C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16093C1)");
    check_field_offset(lv, s16093c1f0, 0, "S16093C1.s16093c1f0");
    check_field_offset(lv, s16093c1f1, 4, "S16093C1.s16093c1f1");
  }
}
static Arrange_To_Call_Me vS16093C1(Test_S16093C1, "S16093C1", 520);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21077C4  {
  virtual  ~S21077C4(); // _ZN8S21077C4D1Ev
  virtual void  v4(); // _ZN8S21077C42v4Ev
  virtual void  v5(); // _ZN8S21077C42v5Ev
  virtual void  v6(); // _ZN8S21077C42v6Ev
  virtual void  v7(); // _ZN8S21077C42v7Ev
  virtual void  v8(); // _ZN8S21077C42v8Ev
  S21077C4(); // tgen
};
//SIG(-1 S21077C4) C1{ vd v1 v2 v3 v4 v5}


 S21077C4 ::~S21077C4(){ note_dtor("S21077C4", this);}
void  S21077C4 ::v4(){vfunc_called(this, "_ZN8S21077C42v4Ev");}
void  S21077C4 ::v5(){vfunc_called(this, "_ZN8S21077C42v5Ev");}
void  S21077C4 ::v6(){vfunc_called(this, "_ZN8S21077C42v6Ev");}
void  S21077C4 ::v7(){vfunc_called(this, "_ZN8S21077C42v7Ev");}
void  S21077C4 ::v8(){vfunc_called(this, "_ZN8S21077C42v8Ev");}
S21077C4 ::S21077C4(){ note_ctor("S21077C4", this);} // tgen

static void Test_S21077C4()
{
  extern Class_Descriptor cd_S21077C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S21077C4, buf);
    S21077C4 *dp, &lv = *(dp=new (buf) S21077C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S21077C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21077C4)");
    test_class_info(&lv, &cd_S21077C4);
    dp->~S21077C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21077C4(Test_S21077C4, "S21077C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S21077C4C1Ev();
extern void _ZN8S21077C4D1Ev();
Name_Map name_map_S21077C4[] = {
  NSPAIR(_ZN8S21077C4C1Ev),
  NSPAIR(_ZN8S21077C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21077C4[];
extern void _ZN8S21077C4D1Ev();
extern void _ZN8S21077C4D0Ev();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
static  VTBL_ENTRY vtc_S21077C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C4[0]),
  (VTBL_ENTRY)&_ZN8S21077C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21077C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S21077C4[];
extern  VTBL_ENTRY _ZTV8S21077C4[];
Class_Descriptor cd_S21077C4 = {  "S21077C4", // class name
  0,0,//no base classes
  &(vtc_S21077C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S21077C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21077C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21077C3  : virtual S21077C4 {
  void *s21077c3f0;
  ::S21077C4 s21077c3f1;
  void *s21077c3f2;
  virtual  ~S21077C3(); // _ZN8S21077C3D2Ev
  virtual void  v9(); // _ZN8S21077C32v9Ev
  virtual void  v10(); // _ZN8S21077C33v10Ev
  virtual void  v11(); // _ZN8S21077C33v11Ev
  S21077C3(); // tgen
};
//SIG(-1 S21077C3) C1{ VBC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fp FC2 Fp}


 S21077C3 ::~S21077C3(){ note_dtor("S21077C3", this);}
void  S21077C3 ::v9(){vfunc_called(this, "_ZN8S21077C32v9Ev");}
void  S21077C3 ::v10(){vfunc_called(this, "_ZN8S21077C33v10Ev");}
void  S21077C3 ::v11(){vfunc_called(this, "_ZN8S21077C33v11Ev");}
S21077C3 ::S21077C3(){ note_ctor("S21077C3", this);} // tgen

static void Test_S21077C3()
{
  extern Class_Descriptor cd_S21077C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21077C3, buf);
    S21077C3 *dp, &lv = *(dp=new (buf) S21077C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21077C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21077C3)");
    check_base_class_offset(lv, (S21077C4*), 0, "S21077C3");
    check_field_offset(lv, s21077c3f0, ABISELECT(8,4), "S21077C3.s21077c3f0");
    check_field_offset(lv, s21077c3f1, ABISELECT(16,8), "S21077C3.s21077c3f1");
    check_field_offset(lv, s21077c3f2, ABISELECT(24,12), "S21077C3.s21077c3f2");
    test_class_info(&lv, &cd_S21077C3);
    dp->~S21077C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21077C3(Test_S21077C3, "S21077C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21077C3C1Ev();
extern void _ZN8S21077C3D2Ev();
Name_Map name_map_S21077C3[] = {
  NSPAIR(_ZN8S21077C3C1Ev),
  NSPAIR(_ZN8S21077C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21077C4;
extern VTBL_ENTRY _ZTI8S21077C4[];
extern  VTBL_ENTRY _ZTV8S21077C4[];
static Base_Class bases_S21077C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21077C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21077C3[];
extern void _ZN8S21077C3D1Ev();
extern void _ZN8S21077C3D0Ev();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY vtc_S21077C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&_ZN8S21077C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21077C3D0Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S21077C3[];
static  VTT_ENTRY vtt_S21077C3[] = {
  {&(_ZTV8S21077C3[9]),  9,19},
  {&(_ZTV8S21077C3[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S21077C3[];
extern  VTBL_ENTRY _ZTV8S21077C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C3[];
Class_Descriptor cd_S21077C3 = {  "S21077C3", // class name
  bases_S21077C3, 1,
  &(vtc_S21077C3[0]), // expected_vtbl_contents
  &(vtt_S21077C3[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21077C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21077C3),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21077C3),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21077C2  : virtual S21077C3 {
  char s21077c2f0;
  virtual  ~S21077C2(); // _ZN8S21077C2D2Ev
  virtual void  v12(); // _ZN8S21077C23v12Ev
  virtual void  v13(); // _ZN8S21077C23v13Ev
  virtual void  v14(); // _ZN8S21077C23v14Ev
  virtual void  v15(); // _ZN8S21077C23v15Ev
  virtual void  v16(); // _ZN8S21077C23v16Ev
  S21077C2(); // tgen
};
//SIG(-1 S21077C2) C1{ VBC2{ VBC3{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 Fp FC3 Fp} vd v1 v2 v3 v4 v5 Fc}


 S21077C2 ::~S21077C2(){ note_dtor("S21077C2", this);}
void  S21077C2 ::v12(){vfunc_called(this, "_ZN8S21077C23v12Ev");}
void  S21077C2 ::v13(){vfunc_called(this, "_ZN8S21077C23v13Ev");}
void  S21077C2 ::v14(){vfunc_called(this, "_ZN8S21077C23v14Ev");}
void  S21077C2 ::v15(){vfunc_called(this, "_ZN8S21077C23v15Ev");}
void  S21077C2 ::v16(){vfunc_called(this, "_ZN8S21077C23v16Ev");}
S21077C2 ::S21077C2(){ note_ctor("S21077C2", this);} // tgen

static void Test_S21077C2()
{
  extern Class_Descriptor cd_S21077C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21077C2, buf);
    S21077C2 *dp, &lv = *(dp=new (buf) S21077C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21077C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21077C2)");
    check_base_class_offset(lv, (S21077C4*)(S21077C3*), 0, "S21077C2");
    check_base_class_offset(lv, (S21077C3*), ABISELECT(16,8), "S21077C2");
    check_field_offset(lv, s21077c2f0, ABISELECT(8,4), "S21077C2.s21077c2f0");
    test_class_info(&lv, &cd_S21077C2);
    dp->~S21077C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21077C2(Test_S21077C2, "S21077C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21077C2C1Ev();
extern void _ZN8S21077C2D2Ev();
Name_Map name_map_S21077C2[] = {
  NSPAIR(_ZN8S21077C2C1Ev),
  NSPAIR(_ZN8S21077C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21077C4;
extern VTBL_ENTRY _ZTI8S21077C4[];
extern  VTBL_ENTRY _ZTV8S21077C4[];
extern Class_Descriptor cd_S21077C3;
extern VTBL_ENTRY _ZTI8S21077C3[];
extern  VTBL_ENTRY _ZTV8S21077C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C3[];
static Base_Class bases_S21077C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21077C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21077C3,    ABISELECT(16,8), //bcp->offset
    22, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21077C2[];
extern void _ZN8S21077C2D1Ev();
extern void _ZN8S21077C2D0Ev();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C23v12Ev();
extern void _ZN8S21077C23v13Ev();
extern void _ZN8S21077C23v14Ev();
extern void _ZN8S21077C23v15Ev();
extern void _ZN8S21077C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21077C2D1Ev,_ZThn8_N8S21077C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21077C2D0Ev,_ZThn8_N8S21077C2D0Ev)() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY vtc_S21077C2[] = {
  0,
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&_ZN8S21077C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21077C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v14Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v15Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S21077C2[];
extern void ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev)();
extern void _ZN8S21077C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev)();
extern void _ZN8S21077C3D0Ev() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C3__8S21077C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev)();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C4__8S21077C3__8S21077C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
};
static  VTT_ENTRY vtt_S21077C2[] = {
  {&(_ZTV8S21077C2[10]),  10,44},
  {&(_ZTV8S21077C2[34]),  34,44},
  {&(_ZTV8S21077C2[10]),  10,44},
  {&(_tg__ZTV8S21077C3__8S21077C2[9]),  9,19},
  {&(_tg__ZTV8S21077C4__8S21077C3__8S21077C2[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S21077C2[];
extern  VTBL_ENTRY _ZTV8S21077C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C2[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21077C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21077C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C2D0Ev,_ZThn8_N8S21077C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C2D1Ev,_ZThn8_N8S21077C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21077C2 = {  "S21077C2", // class name
  bases_S21077C2, 2,
  &(vtc_S21077C2[0]), // expected_vtbl_contents
  &(vtt_S21077C2[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21077C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21077C2),44, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21077C2),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21077C1  : virtual S21077C2 {
  void *s21077c1f0;
  virtual void  v1(); // _ZN8S21077C12v1Ev
  virtual void  v2(); // _ZN8S21077C12v2Ev
  virtual void  v3(); // _ZN8S21077C12v3Ev
  ~S21077C1(); // tgen
  S21077C1(); // tgen
};
//SIG(1 S21077C1) C1{ VBC2{ VBC3{ VBC4{ vd v4 v5 v6 v7 v8} vd v9 v10 v11 Fp FC4 Fp} vd v12 v13 v14 v15 v16 Fc} v1 v2 v3 Fp}


void  S21077C1 ::v1(){vfunc_called(this, "_ZN8S21077C12v1Ev");}
void  S21077C1 ::v2(){vfunc_called(this, "_ZN8S21077C12v2Ev");}
void  S21077C1 ::v3(){vfunc_called(this, "_ZN8S21077C12v3Ev");}
S21077C1 ::~S21077C1(){ note_dtor("S21077C1", this);} // tgen
S21077C1 ::S21077C1(){ note_ctor("S21077C1", this);} // tgen

static void Test_S21077C1()
{
  extern Class_Descriptor cd_S21077C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S21077C1, buf);
    S21077C1 *dp, &lv = *(dp=new (buf) S21077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S21077C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21077C1)");
    check_base_class_offset(lv, (S21077C4*)(S21077C3*), 0, "S21077C1");
    check_base_class_offset(lv, (S21077C3*)(S21077C2*), ABISELECT(32,16), "S21077C1");
    check_base_class_offset(lv, (S21077C2*), ABISELECT(16,8), "S21077C1");
    check_field_offset(lv, s21077c1f0, ABISELECT(8,4), "S21077C1.s21077c1f0");
    test_class_info(&lv, &cd_S21077C1);
    dp->~S21077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21077C1(Test_S21077C1, "S21077C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S21077C1C1Ev();
extern void _ZN8S21077C1D1Ev();
Name_Map name_map_S21077C1[] = {
  NSPAIR(_ZN8S21077C1C1Ev),
  NSPAIR(_ZN8S21077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21077C4;
extern VTBL_ENTRY _ZTI8S21077C4[];
extern  VTBL_ENTRY _ZTV8S21077C4[];
extern Class_Descriptor cd_S21077C3;
extern VTBL_ENTRY _ZTI8S21077C3[];
extern  VTBL_ENTRY _ZTV8S21077C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C3[];
extern Class_Descriptor cd_S21077C2;
extern VTBL_ENTRY _ZTI8S21077C2[];
extern  VTBL_ENTRY _ZTV8S21077C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C2[];
static Base_Class bases_S21077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21077C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21077C3,    ABISELECT(32,16), //bcp->offset
    48, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21077C2,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21077C1[];
extern void _ZN8S21077C1D1Ev();
extern void _ZN8S21077C1D0Ev();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C12v1Ev();
extern void _ZN8S21077C12v2Ev();
extern void _ZN8S21077C12v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S21077C1D1Ev,_ZThn8_N8S21077C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S21077C1D0Ev,_ZThn8_N8S21077C1D0Ev)() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C23v12Ev();
extern void _ZN8S21077C23v13Ev();
extern void _ZN8S21077C23v14Ev();
extern void _ZN8S21077C23v15Ev();
extern void _ZN8S21077C23v16Ev();
extern void ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S21077C1D1Ev,_ZThn16_N8S21077C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S21077C1D0Ev,_ZThn16_N8S21077C1D0Ev)() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY vtc_S21077C1[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C1[0]),
  (VTBL_ENTRY)&_ZN8S21077C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21077C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21077C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21077C12v3Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21077C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v14Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v15Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v16Ev,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S21077C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern VTBL_ENTRY _ZTV8S21077C1[];
extern void ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev)();
extern void _ZN8S21077C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev)();
extern void _ZN8S21077C2D0Ev() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C23v12Ev();
extern void _ZN8S21077C23v13Ev();
extern void _ZN8S21077C23v14Ev();
extern void _ZN8S21077C23v15Ev();
extern void _ZN8S21077C23v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C2__8S21077C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v13Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v14Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v15Ev,
  (VTBL_ENTRY)&_ZN8S21077C23v16Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S21077C2D1Ev,_ZThn8_N8S21077C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S21077C2D0Ev,_ZThn8_N8S21077C2D0Ev)() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C3__8S21077C2__8S21077C1[] = {
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev)();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C4__8S21077C2__8S21077C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21077C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev)();
extern void _ZN8S21077C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev)();
extern void _ZN8S21077C3D0Ev() __attribute__((weak));
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
extern void _ZN8S21077C32v9Ev();
extern void _ZN8S21077C33v10Ev();
extern void _ZN8S21077C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C3__8S21077C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
  (VTBL_ENTRY)&_ZN8S21077C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21077C33v11Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev)();
extern void _ZN8S21077C42v4Ev();
extern void _ZN8S21077C42v5Ev();
extern void _ZN8S21077C42v6Ev();
extern void _ZN8S21077C42v7Ev();
extern void _ZN8S21077C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21077C4__8S21077C3__8S21077C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21077C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21077C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21077C42v8Ev,
};
static  VTT_ENTRY vtt_S21077C1[] = {
  {&(_ZTV8S21077C1[11]),  11,70},
  {&(_ZTV8S21077C1[36]),  36,70},
  {&(_ZTV8S21077C1[60]),  60,70},
  {&(_ZTV8S21077C1[11]),  11,70},
  {&(_tg__ZTV8S21077C2__8S21077C1[10]),  10,22},
  {&(_tg__ZTV8S21077C3__8S21077C2__8S21077C1[12]),  12,22},
  {&(_tg__ZTV8S21077C4__8S21077C2__8S21077C1[8]),  8,15},
  {&(_tg__ZTV8S21077C3__8S21077C1[9]),  9,19},
  {&(_tg__ZTV8S21077C4__8S21077C3__8S21077C1[8]),  8,15},
};
extern VTBL_ENTRY _ZTI8S21077C1[];
extern  VTBL_ENTRY _ZTV8S21077C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21077C1[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C3D0Ev,_ZTv0_n12_N8S21077C3D0Ev), // 
  (VTBL_ENTRY)_ZN8S21077C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C3D1Ev,_ZTv0_n12_N8S21077C3D1Ev), // 
  (VTBL_ENTRY)_ZN8S21077C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C2D0Ev,_ZTv0_n12_N8S21077C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C2D0Ev,_ZThn8_N8S21077C2D0Ev),
  (VTBL_ENTRY)_ZN8S21077C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C2D1Ev,_ZTv0_n12_N8S21077C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C2D1Ev,_ZThn8_N8S21077C2D1Ev),
  (VTBL_ENTRY)_ZN8S21077C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C1D0Ev,_ZTv0_n12_N8S21077C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21077C1D0Ev,_ZThn16_N8S21077C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C1D0Ev,_ZThn8_N8S21077C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21077C1D1Ev,_ZTv0_n12_N8S21077C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21077C1D1Ev,_ZThn16_N8S21077C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21077C1D1Ev,_ZThn8_N8S21077C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21077C1 = {  "S21077C1", // class name
  bases_S21077C1, 3,
  &(vtc_S21077C1[0]), // expected_vtbl_contents
  &(vtt_S21077C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S21077C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21077C1),70, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21077C1),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1754C3  : S6282C14_nt {
  void *s1754c3f0;
  int s1754c3f1[2];
  unsigned int s1754c3f2:1;
  unsigned int s1754c3f3:1;
  unsigned int s1754c3f4:1;
  unsigned int s1754c3f5:1;
  int s1754c3f6[2];
  virtual  ~S1754C3(); // _ZN7S1754C3D1Ev
  S1754C3(); // tgen
};
//SIG(-1 S1754C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1754C3 ::~S1754C3(){ note_dtor("S1754C3", this);}
S1754C3 ::S1754C3(){ note_ctor("S1754C3", this);} // tgen

static void Test_S1754C3()
{
  extern Class_Descriptor cd_S1754C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1754C3, buf);
    S1754C3 *dp, &lv = *(dp=new (buf) S1754C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1754C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1754C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1754C3");
    check_field_offset(lv, s1754c3f0, ABISELECT(16,8), "S1754C3.s1754c3f0");
    check_field_offset(lv, s1754c3f1, ABISELECT(24,12), "S1754C3.s1754c3f1");
    set_bf_and_test(lv, s1754c3f2, ABISELECT(32,20), 0, 1, 1, "S1754C3");
    set_bf_and_test(lv, s1754c3f3, ABISELECT(32,20), 1, 1, 1, "S1754C3");
    set_bf_and_test(lv, s1754c3f4, ABISELECT(32,20), 2, 1, 1, "S1754C3");
    set_bf_and_test(lv, s1754c3f5, ABISELECT(32,20), 3, 1, 1, "S1754C3");
    check_field_offset(lv, s1754c3f6, ABISELECT(36,24), "S1754C3.s1754c3f6");
    test_class_info(&lv, &cd_S1754C3);
    dp->~S1754C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1754C3(Test_S1754C3, "S1754C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1754C3C1Ev();
extern void _ZN7S1754C3D1Ev();
Name_Map name_map_S1754C3[] = {
  NSPAIR(_ZN7S1754C3C1Ev),
  NSPAIR(_ZN7S1754C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1754C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1754C3[];
extern void _ZN7S1754C3D1Ev();
extern void _ZN7S1754C3D0Ev();
static  VTBL_ENTRY vtc_S1754C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1754C3[0]),
  (VTBL_ENTRY)&_ZN7S1754C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1754C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1754C3[];
extern  VTBL_ENTRY _ZTV7S1754C3[];
Class_Descriptor cd_S1754C3 = {  "S1754C3", // class name
  bases_S1754C3, 1,
  &(vtc_S1754C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1754C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1754C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1754C2  : S1754C3 {
  void *s1754c2f0;
  virtual  ~S1754C2(); // _ZN7S1754C2D1Ev
  S1754C2(); // tgen
};
//SIG(-1 S1754C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fp}


 S1754C2 ::~S1754C2(){ note_dtor("S1754C2", this);}
S1754C2 ::S1754C2(){ note_ctor("S1754C2", this);} // tgen

static void Test_S1754C2()
{
  extern Class_Descriptor cd_S1754C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S1754C2, buf);
    S1754C2 *dp, &lv = *(dp=new (buf) S1754C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S1754C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1754C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1754C3*), 0, "S1754C2");
    check_base_class_offset(lv, (S1754C3*), 0, "S1754C2");
    check_field_offset(lv, s1754c2f0, ABISELECT(48,32), "S1754C2.s1754c2f0");
    test_class_info(&lv, &cd_S1754C2);
    dp->~S1754C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1754C2(Test_S1754C2, "S1754C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S1754C2C1Ev();
extern void _ZN7S1754C2D1Ev();
Name_Map name_map_S1754C2[] = {
  NSPAIR(_ZN7S1754C2C1Ev),
  NSPAIR(_ZN7S1754C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1754C3;
extern VTBL_ENTRY _ZTI7S1754C3[];
extern  VTBL_ENTRY _ZTV7S1754C3[];
static Base_Class bases_S1754C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1754C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1754C2[];
extern void _ZN7S1754C2D1Ev();
extern void _ZN7S1754C2D0Ev();
static  VTBL_ENTRY vtc_S1754C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1754C2[0]),
  (VTBL_ENTRY)&_ZN7S1754C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1754C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1754C2[];
extern  VTBL_ENTRY _ZTV7S1754C2[];
Class_Descriptor cd_S1754C2 = {  "S1754C2", // class name
  bases_S1754C2, 2,
  &(vtc_S1754C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S1754C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1754C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1754C5  {
  int s1754c5f0[3];
  short s1754c5f1[2];
};
//SIG(-1 S1754C5) C1{ Fi[3] Fs[2]}



static void Test_S1754C5()
{
  {
    init_simple_test("S1754C5");
    S1754C5 lv;
    check2(sizeof(lv), 16, "sizeof(S1754C5)");
    check2(__alignof__(lv), 4, "__alignof__(S1754C5)");
    check_field_offset(lv, s1754c5f0, 0, "S1754C5.s1754c5f0");
    check_field_offset(lv, s1754c5f1, 12, "S1754C5.s1754c5f1");
  }
}
static Arrange_To_Call_Me vS1754C5(Test_S1754C5, "S1754C5", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1754C1  : S1754C2 {
  ::S1754C5 s1754c1f0;
  void *s1754c1f1;
  char s1754c1f2[16];
  virtual  ~S1754C1(); // _ZN7S1754C1D1Ev
  S1754C1(); // tgen
};
//SIG(1 S1754C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fp} vd FC5{ Fi[3] Fs[2]} Fp Fc[16]}


 S1754C1 ::~S1754C1(){ note_dtor("S1754C1", this);}
S1754C1 ::S1754C1(){ note_ctor("S1754C1", this);} // tgen

static void Test_S1754C1()
{
  extern Class_Descriptor cd_S1754C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S1754C1, buf);
    S1754C1 *dp, &lv = *(dp=new (buf) S1754C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S1754C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1754C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1754C3*)(S1754C2*), 0, "S1754C1");
    check_base_class_offset(lv, (S1754C3*)(S1754C2*), 0, "S1754C1");
    check_base_class_offset(lv, (S1754C2*), 0, "S1754C1");
    check_field_offset(lv, s1754c1f0, ABISELECT(56,36), "S1754C1.s1754c1f0");
    check_field_offset(lv, s1754c1f1, ABISELECT(72,52), "S1754C1.s1754c1f1");
    check_field_offset(lv, s1754c1f2, ABISELECT(80,56), "S1754C1.s1754c1f2");
    test_class_info(&lv, &cd_S1754C1);
    dp->~S1754C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1754C1(Test_S1754C1, "S1754C1", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S1754C1C1Ev();
extern void _ZN7S1754C1D1Ev();
Name_Map name_map_S1754C1[] = {
  NSPAIR(_ZN7S1754C1C1Ev),
  NSPAIR(_ZN7S1754C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1754C3;
extern VTBL_ENTRY _ZTI7S1754C3[];
extern  VTBL_ENTRY _ZTV7S1754C3[];
extern Class_Descriptor cd_S1754C2;
extern VTBL_ENTRY _ZTI7S1754C2[];
extern  VTBL_ENTRY _ZTV7S1754C2[];
static Base_Class bases_S1754C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1754C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1754C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1754C1[];
extern void _ZN7S1754C1D1Ev();
extern void _ZN7S1754C1D0Ev();
static  VTBL_ENTRY vtc_S1754C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1754C1[0]),
  (VTBL_ENTRY)&_ZN7S1754C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1754C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1754C1[];
extern  VTBL_ENTRY _ZTV7S1754C1[];
Class_Descriptor cd_S1754C1 = {  "S1754C1", // class name
  bases_S1754C1, 3,
  &(vtc_S1754C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S1754C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1754C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C2  : virtual S2121C38 {
  ~S7499C2(); // tgen
  S7499C2(); // tgen
};
//SIG(-1 S7499C2) C1{ VBC2{ m}}


S7499C2 ::~S7499C2(){ note_dtor("S7499C2", this);} // tgen
S7499C2 ::S7499C2(){ note_ctor("S7499C2", this);} // tgen

static void Test_S7499C2()
{
  extern Class_Descriptor cd_S7499C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7499C2, buf);
    S7499C2 *dp, &lv = *(dp=new (buf) S7499C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7499C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C2)");
    check_base_class_offset(lv, (S2121C38*), 0, "S7499C2");
    test_class_info(&lv, &cd_S7499C2);
    dp->~S7499C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C2(Test_S7499C2, "S7499C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7499C2C1Ev();
extern void _ZN7S7499C2D1Ev();
Name_Map name_map_S7499C2[] = {
  NSPAIR(_ZN7S7499C2C1Ev),
  NSPAIR(_ZN7S7499C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S7499C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C2[];
static  VTBL_ENTRY vtc_S7499C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C2[0]),
};
extern VTBL_ENTRY _ZTV7S7499C2[];
static  VTT_ENTRY vtt_S7499C2[] = {
  {&(_ZTV7S7499C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7499C2[];
extern  VTBL_ENTRY _ZTV7S7499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C2[];
Class_Descriptor cd_S7499C2 = {  "S7499C2", // class name
  bases_S7499C2, 1,
  &(vtc_S7499C2[0]), // expected_vtbl_contents
  &(vtt_S7499C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7499C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7499C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C2),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C9  {
  virtual void  v1(); // _ZN7S7499C92v1Ev
  ~S7499C9(); // tgen
  S7499C9(); // tgen
};
//SIG(-1 S7499C9) C1{ v1}


void  S7499C9 ::v1(){vfunc_called(this, "_ZN7S7499C92v1Ev");}
S7499C9 ::~S7499C9(){ note_dtor("S7499C9", this);} // tgen
S7499C9 ::S7499C9(){ note_ctor("S7499C9", this);} // tgen

static void Test_S7499C9()
{
  extern Class_Descriptor cd_S7499C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7499C9, buf);
    S7499C9 *dp, &lv = *(dp=new (buf) S7499C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7499C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C9)");
    test_class_info(&lv, &cd_S7499C9);
    dp->~S7499C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C9(Test_S7499C9, "S7499C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7499C9C1Ev();
extern void _ZN7S7499C9D1Ev();
Name_Map name_map_S7499C9[] = {
  NSPAIR(_ZN7S7499C9C1Ev),
  NSPAIR(_ZN7S7499C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7499C9[];
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C9[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
Class_Descriptor cd_S7499C9 = {  "S7499C9", // class name
  0,0,//no base classes
  &(vtc_S7499C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7499C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7499C9),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C8  : virtual S2121C38 , S7499C9 , virtual S2121C28 {
  ~S7499C8(); // tgen
  S7499C8(); // tgen
};
//SIG(-1 S7499C8) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S7499C8 ::~S7499C8(){ note_dtor("S7499C8", this);} // tgen
S7499C8 ::S7499C8(){ note_ctor("S7499C8", this);} // tgen

static void Test_S7499C8()
{
  extern Class_Descriptor cd_S7499C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7499C8, buf);
    S7499C8 *dp, &lv = *(dp=new (buf) S7499C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7499C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C8)");
    check_base_class_offset(lv, (S2121C38*), 0, "S7499C8");
    check_base_class_offset(lv, (S7499C9*), 0, "S7499C8");
    check_base_class_offset(lv, (S2121C28*), 0, "S7499C8");
    test_class_info(&lv, &cd_S7499C8);
    dp->~S7499C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C8(Test_S7499C8, "S7499C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7499C8C1Ev();
extern void _ZN7S7499C8D1Ev();
Name_Map name_map_S7499C8[] = {
  NSPAIR(_ZN7S7499C8C1Ev),
  NSPAIR(_ZN7S7499C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S7499C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7499C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C8[];
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S7499C8[];
static  VTT_ENTRY vtt_S7499C8[] = {
  {&(_ZTV7S7499C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
Class_Descriptor cd_S7499C8 = {  "S7499C8", // class name
  bases_S7499C8, 3,
  &(vtc_S7499C8[0]), // expected_vtbl_contents
  &(vtt_S7499C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7499C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7499C8),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C8),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C7  : S2121C38 , S7499C8 {
  virtual void  v2(); // _ZN7S7499C72v2Ev
  ~S7499C7(); // tgen
  S7499C7(); // tgen
};
//SIG(-1 S7499C7) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S7499C7 ::v2(){vfunc_called(this, "_ZN7S7499C72v2Ev");}
S7499C7 ::~S7499C7(){ note_dtor("S7499C7", this);} // tgen
S7499C7 ::S7499C7(){ note_ctor("S7499C7", this);} // tgen

static void Test_S7499C7()
{
  extern Class_Descriptor cd_S7499C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7499C7, buf);
    S7499C7 *dp, &lv = *(dp=new (buf) S7499C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7499C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C7)");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S7499C7");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*), ABISELECT(8,4), "S7499C7");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*), 0, "S7499C7");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*), 0, "S7499C7");
    check_base_class_offset(lv, (S7499C8*), 0, "S7499C7");
    test_class_info(&lv, &cd_S7499C7);
    dp->~S7499C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C7(Test_S7499C7, "S7499C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7499C7C1Ev();
extern void _ZN7S7499C7D1Ev();
Name_Map name_map_S7499C7[] = {
  NSPAIR(_ZN7S7499C7C1Ev),
  NSPAIR(_ZN7S7499C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
static Base_Class bases_S7499C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7499C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7499C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C7[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY vtc_S7499C7[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S7499C7[];
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C8__7S7499C7[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C7[] = {
  {&(_ZTV7S7499C7[4]),  4,6},
  {&(_tg__ZTV7S7499C8__7S7499C7[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
Class_Descriptor cd_S7499C7 = {  "S7499C7", // class name
  bases_S7499C7, 5,
  &(vtc_S7499C7[0]), // expected_vtbl_contents
  &(vtt_S7499C7[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7499C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7499C7),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C7),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C6  : virtual S7499C7 {
  int s7499c6f0;
  ~S7499C6(); // tgen
  S7499C6(); // tgen
};
//SIG(-1 S7499C6) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S7499C6 ::~S7499C6(){ note_dtor("S7499C6", this);} // tgen
S7499C6 ::S7499C6(){ note_ctor("S7499C6", this);} // tgen

static void Test_S7499C6()
{
  extern Class_Descriptor cd_S7499C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7499C6, buf);
    S7499C6 *dp, &lv = *(dp=new (buf) S7499C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7499C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C6)");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C7*), 0, "S7499C6");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*)(S7499C7*), ABISELECT(12,8), "S7499C6");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*)(S7499C7*), 0, "S7499C6");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*)(S7499C7*), 0, "S7499C6");
    check_base_class_offset(lv, (S7499C8*)(S7499C7*), 0, "S7499C6");
    check_base_class_offset(lv, (S7499C7*), 0, "S7499C6");
    check_field_offset(lv, s7499c6f0, ABISELECT(8,4), "S7499C6.s7499c6f0");
    test_class_info(&lv, &cd_S7499C6);
    dp->~S7499C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C6(Test_S7499C6, "S7499C6", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7499C6C1Ev();
extern void _ZN7S7499C6D1Ev();
Name_Map name_map_S7499C6[] = {
  NSPAIR(_ZN7S7499C6C1Ev),
  NSPAIR(_ZN7S7499C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
extern Class_Descriptor cd_S7499C7;
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
static Base_Class bases_S7499C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7499C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7499C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7499C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C6[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY vtc_S7499C6[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C6[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S7499C6[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C7__7S7499C6[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C87S7499C7__7S7499C6[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C6[] = {
  {&(_ZTV7S7499C6[7]),  7,9},
  {&(_ZTV7S7499C6[7]),  7,9},
  {&(_tg__ZTV7S7499C7__7S7499C6[4]),  4,6},
  {&(_tg__ZTV7S7499C87S7499C7__7S7499C6[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C6[];
extern  VTBL_ENTRY _ZTV7S7499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C6[];
Class_Descriptor cd_S7499C6 = {  "S7499C6", // class name
  bases_S7499C6, 6,
  &(vtc_S7499C6[0]), // expected_vtbl_contents
  &(vtt_S7499C6[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7499C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7499C6),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C6),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C5  : S7499C6 , virtual S7499C9 {
  __tsu64 s7499c5f0:1;
  ~S7499C5(); // tgen
  S7499C5(); // tgen
};
//SIG(-1 S7499C5) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} VBC6 FL:1}


S7499C5 ::~S7499C5(){ note_dtor("S7499C5", this);} // tgen
S7499C5 ::S7499C5(){ note_ctor("S7499C5", this);} // tgen

static void Test_S7499C5()
{
  extern Class_Descriptor cd_S7499C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7499C5, buf);
    S7499C5 *dp, &lv = *(dp=new (buf) S7499C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7499C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C5)");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C7*), 0, "S7499C5");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*)(S7499C7*), ABISELECT(13,9), "S7499C5");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*)(S7499C7*), 0, "S7499C5");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*)(S7499C7*), 0, "S7499C5");
    check_base_class_offset(lv, (S7499C8*)(S7499C7*), 0, "S7499C5");
    check_base_class_offset(lv, (S7499C7*)(S7499C6*), 0, "S7499C5");
    check_base_class_offset(lv, (S7499C6*), 0, "S7499C5");
    /*is_ambiguous_... S7499C5::S7499C9 */ AMB_check_base_class_offset(lv, (S7499C9*), ABISELECT(16,12), "S7499C5");
    set_bf_and_test(lv, s7499c5f0, ABISELECT(12,8), 0, 1, 1, "S7499C5");
    test_class_info(&lv, &cd_S7499C5);
    dp->~S7499C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C5(Test_S7499C5, "S7499C5", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7499C5C1Ev();
extern void _ZN7S7499C5D1Ev();
Name_Map name_map_S7499C5[] = {
  NSPAIR(_ZN7S7499C5C1Ev),
  NSPAIR(_ZN7S7499C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
extern Class_Descriptor cd_S7499C7;
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
extern Class_Descriptor cd_S7499C6;
extern VTBL_ENTRY _ZTI7S7499C6[];
extern  VTBL_ENTRY _ZTV7S7499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C6[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
static Base_Class bases_S7499C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(13,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7499C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7499C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7499C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7499C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7499C9,    ABISELECT(16,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C5[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C5[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S7499C5[];
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C6__7S7499C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C6[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C7__7S7499C5[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C87S7499C7__7S7499C5[] = {
  0,
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C5[] = {
  {&(_ZTV7S7499C5[8]),  8,14},
  {&(_tg__ZTV7S7499C6__7S7499C5[7]),  7,9},
  {&(_tg__ZTV7S7499C6__7S7499C5[7]),  7,9},
  {&(_ZTV7S7499C5[8]),  8,14},
  {&(_ZTV7S7499C5[13]),  13,14},
  {&(_tg__ZTV7S7499C7__7S7499C5[4]),  4,6},
  {&(_tg__ZTV7S7499C87S7499C7__7S7499C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C5[];
extern  VTBL_ENTRY _ZTV7S7499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C5[];
Class_Descriptor cd_S7499C5 = {  "S7499C5", // class name
  bases_S7499C5, 8,
  &(vtc_S7499C5[0]), // expected_vtbl_contents
  &(vtt_S7499C5[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7499C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7499C5),14, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C5),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C4  : virtual S7499C5 , S2121C38 , S7499C2 {
  virtual  ~S7499C4(); // _ZN7S7499C4D2Ev
  S7499C4(); // tgen
};
//SIG(-1 S7499C4) C1{ VBC2{ BC3{ VBC4{ BC5{ m} BC6{ VBC5 BC7{ v1} VBC8{ m}} v2} Fi} VBC7 FL:1} BC5 BC9{ VBC5} vd}


 S7499C4 ::~S7499C4(){ note_dtor("S7499C4", this);}
S7499C4 ::S7499C4(){ note_ctor("S7499C4", this);} // tgen

static void Test_S7499C4()
{
  extern Class_Descriptor cd_S7499C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7499C4, buf);
    S7499C4 *dp, &lv = *(dp=new (buf) S7499C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7499C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C4)");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C7*), ABISELECT(8,4), "S7499C4");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*)(S7499C7*), ABISELECT(21,13), "S7499C4");
    check_base_class_offset(lv, (S2121C38*)(S7499C2*), ABISELECT(21,13), "S7499C4");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*)(S7499C7*), ABISELECT(8,4), "S7499C4");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*)(S7499C7*), 0, "S7499C4");
    check_base_class_offset(lv, (S7499C8*)(S7499C7*), ABISELECT(8,4), "S7499C4");
    check_base_class_offset(lv, (S7499C7*)(S7499C6*)(S7499C5*), ABISELECT(8,4), "S7499C4");
    check_base_class_offset(lv, (S7499C6*)(S7499C5*), ABISELECT(8,4), "S7499C4");
    /*is_ambiguous_... S7499C5::S7499C9 */ AMB_check_base_class_offset(lv, (S7499C9*)(S7499C5*), ABISELECT(24,16), "S7499C4");
    check_base_class_offset(lv, (S7499C5*), ABISELECT(8,4), "S7499C4");
    /*is_ambiguous_... S7499C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S7499C4");
    check_base_class_offset(lv, (S7499C2*), 0, "S7499C4");
    test_class_info(&lv, &cd_S7499C4);
    dp->~S7499C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C4(Test_S7499C4, "S7499C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7499C4C1Ev();
extern void _ZN7S7499C4D2Ev();
Name_Map name_map_S7499C4[] = {
  NSPAIR(_ZN7S7499C4C1Ev),
  NSPAIR(_ZN7S7499C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
extern Class_Descriptor cd_S7499C7;
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
extern Class_Descriptor cd_S7499C6;
extern VTBL_ENTRY _ZTI7S7499C6[];
extern  VTBL_ENTRY _ZTV7S7499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C6[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S7499C5;
extern VTBL_ENTRY _ZTI7S7499C5[];
extern  VTBL_ENTRY _ZTV7S7499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C2;
extern VTBL_ENTRY _ZTI7S7499C2[];
extern  VTBL_ENTRY _ZTV7S7499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C2[];
static Base_Class bases_S7499C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(21,13), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7499C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7499C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7499C7,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7499C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7499C9,    ABISELECT(24,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7499C5,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7499C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C4[];
extern void _ZN7S7499C4D1Ev();
extern void _ZN7S7499C4D0Ev();
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C4[] = {
  ABISELECT(24,16),
  0,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(21,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7499C4D0Ev,
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S7499C4[];
static  VTBL_ENTRY _tg__ZTV7S7499C2__7S7499C4[] = {
  ABISELECT(21,13),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C2[0]),
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C5__7S7499C4[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C67S7499C5__7S7499C4[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C6[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C9__A1__7S7499C5__7S7499C4[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C7__7S7499C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C87S7499C7__7S7499C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(13,9),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C4[] = {
  {&(_ZTV7S7499C4[7]),  7,23},
  {&(_tg__ZTV7S7499C2__7S7499C4[3]),  3,3},
  {&(_ZTV7S7499C4[17]),  17,23},
  {&(_ZTV7S7499C4[17]),  17,23},
  {&(_ZTV7S7499C4[22]),  22,23},
  {&(_tg__ZTV7S7499C5__7S7499C4[8]),  8,10},
  {&(_tg__ZTV7S7499C67S7499C5__7S7499C4[7]),  7,9},
  {&(_tg__ZTV7S7499C67S7499C5__7S7499C4[7]),  7,9},
  {&(_tg__ZTV7S7499C5__7S7499C4[8]),  8,10},
  {&(_tg__ZTV7S7499C9__A1__7S7499C5__7S7499C4[3]),  3,4},
  {&(_tg__ZTV7S7499C7__7S7499C4[4]),  4,6},
  {&(_tg__ZTV7S7499C87S7499C7__7S7499C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C4[];
extern  VTBL_ENTRY _ZTV7S7499C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C4[];
Class_Descriptor cd_S7499C4 = {  "S7499C4", // class name
  bases_S7499C4, 11,
  &(vtc_S7499C4[0]), // expected_vtbl_contents
  &(vtt_S7499C4[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7499C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7499C4),23, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C4),12, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7499C1  : S7499C2 , S7499C4 {
  int s7499c1f0;
  virtual  ~S7499C1(); // _ZN7S7499C1D2Ev
  S7499C1(); // tgen
};
//SIG(1 S7499C1) C1{ BC2{ VBC3{ m}} BC4{ VBC5{ BC6{ VBC7{ BC3 BC8{ VBC3 BC9{ v1} VBC10{ m}} v2} Fi} VBC9 FL:1} BC3 BC2 vd} vd Fi}


 S7499C1 ::~S7499C1(){ note_dtor("S7499C1", this);}
S7499C1 ::S7499C1(){ note_ctor("S7499C1", this);} // tgen

static void Test_S7499C1()
{
  extern Class_Descriptor cd_S7499C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7499C1, buf);
    S7499C1 *dp, &lv = *(dp=new (buf) S7499C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7499C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7499C1)");
    /*is_ambiguous_... S7499C1::S7499C2 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C2*), 0, "S7499C1");
    check_base_class_offset(lv, (S2121C38*)(S7499C8*)(S7499C7*), 0, "S7499C1");
    check_base_class_offset(lv, (S2121C38*)(S7499C2*)(S7499C4*), 0, "S7499C1");
    /*is_ambiguous_... S7499C1::S7499C2 */ AMB_check_base_class_offset(lv, (S7499C2*), 0, "S7499C1");
    /*is_ambiguous_... S7499C7::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C7*), ABISELECT(24,12), "S7499C1");
    check_base_class_offset(lv, (S7499C9*)(S7499C8*)(S7499C7*), ABISELECT(24,12), "S7499C1");
    check_base_class_offset(lv, (S2121C28*)(S7499C8*)(S7499C7*), 0, "S7499C1");
    check_base_class_offset(lv, (S7499C8*)(S7499C7*), ABISELECT(24,12), "S7499C1");
    check_base_class_offset(lv, (S7499C7*)(S7499C6*)(S7499C5*), ABISELECT(24,12), "S7499C1");
    check_base_class_offset(lv, (S7499C6*)(S7499C5*), ABISELECT(24,12), "S7499C1");
    /*is_ambiguous_... S7499C5::S7499C9 */ AMB_check_base_class_offset(lv, (S7499C9*)(S7499C5*), ABISELECT(40,24), "S7499C1");
    check_base_class_offset(lv, (S7499C5*)(S7499C4*), ABISELECT(24,12), "S7499C1");
    /*is_ambiguous_... S7499C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7499C4*), ABISELECT(8,4), "S7499C1");
    check_base_class_offset(lv, (S7499C2*)(S7499C4*), ABISELECT(8,4), "S7499C1");
    check_base_class_offset(lv, (S7499C4*), ABISELECT(8,4), "S7499C1");
    check_field_offset(lv, s7499c1f0, ABISELECT(16,8), "S7499C1.s7499c1f0");
    test_class_info(&lv, &cd_S7499C1);
    dp->~S7499C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7499C1(Test_S7499C1, "S7499C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S7499C1C1Ev();
extern void _ZN7S7499C1D2Ev();
Name_Map name_map_S7499C1[] = {
  NSPAIR(_ZN7S7499C1C1Ev),
  NSPAIR(_ZN7S7499C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C2;
extern VTBL_ENTRY _ZTI7S7499C2[];
extern  VTBL_ENTRY _ZTV7S7499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C2[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7499C8;
extern VTBL_ENTRY _ZTI7S7499C8[];
extern  VTBL_ENTRY _ZTV7S7499C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C8[];
extern Class_Descriptor cd_S7499C7;
extern VTBL_ENTRY _ZTI7S7499C7[];
extern  VTBL_ENTRY _ZTV7S7499C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C7[];
extern Class_Descriptor cd_S7499C6;
extern VTBL_ENTRY _ZTI7S7499C6[];
extern  VTBL_ENTRY _ZTV7S7499C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C6[];
extern Class_Descriptor cd_S7499C9;
extern VTBL_ENTRY _ZTI7S7499C9[];
extern  VTBL_ENTRY _ZTV7S7499C9[];
extern Class_Descriptor cd_S7499C5;
extern VTBL_ENTRY _ZTI7S7499C5[];
extern  VTBL_ENTRY _ZTV7S7499C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C5[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7499C2;
extern VTBL_ENTRY _ZTI7S7499C2[];
extern  VTBL_ENTRY _ZTV7S7499C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C2[];
extern Class_Descriptor cd_S7499C4;
extern VTBL_ENTRY _ZTI7S7499C4[];
extern  VTBL_ENTRY _ZTV7S7499C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C4[];
static Base_Class bases_S7499C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7499C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7499C9,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7499C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7499C7,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7499C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7499C9,    ABISELECT(40,24), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7499C5,    ABISELECT(24,12), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7499C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7499C4,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7499C1[];
extern void _ZN7S7499C1D1Ev();
extern void _ZN7S7499C1D0Ev();
extern void ABISELECT(_ZThn8_N7S7499C1D1Ev,_ZThn4_N7S7499C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7499C1D0Ev,_ZThn4_N7S7499C1D0Ev)();
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY vtc_S7499C1[] = {
  ABISELECT(40,24),
  0,
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C1[0]),
  (VTBL_ENTRY)&_ZN7S7499C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7499C1D0Ev,
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7499C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7499C1D1Ev,_ZThn4_N7S7499C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7499C1D0Ev,_ZThn4_N7S7499C1D0Ev),
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7499C1[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
  0,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7499C1[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern VTBL_ENTRY _ZTV7S7499C1[];
static  VTBL_ENTRY _tg__ZTV7S7499C2__7S7499C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C2[0]),
};
extern void _ZN7S7499C4D1Ev();
extern void _ZN7S7499C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C4__7S7499C1[] = {
  ABISELECT(32,20),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7499C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7499C27S7499C4__A1__7S7499C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C2[0]),
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C5__7S7499C4__7S7499C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C9__A1__7S7499C4__7S7499C1[] = {
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7499C4[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C5__7S7499C1[] = {
  ABISELECT(16,12),
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C67S7499C5__7S7499C1[] = {
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C6[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C9__A1__7S7499C5__7S7499C1[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7499C5[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
extern void _ZN7S7499C92v1Ev();
extern void _ZN7S7499C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C7__7S7499C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C7[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
  (VTBL_ENTRY)&_ZN7S7499C72v2Ev,
};
extern void _ZN7S7499C92v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7499C87S7499C7__7S7499C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7499C8[0]),
  (VTBL_ENTRY)&_ZN7S7499C92v1Ev,
};
static  VTT_ENTRY vtt_S7499C1[] = {
  {&(_ZTV7S7499C1[7]),  7,32},
  {&(_tg__ZTV7S7499C2__7S7499C1[3]),  3,3},
  {&(_tg__ZTV7S7499C4__7S7499C1[7]),  7,9},
  {&(_tg__ZTV7S7499C27S7499C4__A1__7S7499C1[3]),  3,3},
  {&(_tg__ZTV7S7499C5__7S7499C4__7S7499C1[8]),  8,10},
  {&(_tg__ZTV7S7499C5__7S7499C4__7S7499C1[8]),  8,10},
  {&(_tg__ZTV7S7499C9__A1__7S7499C4__7S7499C1[3]),  3,4},
  {&(_ZTV7S7499C1[16]),  16,32},
  {&(_ZTV7S7499C1[26]),  26,32},
  {&(_ZTV7S7499C1[26]),  26,32},
  {&(_ZTV7S7499C1[31]),  31,32},
  {&(_tg__ZTV7S7499C5__7S7499C1[8]),  8,10},
  {&(_tg__ZTV7S7499C67S7499C5__7S7499C1[7]),  7,9},
  {&(_tg__ZTV7S7499C67S7499C5__7S7499C1[7]),  7,9},
  {&(_tg__ZTV7S7499C5__7S7499C1[8]),  8,10},
  {&(_tg__ZTV7S7499C9__A1__7S7499C5__7S7499C1[3]),  3,4},
  {&(_tg__ZTV7S7499C7__7S7499C1[4]),  4,6},
  {&(_tg__ZTV7S7499C87S7499C7__7S7499C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7499C1[];
extern  VTBL_ENTRY _ZTV7S7499C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7499C1[];
Class_Descriptor cd_S7499C1 = {  "S7499C1", // class name
  bases_S7499C1, 13,
  &(vtc_S7499C1[0]), // expected_vtbl_contents
  &(vtt_S7499C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S7499C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7499C1),32, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7499C1),18, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16086C1  {
  ::S3350C8_nt s16086c1f0;
  ::S4846C6_nt s16086c1f1;
  ::S4846C9_nt s16086c1f2;
  ::S4846C9_nt s16086c1f3;
  char s16086c1f4;
  ::S4846C10_nt s16086c1f5;
  void  mf16086c1(); // _ZN8S16086C19mf16086c1Ev
};
//SIG(1 S16086C1) C1{ m FC2{ m Fi} FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fc[12]} FC5 Fc FC6{ Fi Fc[128] FC7{ Fi[2] Fc[320] Fi}}}


void  S16086C1 ::mf16086c1(){}

static void Test_S16086C1()
{
  {
    init_simple_test("S16086C1");
    S16086C1 lv;
    check2(sizeof(lv), 532, "sizeof(S16086C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16086C1)");
    check_field_offset(lv, s16086c1f0, 0, "S16086C1.s16086c1f0");
    check_field_offset(lv, s16086c1f1, 4, "S16086C1.s16086c1f1");
    check_field_offset(lv, s16086c1f2, 40, "S16086C1.s16086c1f2");
    check_field_offset(lv, s16086c1f3, 52, "S16086C1.s16086c1f3");
    check_field_offset(lv, s16086c1f4, 64, "S16086C1.s16086c1f4");
    check_field_offset(lv, s16086c1f5, 68, "S16086C1.s16086c1f5");
  }
}
static Arrange_To_Call_Me vS16086C1(Test_S16086C1, "S16086C1", 532);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C6  {
  virtual void  v1(); // _ZN8S20734C62v1Ev
  ~S20734C6(); // tgen
  S20734C6(); // tgen
};
//SIG(-1 S20734C6) C1{ v1}


void  S20734C6 ::v1(){vfunc_called(this, "_ZN8S20734C62v1Ev");}
S20734C6 ::~S20734C6(){ note_dtor("S20734C6", this);} // tgen
S20734C6 ::S20734C6(){ note_ctor("S20734C6", this);} // tgen

static void Test_S20734C6()
{
  extern Class_Descriptor cd_S20734C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20734C6, buf);
    S20734C6 *dp, &lv = *(dp=new (buf) S20734C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20734C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C6)");
    test_class_info(&lv, &cd_S20734C6);
    dp->~S20734C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C6(Test_S20734C6, "S20734C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20734C6C1Ev();
extern void _ZN8S20734C6D1Ev();
Name_Map name_map_S20734C6[] = {
  NSPAIR(_ZN8S20734C6C1Ev),
  NSPAIR(_ZN8S20734C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20734C6[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C6[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
Class_Descriptor cd_S20734C6 = {  "S20734C6", // class name
  0,0,//no base classes
  &(vtc_S20734C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20734C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20734C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C5  : virtual S2121C38 , S20734C6 , virtual S2121C28 {
  ~S20734C5(); // tgen
  S20734C5(); // tgen
};
//SIG(-1 S20734C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20734C5 ::~S20734C5(){ note_dtor("S20734C5", this);} // tgen
S20734C5 ::S20734C5(){ note_ctor("S20734C5", this);} // tgen

static void Test_S20734C5()
{
  extern Class_Descriptor cd_S20734C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20734C5, buf);
    S20734C5 *dp, &lv = *(dp=new (buf) S20734C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20734C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20734C5");
    check_base_class_offset(lv, (S20734C6*), 0, "S20734C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S20734C5");
    test_class_info(&lv, &cd_S20734C5);
    dp->~S20734C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C5(Test_S20734C5, "S20734C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20734C5C1Ev();
extern void _ZN8S20734C5D1Ev();
Name_Map name_map_S20734C5[] = {
  NSPAIR(_ZN8S20734C5C1Ev),
  NSPAIR(_ZN8S20734C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20734C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C5[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C5[];
static  VTT_ENTRY vtt_S20734C5[] = {
  {&(_ZTV8S20734C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
Class_Descriptor cd_S20734C5 = {  "S20734C5", // class name
  bases_S20734C5, 3,
  &(vtc_S20734C5[0]), // expected_vtbl_contents
  &(vtt_S20734C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20734C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20734C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C5),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C4  : S20734C5 , S20734C6 {
  ~S20734C4(); // tgen
  S20734C4(); // tgen
};
//SIG(-1 S20734C4) C1{ BC2{ VBC3{ m} BC4{ v1} VBC5{ m}} BC4}


S20734C4 ::~S20734C4(){ note_dtor("S20734C4", this);} // tgen
S20734C4 ::S20734C4(){ note_ctor("S20734C4", this);} // tgen

static void Test_S20734C4()
{
  extern Class_Descriptor cd_S20734C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20734C4, buf);
    S20734C4 *dp, &lv = *(dp=new (buf) S20734C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20734C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C4)");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*), 0, "S20734C4");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*), 0, "S20734C4");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*), 0, "S20734C4");
    check_base_class_offset(lv, (S20734C5*), 0, "S20734C4");
    /*is_ambiguous_... S20734C4::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*), ABISELECT(8,4), "S20734C4");
    test_class_info(&lv, &cd_S20734C4);
    dp->~S20734C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C4(Test_S20734C4, "S20734C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20734C4C1Ev();
extern void _ZN8S20734C4D1Ev();
Name_Map name_map_S20734C4[] = {
  NSPAIR(_ZN8S20734C4C1Ev),
  NSPAIR(_ZN8S20734C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
static Base_Class bases_S20734C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20734C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20734C6,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C4[];
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C4[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20734C4[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C4[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C5__8S20734C4[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
static  VTT_ENTRY vtt_S20734C4[] = {
  {&(_ZTV8S20734C4[4]),  4,8},
  {&(_tg__ZTV8S20734C5__8S20734C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20734C4[];
extern  VTBL_ENTRY _ZTV8S20734C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C4[];
Class_Descriptor cd_S20734C4 = {  "S20734C4", // class name
  bases_S20734C4, 5,
  &(vtc_S20734C4[0]), // expected_vtbl_contents
  &(vtt_S20734C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20734C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20734C4),8, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C4),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C8  : S2121C38 , S20734C5 {
  virtual void  v2(); // _ZN8S20734C82v2Ev
  ~S20734C8(); // tgen
  S20734C8(); // tgen
};
//SIG(-1 S20734C8) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S20734C8 ::v2(){vfunc_called(this, "_ZN8S20734C82v2Ev");}
S20734C8 ::~S20734C8(){ note_dtor("S20734C8", this);} // tgen
S20734C8 ::S20734C8(){ note_ctor("S20734C8", this);} // tgen

static void Test_S20734C8()
{
  extern Class_Descriptor cd_S20734C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20734C8, buf);
    S20734C8 *dp, &lv = *(dp=new (buf) S20734C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20734C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C8)");
    /*is_ambiguous_... S20734C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20734C8");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*), ABISELECT(8,4), "S20734C8");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*), 0, "S20734C8");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*), 0, "S20734C8");
    check_base_class_offset(lv, (S20734C5*), 0, "S20734C8");
    test_class_info(&lv, &cd_S20734C8);
    dp->~S20734C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C8(Test_S20734C8, "S20734C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20734C8C1Ev();
extern void _ZN8S20734C8D1Ev();
Name_Map name_map_S20734C8[] = {
  NSPAIR(_ZN8S20734C8C1Ev),
  NSPAIR(_ZN8S20734C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
static Base_Class bases_S20734C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20734C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C8[];
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
static  VTBL_ENTRY vtc_S20734C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C8[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20734C8[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C5__8S20734C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
static  VTT_ENTRY vtt_S20734C8[] = {
  {&(_ZTV8S20734C8[4]),  4,6},
  {&(_tg__ZTV8S20734C5__8S20734C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20734C8[];
extern  VTBL_ENTRY _ZTV8S20734C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C8[];
Class_Descriptor cd_S20734C8 = {  "S20734C8", // class name
  bases_S20734C8, 5,
  &(vtc_S20734C8[0]), // expected_vtbl_contents
  &(vtt_S20734C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20734C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20734C8),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C8),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C9  : S20734C6 , S2121C28 , virtual S2121C38 {
  ~S20734C9(); // tgen
  S20734C9(); // tgen
};
//SIG(-1 S20734C9) C1{ BC2{ v1} BC3{ m} VBC4{ m}}


S20734C9 ::~S20734C9(){ note_dtor("S20734C9", this);} // tgen
S20734C9 ::S20734C9(){ note_ctor("S20734C9", this);} // tgen

static void Test_S20734C9()
{
  extern Class_Descriptor cd_S20734C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20734C9, buf);
    S20734C9 *dp, &lv = *(dp=new (buf) S20734C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20734C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C9)");
    check_base_class_offset(lv, (S20734C6*), 0, "S20734C9");
    check_base_class_offset(lv, (S2121C28*), 0, "S20734C9");
    check_base_class_offset(lv, (S2121C38*), 0, "S20734C9");
    test_class_info(&lv, &cd_S20734C9);
    dp->~S20734C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C9(Test_S20734C9, "S20734C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20734C9C1Ev();
extern void _ZN8S20734C9D1Ev();
Name_Map name_map_S20734C9[] = {
  NSPAIR(_ZN8S20734C9C1Ev),
  NSPAIR(_ZN8S20734C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S20734C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C9[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C9[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C9[];
static  VTT_ENTRY vtt_S20734C9[] = {
  {&(_ZTV8S20734C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20734C9[];
extern  VTBL_ENTRY _ZTV8S20734C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C9[];
Class_Descriptor cd_S20734C9 = {  "S20734C9", // class name
  bases_S20734C9, 3,
  &(vtc_S20734C9[0]), // expected_vtbl_contents
  &(vtt_S20734C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20734C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20734C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C9),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C2  : virtual S2121C38 , virtual S20734C4 , virtual S20734C8 , virtual S20734C9 , S20734C6 {
  ~S20734C2(); // tgen
  S20734C2(); // tgen
};
//SIG(-1 S20734C2) C1{ VBC2{ m} VBC3{ BC4{ VBC2 BC5{ v1} VBC6{ m}} BC5} VBC7{ BC2 BC4 v2} VBC8{ BC5 BC6 VBC2} BC5}


S20734C2 ::~S20734C2(){ note_dtor("S20734C2", this);} // tgen
S20734C2 ::S20734C2(){ note_ctor("S20734C2", this);} // tgen

static void Test_S20734C2()
{
  extern Class_Descriptor cd_S20734C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20734C2, buf);
    S20734C2 *dp, &lv = *(dp=new (buf) S20734C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20734C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C2)");
    /*is_ambiguous_... S20734C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20734C2");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*)(S20734C4*), 0, "S20734C2");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*)(S20734C8*), 0, "S20734C2");
    check_base_class_offset(lv, (S2121C38*)(S20734C9*), 0, "S20734C2");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*)(S20734C4*), ABISELECT(8,4), "S20734C2");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*)(S20734C4*), 0, "S20734C2");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*)(S20734C8*), 0, "S20734C2");
    check_base_class_offset(lv, (S20734C5*)(S20734C4*), ABISELECT(8,4), "S20734C2");
    /*is_ambiguous_... S20734C4::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*)(S20734C4*), ABISELECT(16,8), "S20734C2");
    check_base_class_offset(lv, (S20734C4*), ABISELECT(8,4), "S20734C2");
    /*is_ambiguous_... S20734C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20734C8*), ABISELECT(24,12), "S20734C2");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*)(S20734C8*), ABISELECT(24,12), "S20734C2");
    check_base_class_offset(lv, (S20734C5*)(S20734C8*), ABISELECT(24,12), "S20734C2");
    check_base_class_offset(lv, (S20734C8*), ABISELECT(24,12), "S20734C2");
    check_base_class_offset(lv, (S20734C6*)(S20734C9*), ABISELECT(32,16), "S20734C2");
    check_base_class_offset(lv, (S2121C28*)(S20734C9*), ABISELECT(32,16), "S20734C2");
    check_base_class_offset(lv, (S20734C9*), ABISELECT(32,16), "S20734C2");
    /*is_ambiguous_... S20734C2::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*), 0, "S20734C2");
    test_class_info(&lv, &cd_S20734C2);
    dp->~S20734C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C2(Test_S20734C2, "S20734C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20734C2C1Ev();
extern void _ZN8S20734C2D1Ev();
Name_Map name_map_S20734C2[] = {
  NSPAIR(_ZN8S20734C2C1Ev),
  NSPAIR(_ZN8S20734C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C4;
extern VTBL_ENTRY _ZTI8S20734C4[];
extern  VTBL_ENTRY _ZTV8S20734C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C8;
extern VTBL_ENTRY _ZTI8S20734C8[];
extern  VTBL_ENTRY _ZTV8S20734C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C8[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C9;
extern VTBL_ENTRY _ZTI8S20734C9[];
extern  VTBL_ENTRY _ZTV8S20734C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C9[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
static Base_Class bases_S20734C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20734C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20734C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20734C6,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20734C4,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20734C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20734C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20734C8,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20734C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20734C9,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C2[];
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C2[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C2[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C4__8S20734C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C4[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C58S20734C4__8S20734C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C8__8S20734C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C8[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C58S20734C8__A1__8S20734C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C9__8S20734C2[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C9[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
static  VTT_ENTRY vtt_S20734C2[] = {
  {&(_ZTV8S20734C2[7]),  7,30},
  {&(_ZTV8S20734C2[13]),  13,30},
  {&(_ZTV8S20734C2[16]),  16,30},
  {&(_ZTV8S20734C2[23]),  23,30},
  {&(_ZTV8S20734C2[29]),  29,30},
  {&(_tg__ZTV8S20734C4__8S20734C2[4]),  4,5},
  {&(_tg__ZTV8S20734C58S20734C4__8S20734C2[4]),  4,5},
  {&(_tg__ZTV8S20734C8__8S20734C2[4]),  4,6},
  {&(_tg__ZTV8S20734C58S20734C8__A1__8S20734C2[4]),  4,5},
  {&(_tg__ZTV8S20734C9__8S20734C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20734C2[];
extern  VTBL_ENTRY _ZTV8S20734C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C2[];
Class_Descriptor cd_S20734C2 = {  "S20734C2", // class name
  bases_S20734C2, 14,
  &(vtc_S20734C2[0]), // expected_vtbl_contents
  &(vtt_S20734C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20734C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20734C2),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C2),10, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20734C1  : virtual S20734C2 , S20734C6 {
  ~S20734C1(); // tgen
  S20734C1(); // tgen
};
//SIG(1 S20734C1) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ VBC3 BC6{ v1} VBC7{ m}} BC6} VBC8{ BC3 BC5 v2} VBC9{ BC6 BC7 VBC3} BC6} BC6}


S20734C1 ::~S20734C1(){ note_dtor("S20734C1", this);} // tgen
S20734C1 ::S20734C1(){ note_ctor("S20734C1", this);} // tgen

static void Test_S20734C1()
{
  extern Class_Descriptor cd_S20734C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20734C1, buf);
    S20734C1 *dp, &lv = *(dp=new (buf) S20734C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20734C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20734C1)");
    /*is_ambiguous_... S20734C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20734C2*), 0, "S20734C1");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*)(S20734C4*), 0, "S20734C1");
    check_base_class_offset(lv, (S2121C38*)(S20734C5*)(S20734C8*), 0, "S20734C1");
    check_base_class_offset(lv, (S2121C38*)(S20734C9*), 0, "S20734C1");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*)(S20734C4*), ABISELECT(16,8), "S20734C1");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*)(S20734C4*), 0, "S20734C1");
    check_base_class_offset(lv, (S2121C28*)(S20734C5*)(S20734C8*), 0, "S20734C1");
    check_base_class_offset(lv, (S20734C5*)(S20734C4*), ABISELECT(16,8), "S20734C1");
    /*is_ambiguous_... S20734C4::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*)(S20734C4*), ABISELECT(24,12), "S20734C1");
    check_base_class_offset(lv, (S20734C4*)(S20734C2*), ABISELECT(16,8), "S20734C1");
    /*is_ambiguous_... S20734C8::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20734C8*), ABISELECT(32,16), "S20734C1");
    check_base_class_offset(lv, (S20734C6*)(S20734C5*)(S20734C8*), ABISELECT(32,16), "S20734C1");
    check_base_class_offset(lv, (S20734C5*)(S20734C8*), ABISELECT(32,16), "S20734C1");
    check_base_class_offset(lv, (S20734C8*)(S20734C2*), ABISELECT(32,16), "S20734C1");
    check_base_class_offset(lv, (S20734C6*)(S20734C9*), ABISELECT(40,20), "S20734C1");
    check_base_class_offset(lv, (S2121C28*)(S20734C9*), ABISELECT(40,20), "S20734C1");
    check_base_class_offset(lv, (S20734C9*)(S20734C2*), ABISELECT(40,20), "S20734C1");
    /*is_ambiguous_... S20734C2::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*)(S20734C2*), ABISELECT(8,4), "S20734C1");
    check_base_class_offset(lv, (S20734C2*), ABISELECT(8,4), "S20734C1");
    /*is_ambiguous_... S20734C1::S20734C6 */ AMB_check_base_class_offset(lv, (S20734C6*), 0, "S20734C1");
    test_class_info(&lv, &cd_S20734C1);
    dp->~S20734C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20734C1(Test_S20734C1, "S20734C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20734C1C1Ev();
extern void _ZN8S20734C1D1Ev();
Name_Map name_map_S20734C1[] = {
  NSPAIR(_ZN8S20734C1C1Ev),
  NSPAIR(_ZN8S20734C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C4;
extern VTBL_ENTRY _ZTI8S20734C4[];
extern  VTBL_ENTRY _ZTV8S20734C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C4[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C5;
extern VTBL_ENTRY _ZTI8S20734C5[];
extern  VTBL_ENTRY _ZTV8S20734C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C5[];
extern Class_Descriptor cd_S20734C8;
extern VTBL_ENTRY _ZTI8S20734C8[];
extern  VTBL_ENTRY _ZTV8S20734C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C8[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20734C9;
extern VTBL_ENTRY _ZTI8S20734C9[];
extern  VTBL_ENTRY _ZTV8S20734C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C9[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
extern Class_Descriptor cd_S20734C2;
extern VTBL_ENTRY _ZTI8S20734C2[];
extern  VTBL_ENTRY _ZTV8S20734C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C2[];
extern Class_Descriptor cd_S20734C6;
extern VTBL_ENTRY _ZTI8S20734C6[];
extern  VTBL_ENTRY _ZTV8S20734C6[];
static Base_Class bases_S20734C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20734C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20734C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20734C6,    ABISELECT(24,12), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20734C4,    ABISELECT(16,8), //bcp->offset
    18, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2121C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20734C6,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20734C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20734C8,    ABISELECT(32,16), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20734C6,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2121C28,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20734C9,    ABISELECT(40,20), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20734C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20734C2,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20734C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20734C1[];
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY vtc_S20734C1[] = {
  ABISELECT(40,20),
  ABISELECT(32,16),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20734C1[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S20734C1[];
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C2__8S20734C1[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C4__8S20734C2__8S20734C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C68S20734C4__A1__8S20734C2__8S20734C1[] = {
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C8__8S20734C2__8S20734C1[] = {
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C9__8S20734C2__8S20734C1[] = {
  0,
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20734C2[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C4__8S20734C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C4[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C58S20734C4__8S20734C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
extern void _ZN8S20734C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C8__8S20734C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C8[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
  (VTBL_ENTRY)&_ZN8S20734C82v2Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C58S20734C8__A1__8S20734C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C5[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
extern void _ZN8S20734C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20734C9__8S20734C1[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20734C9[0]),
  (VTBL_ENTRY)&_ZN8S20734C62v1Ev,
};
static  VTT_ENTRY vtt_S20734C1[] = {
  {&(_ZTV8S20734C1[8]),  8,40},
  {&(_ZTV8S20734C1[17]),  17,40},
  {&(_ZTV8S20734C1[23]),  23,40},
  {&(_ZTV8S20734C1[26]),  26,40},
  {&(_ZTV8S20734C1[33]),  33,40},
  {&(_ZTV8S20734C1[39]),  39,40},
  {&(_tg__ZTV8S20734C2__8S20734C1[7]),  7,8},
  {&(_tg__ZTV8S20734C4__8S20734C2__8S20734C1[5]),  5,6},
  {&(_tg__ZTV8S20734C68S20734C4__A1__8S20734C2__8S20734C1[2]),  2,3},
  {&(_tg__ZTV8S20734C8__8S20734C2__8S20734C1[6]),  6,8},
  {&(_tg__ZTV8S20734C9__8S20734C2__8S20734C1[4]),  4,5},
  {&(_tg__ZTV8S20734C4__8S20734C1[4]),  4,5},
  {&(_tg__ZTV8S20734C58S20734C4__8S20734C1[4]),  4,5},
  {&(_tg__ZTV8S20734C8__8S20734C1[4]),  4,6},
  {&(_tg__ZTV8S20734C58S20734C8__A1__8S20734C1[4]),  4,5},
  {&(_tg__ZTV8S20734C9__8S20734C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20734C1[];
extern  VTBL_ENTRY _ZTV8S20734C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20734C1[];
Class_Descriptor cd_S20734C1 = {  "S20734C1", // class name
  bases_S20734C1, 16,
  &(vtc_S20734C1[0]), // expected_vtbl_contents
  &(vtt_S20734C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20734C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20734C1),40, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20734C1),16, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18978C6  {
  short  :0;
  short s18978c6f1;
  int s18978c6f2;
  __tsi64 s18978c6f3;
  int s18978c6f4;
  virtual void  v2(); // _ZN8S18978C62v2Ev
  ~S18978C6(); // tgen
  S18978C6(); // tgen
};
//SIG(-1 S18978C6) C1{ v1 Fs:0 Fs Fi FL Fi}


void  S18978C6 ::v2(){vfunc_called(this, "_ZN8S18978C62v2Ev");}
S18978C6 ::~S18978C6(){ note_dtor("S18978C6", this);} // tgen
S18978C6 ::S18978C6(){ note_ctor("S18978C6", this);} // tgen

static void Test_S18978C6()
{
  extern Class_Descriptor cd_S18978C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S18978C6, buf);
    S18978C6 *dp, &lv = *(dp=new (buf) S18978C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S18978C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18978C6)");
    check_field_offset(lv, s18978c6f1, ABISELECT(8,4), "S18978C6.s18978c6f1");
    check_field_offset(lv, s18978c6f2, ABISELECT(12,8), "S18978C6.s18978c6f2");
    check_field_offset(lv, s18978c6f3, ABISELECT(16,12), "S18978C6.s18978c6f3");
    check_field_offset(lv, s18978c6f4, ABISELECT(24,20), "S18978C6.s18978c6f4");
    test_class_info(&lv, &cd_S18978C6);
    dp->~S18978C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C6(Test_S18978C6, "S18978C6", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S18978C6C1Ev();
extern void _ZN8S18978C6D1Ev();
Name_Map name_map_S18978C6[] = {
  NSPAIR(_ZN8S18978C6C1Ev),
  NSPAIR(_ZN8S18978C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18978C6[];
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY vtc_S18978C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C6[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
Class_Descriptor cd_S18978C6 = {  "S18978C6", // class name
  0,0,//no base classes
  &(vtc_S18978C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S18978C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18978C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18978C4  : S2514C3_nt , S18978C6 {
  int s18978c4f0;
  ~S18978C4(); // tgen
  S18978C4(); // tgen
};
//SIG(-1 S18978C4) C1{ BC2{ m FD} BC3{ v1 Fs:0 Fs Fi FL Fi} Fi}


S18978C4 ::~S18978C4(){ note_dtor("S18978C4", this);} // tgen
S18978C4 ::S18978C4(){ note_ctor("S18978C4", this);} // tgen

static void Test_S18978C4()
{
  extern Class_Descriptor cd_S18978C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,11)];
    init_test(&cd_S18978C4, buf);
    S18978C4 *dp, &lv = *(dp=new (buf) S18978C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S18978C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18978C4)");
    check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(32,24), "S18978C4");
    check_base_class_offset(lv, (S18978C6*), 0, "S18978C4");
    check_field_offset(lv, s18978c4f0, ABISELECT(48,36), "S18978C4.s18978c4f0");
    test_class_info(&lv, &cd_S18978C4);
    dp->~S18978C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C4(Test_S18978C4, "S18978C4", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S18978C4C1Ev();
extern void _ZN8S18978C4D1Ev();
Name_Map name_map_S18978C4[] = {
  NSPAIR(_ZN8S18978C4C1Ev),
  NSPAIR(_ZN8S18978C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
static Base_Class bases_S18978C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18978C6,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18978C4[];
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY vtc_S18978C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C4[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S18978C4[];
extern  VTBL_ENTRY _ZTV8S18978C4[];
Class_Descriptor cd_S18978C4 = {  "S18978C4", // class name
  bases_S18978C4, 2,
  &(vtc_S18978C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S18978C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18978C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18978C3  : S18978C4 {
  void *s18978c3f0;
  long double s18978c3f1;
  virtual void  v3(); // _ZN8S18978C32v3Ev
  virtual void  v4(); // _ZN8S18978C32v4Ev
  virtual void  v5(); // _ZN8S18978C32v5Ev
  ~S18978C3(); // tgen
  S18978C3(); // tgen
};
//SIG(-1 S18978C3) C1{ BC2{ BC3{ m FD} BC4{ v4 Fs:0 Fs Fi FL Fi} Fi} v1 v2 v3 Fp FD}


void  S18978C3 ::v3(){vfunc_called(this, "_ZN8S18978C32v3Ev");}
void  S18978C3 ::v4(){vfunc_called(this, "_ZN8S18978C32v4Ev");}
void  S18978C3 ::v5(){vfunc_called(this, "_ZN8S18978C32v5Ev");}
S18978C3 ::~S18978C3(){ note_dtor("S18978C3", this);} // tgen
S18978C3 ::S18978C3(){ note_ctor("S18978C3", this);} // tgen

static void Test_S18978C3()
{
  extern Class_Descriptor cd_S18978C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,15)];
    init_test(&cd_S18978C3, buf);
    S18978C3 *dp, &lv = *(dp=new (buf) S18978C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S18978C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18978C3)");
    check_base_class_offset(lv, (S2514C3_nt*)(S18978C4*), ABISELECT(32,24), "S18978C3");
    check_base_class_offset(lv, (S18978C6*)(S18978C4*), 0, "S18978C3");
    check_base_class_offset(lv, (S18978C4*), 0, "S18978C3");
    check_field_offset(lv, s18978c3f0, ABISELECT(56,40), "S18978C3.s18978c3f0");
    check_field_offset(lv, s18978c3f1, ABISELECT(64,44), "S18978C3.s18978c3f1");
    test_class_info(&lv, &cd_S18978C3);
    dp->~S18978C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C3(Test_S18978C3, "S18978C3", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN8S18978C3C1Ev();
extern void _ZN8S18978C3D1Ev();
Name_Map name_map_S18978C3[] = {
  NSPAIR(_ZN8S18978C3C1Ev),
  NSPAIR(_ZN8S18978C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S18978C4;
extern VTBL_ENTRY _ZTI8S18978C4[];
extern  VTBL_ENTRY _ZTV8S18978C4[];
static Base_Class bases_S18978C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18978C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18978C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18978C3[];
extern void _ZN8S18978C62v2Ev();
extern void _ZN8S18978C32v3Ev();
extern void _ZN8S18978C32v4Ev();
extern void _ZN8S18978C32v5Ev();
static  VTBL_ENTRY vtc_S18978C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C3[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v3Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v4Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v5Ev,
};
extern VTBL_ENTRY _ZTI8S18978C3[];
extern  VTBL_ENTRY _ZTV8S18978C3[];
Class_Descriptor cd_S18978C3 = {  "S18978C3", // class name
  bases_S18978C3, 3,
  &(vtc_S18978C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI8S18978C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18978C3),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18978C2  : S18978C3 , virtual S18978C6 , virtual S2514C3_nt {
  void *s18978c2f0[8];
  long double s18978c2f1;
  ~S18978C2(); // tgen
  S18978C2(); // tgen
};
//SIG(-1 S18978C2) C1{ BC2{ BC3{ BC4{ m FD} BC5{ v1 Fs:0 Fs Fi FL Fi} Fi} v2 v3 v4 Fp FD} VBC5 VBC4 Fp[8] FD}


S18978C2 ::~S18978C2(){ note_dtor("S18978C2", this);} // tgen
S18978C2 ::S18978C2(){ note_ctor("S18978C2", this);} // tgen

static void Test_S18978C2()
{
  extern Class_Descriptor cd_S18978C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,35)];
    init_test(&cd_S18978C2, buf);
    S18978C2 *dp, &lv = *(dp=new (buf) S18978C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,136), "sizeof(S18978C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18978C2)");
    check_base_class_offset(lv, (S2514C3_nt*)(S18978C4*)(S18978C3*), ABISELECT(32,24), "S18978C2");
    check_base_class_offset(lv, (S18978C6*)(S18978C4*)(S18978C3*), 0, "S18978C2");
    check_base_class_offset(lv, (S18978C4*)(S18978C3*), 0, "S18978C2");
    check_base_class_offset(lv, (S18978C3*), 0, "S18978C2");
    /*is_ambiguous_... S18978C2::S18978C6 */ AMB_check_base_class_offset(lv, (S18978C6*), ABISELECT(160,100), "S18978C2");
    /*is_ambiguous_... S18978C2::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*), ABISELECT(192,124), "S18978C2");
    check_field_offset(lv, s18978c2f0, ABISELECT(80,56), "S18978C2.s18978c2f0");
    check_field_offset(lv, s18978c2f1, ABISELECT(144,88), "S18978C2.s18978c2f1");
    test_class_info(&lv, &cd_S18978C2);
    dp->~S18978C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C2(Test_S18978C2, "S18978C2", ABISELECT(208,136));

#else // __cplusplus

extern void _ZN8S18978C2C1Ev();
extern void _ZN8S18978C2D1Ev();
Name_Map name_map_S18978C2[] = {
  NSPAIR(_ZN8S18978C2C1Ev),
  NSPAIR(_ZN8S18978C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S18978C4;
extern VTBL_ENTRY _ZTI8S18978C4[];
extern  VTBL_ENTRY _ZTV8S18978C4[];
extern Class_Descriptor cd_S18978C3;
extern VTBL_ENTRY _ZTI8S18978C3[];
extern  VTBL_ENTRY _ZTV8S18978C3[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
static Base_Class bases_S18978C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18978C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18978C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18978C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S18978C6,    ABISELECT(160,100), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2514C3_nt,    ABISELECT(192,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18978C2[];
extern void _ZN8S18978C62v2Ev();
extern void _ZN8S18978C32v3Ev();
extern void _ZN8S18978C32v4Ev();
extern void _ZN8S18978C32v5Ev();
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY vtc_S18978C2[] = {
  ABISELECT(192,124),
  ABISELECT(160,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C2[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v3Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v4Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v5Ev,
  0,
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI8S18978C2[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S18978C2[];
static  VTT_ENTRY vtt_S18978C2[] = {
  {&(_ZTV8S18978C2[4]),  4,12},
  {&(_ZTV8S18978C2[11]),  11,12},
};
extern VTBL_ENTRY _ZTI8S18978C2[];
extern  VTBL_ENTRY _ZTV8S18978C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18978C2[];
Class_Descriptor cd_S18978C2 = {  "S18978C2", // class name
  bases_S18978C2, 6,
  &(vtc_S18978C2[0]), // expected_vtbl_contents
  &(vtt_S18978C2[0]), // expected_vtt_contents
  ABISELECT(208,136), // object size
  NSPAIRA(_ZTI8S18978C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S18978C2),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18978C2),2, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18978C1  : virtual S18978C2 {
  virtual void  v1(); // _ZN8S18978C12v1Ev
  ~S18978C1(); // tgen
  S18978C1(); // tgen
};
//SIG(1 S18978C1) C1{ VBC2{ BC3{ BC4{ BC5{ m FD} BC6{ v2 Fs:0 Fs Fi FL Fi} Fi} v3 v4 v5 Fp FD} VBC6 VBC5 Fp[8] FD} v1}


void  S18978C1 ::v1(){vfunc_called(this, "_ZN8S18978C12v1Ev");}
S18978C1 ::~S18978C1(){ note_dtor("S18978C1", this);} // tgen
S18978C1 ::S18978C1(){ note_ctor("S18978C1", this);} // tgen

static void Test_S18978C1()
{
  extern Class_Descriptor cd_S18978C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,36)];
    init_test(&cd_S18978C1, buf);
    S18978C1 *dp, &lv = *(dp=new (buf) S18978C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S18978C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18978C1)");
    check_base_class_offset(lv, (S2514C3_nt*)(S18978C4*)(S18978C3*)(S18978C2*), ABISELECT(48,28), "S18978C1");
    check_base_class_offset(lv, (S18978C6*)(S18978C4*)(S18978C3*)(S18978C2*), ABISELECT(16,4), "S18978C1");
    check_base_class_offset(lv, (S18978C4*)(S18978C3*)(S18978C2*), ABISELECT(16,4), "S18978C1");
    check_base_class_offset(lv, (S18978C3*)(S18978C2*), ABISELECT(16,4), "S18978C1");
    /*is_ambiguous_... S18978C2::S18978C6 */ AMB_check_base_class_offset(lv, (S18978C6*)(S18978C2*), ABISELECT(176,104), "S18978C1");
    /*is_ambiguous_... S18978C2::S2514C3_nt */ AMB_check_base_class_offset(lv, (S2514C3_nt*)(S18978C2*), ABISELECT(208,128), "S18978C1");
    check_base_class_offset(lv, (S18978C2*), ABISELECT(16,4), "S18978C1");
    test_class_info(&lv, &cd_S18978C1);
    dp->~S18978C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18978C1(Test_S18978C1, "S18978C1", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN8S18978C1C1Ev();
extern void _ZN8S18978C1D1Ev();
Name_Map name_map_S18978C1[] = {
  NSPAIR(_ZN8S18978C1C1Ev),
  NSPAIR(_ZN8S18978C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S18978C4;
extern VTBL_ENTRY _ZTI8S18978C4[];
extern  VTBL_ENTRY _ZTV8S18978C4[];
extern Class_Descriptor cd_S18978C3;
extern VTBL_ENTRY _ZTI8S18978C3[];
extern  VTBL_ENTRY _ZTV8S18978C3[];
extern Class_Descriptor cd_S18978C6;
extern VTBL_ENTRY _ZTI8S18978C6[];
extern  VTBL_ENTRY _ZTV8S18978C6[];
extern Class_Descriptor cd_S2514C3_nt;
extern VTBL_ENTRY _ZTI10S2514C3_nt[];
extern Class_Descriptor cd_S18978C2;
extern VTBL_ENTRY _ZTI8S18978C2[];
extern  VTBL_ENTRY _ZTV8S18978C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18978C2[];
static Base_Class bases_S18978C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2514C3_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18978C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S18978C4,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18978C3,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18978C6,    ABISELECT(176,104), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2514C3_nt,    ABISELECT(208,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S18978C2,    ABISELECT(16,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18978C1[];
extern void _ZN8S18978C12v1Ev();
extern void _ZN8S18978C62v2Ev();
extern void _ZN8S18978C32v3Ev();
extern void _ZN8S18978C32v4Ev();
extern void _ZN8S18978C32v5Ev();
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY vtc_S18978C1[] = {
  ABISELECT(208,128),
  ABISELECT(176,104),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C1[0]),
  (VTBL_ENTRY)&_ZN8S18978C12v1Ev,
  0,
  0,
  0,
  0,
  ABISELECT(192,124),
  ABISELECT(160,100),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI8S18978C1[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v3Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v4Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v5Ev,
  0,
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S18978C1[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S18978C1[];
extern void _ZN8S18978C62v2Ev();
extern void _ZN8S18978C32v3Ev();
extern void _ZN8S18978C32v4Ev();
extern void _ZN8S18978C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S18978C2__8S18978C1[] = {
  ABISELECT(192,124),
  ABISELECT(160,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S18978C2[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v3Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v4Ev,
  (VTBL_ENTRY)&_ZN8S18978C32v5Ev,
};
extern void _ZN8S18978C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S18978C6__A1__8S18978C2__8S18978C1[] = {
  0,
  ABISELECT(-160,-100),
  (VTBL_ENTRY)&(_ZTI8S18978C2[0]),
  (VTBL_ENTRY)&_ZN8S18978C62v2Ev,
};
static  VTT_ENTRY vtt_S18978C1[] = {
  {&(_ZTV8S18978C1[5]),  5,22},
  {&(_ZTV8S18978C1[14]),  14,22},
  {&(_ZTV8S18978C1[21]),  21,22},
  {&(_tg__ZTV8S18978C2__8S18978C1[4]),  4,8},
  {&(_tg__ZTV8S18978C6__A1__8S18978C2__8S18978C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S18978C1[];
extern  VTBL_ENTRY _ZTV8S18978C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18978C1[];
Class_Descriptor cd_S18978C1 = {  "S18978C1", // class name
  bases_S18978C1, 7,
  &(vtc_S18978C1[0]), // expected_vtbl_contents
  &(vtt_S18978C1[0]), // expected_vtt_contents
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI8S18978C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18978C1),22, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18978C1),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1752C3  : S6282C14_nt {
  void *s1752c3f0;
  int s1752c3f1[2];
  unsigned int s1752c3f2:1;
  unsigned int s1752c3f3:1;
  unsigned int s1752c3f4:1;
  unsigned int s1752c3f5:1;
  int s1752c3f6[2];
  virtual  ~S1752C3(); // _ZN7S1752C3D1Ev
  S1752C3(); // tgen
};
//SIG(-1 S1752C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1752C3 ::~S1752C3(){ note_dtor("S1752C3", this);}
S1752C3 ::S1752C3(){ note_ctor("S1752C3", this);} // tgen

static void Test_S1752C3()
{
  extern Class_Descriptor cd_S1752C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1752C3, buf);
    S1752C3 *dp, &lv = *(dp=new (buf) S1752C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1752C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1752C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1752C3");
    check_field_offset(lv, s1752c3f0, ABISELECT(16,8), "S1752C3.s1752c3f0");
    check_field_offset(lv, s1752c3f1, ABISELECT(24,12), "S1752C3.s1752c3f1");
    set_bf_and_test(lv, s1752c3f2, ABISELECT(32,20), 0, 1, 1, "S1752C3");
    set_bf_and_test(lv, s1752c3f3, ABISELECT(32,20), 1, 1, 1, "S1752C3");
    set_bf_and_test(lv, s1752c3f4, ABISELECT(32,20), 2, 1, 1, "S1752C3");
    set_bf_and_test(lv, s1752c3f5, ABISELECT(32,20), 3, 1, 1, "S1752C3");
    check_field_offset(lv, s1752c3f6, ABISELECT(36,24), "S1752C3.s1752c3f6");
    test_class_info(&lv, &cd_S1752C3);
    dp->~S1752C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1752C3(Test_S1752C3, "S1752C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1752C3C1Ev();
extern void _ZN7S1752C3D1Ev();
Name_Map name_map_S1752C3[] = {
  NSPAIR(_ZN7S1752C3C1Ev),
  NSPAIR(_ZN7S1752C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1752C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1752C3[];
extern void _ZN7S1752C3D1Ev();
extern void _ZN7S1752C3D0Ev();
static  VTBL_ENTRY vtc_S1752C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1752C3[0]),
  (VTBL_ENTRY)&_ZN7S1752C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1752C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1752C3[];
extern  VTBL_ENTRY _ZTV7S1752C3[];
Class_Descriptor cd_S1752C3 = {  "S1752C3", // class name
  bases_S1752C3, 1,
  &(vtc_S1752C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1752C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1752C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1752C2  : S1752C3 {
  int s1752c2f0;
  void *s1752c2f1[2];
  int s1752c2f2[2];
  virtual  ~S1752C2(); // _ZN7S1752C2D1Ev
  S1752C2(); // tgen
};
//SIG(-1 S1752C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fi Fp[2] Fi[2]}


 S1752C2 ::~S1752C2(){ note_dtor("S1752C2", this);}
S1752C2 ::S1752C2(){ note_ctor("S1752C2", this);} // tgen

static void Test_S1752C2()
{
  extern Class_Descriptor cd_S1752C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S1752C2, buf);
    S1752C2 *dp, &lv = *(dp=new (buf) S1752C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S1752C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1752C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1752C3*), 0, "S1752C2");
    check_base_class_offset(lv, (S1752C3*), 0, "S1752C2");
    check_field_offset(lv, s1752c2f0, ABISELECT(44,32), "S1752C2.s1752c2f0");
    check_field_offset(lv, s1752c2f1, ABISELECT(48,36), "S1752C2.s1752c2f1");
    check_field_offset(lv, s1752c2f2, ABISELECT(64,44), "S1752C2.s1752c2f2");
    test_class_info(&lv, &cd_S1752C2);
    dp->~S1752C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1752C2(Test_S1752C2, "S1752C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S1752C2C1Ev();
extern void _ZN7S1752C2D1Ev();
Name_Map name_map_S1752C2[] = {
  NSPAIR(_ZN7S1752C2C1Ev),
  NSPAIR(_ZN7S1752C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1752C3;
extern VTBL_ENTRY _ZTI7S1752C3[];
extern  VTBL_ENTRY _ZTV7S1752C3[];
static Base_Class bases_S1752C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1752C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1752C2[];
extern void _ZN7S1752C2D1Ev();
extern void _ZN7S1752C2D0Ev();
static  VTBL_ENTRY vtc_S1752C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1752C2[0]),
  (VTBL_ENTRY)&_ZN7S1752C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1752C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1752C2[];
extern  VTBL_ENTRY _ZTV7S1752C2[];
Class_Descriptor cd_S1752C2 = {  "S1752C2", // class name
  bases_S1752C2, 2,
  &(vtc_S1752C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S1752C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1752C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1752C1  : S1752C2 , S2121C38 {
  char s1752c1f0;
  ~S1752C1(); // tgen
  S1752C1(); // tgen
};
//SIG(1 S1752C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fi Fp[2] Fi[2]} BC5{ m} Fc}


S1752C1 ::~S1752C1(){ note_dtor("S1752C1", this);} // tgen
S1752C1 ::S1752C1(){ note_ctor("S1752C1", this);} // tgen

static void Test_S1752C1()
{
  extern Class_Descriptor cd_S1752C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S1752C1, buf);
    S1752C1 *dp, &lv = *(dp=new (buf) S1752C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S1752C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1752C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1752C3*)(S1752C2*), 0, "S1752C1");
    check_base_class_offset(lv, (S1752C3*)(S1752C2*), 0, "S1752C1");
    check_base_class_offset(lv, (S1752C2*), 0, "S1752C1");
    check_base_class_offset(lv, (S2121C38*), 0, "S1752C1");
    check_field_offset(lv, s1752c1f0, ABISELECT(72,52), "S1752C1.s1752c1f0");
    test_class_info(&lv, &cd_S1752C1);
    dp->~S1752C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1752C1(Test_S1752C1, "S1752C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S1752C1C1Ev();
extern void _ZN7S1752C1D1Ev();
Name_Map name_map_S1752C1[] = {
  NSPAIR(_ZN7S1752C1C1Ev),
  NSPAIR(_ZN7S1752C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1752C3;
extern VTBL_ENTRY _ZTI7S1752C3[];
extern  VTBL_ENTRY _ZTV7S1752C3[];
extern Class_Descriptor cd_S1752C2;
extern VTBL_ENTRY _ZTI7S1752C2[];
extern  VTBL_ENTRY _ZTV7S1752C2[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S1752C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1752C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1752C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1752C1[];
extern void _ZN7S1752C1D1Ev();
extern void _ZN7S1752C1D0Ev();
static  VTBL_ENTRY vtc_S1752C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1752C1[0]),
  (VTBL_ENTRY)&_ZN7S1752C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1752C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1752C1[];
extern  VTBL_ENTRY _ZTV7S1752C1[];
Class_Descriptor cd_S1752C1 = {  "S1752C1", // class name
  bases_S1752C1, 4,
  &(vtc_S1752C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S1752C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1752C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16095C1  {
  ::S3350C8_nt s16095c1f0;
  ::S4846C8 s16095c1f1;
  void  mf16095c1(); // _ZN8S16095C19mf16095c1Ev
};
//SIG(1 S16095C1) C1{ m FC2{ m Fi} FC3{ Fi FC4{ Fc[12]} Fc[48] FC4 FC4 FC5{ Fi Fc[128] FC6{ Fi[2] Fc[320] Fi}}}}


void  S16095C1 ::mf16095c1(){}

static void Test_S16095C1()
{
  {
    init_simple_test("S16095C1");
    S16095C1 lv;
    check2(sizeof(lv), 556, "sizeof(S16095C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16095C1)");
    check_field_offset(lv, s16095c1f0, 0, "S16095C1.s16095c1f0");
    check_field_offset(lv, s16095c1f1, 4, "S16095C1.s16095c1f1");
  }
}
static Arrange_To_Call_Me vS16095C1(Test_S16095C1, "S16095C1", 556);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1753C3  : S6282C14_nt {
  void *s1753c3f0;
  int s1753c3f1[2];
  unsigned int s1753c3f2:1;
  unsigned int s1753c3f3:1;
  unsigned int s1753c3f4:1;
  unsigned int s1753c3f5:1;
  int s1753c3f6[2];
  virtual  ~S1753C3(); // _ZN7S1753C3D1Ev
  S1753C3(); // tgen
};
//SIG(-1 S1753C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1753C3 ::~S1753C3(){ note_dtor("S1753C3", this);}
S1753C3 ::S1753C3(){ note_ctor("S1753C3", this);} // tgen

static void Test_S1753C3()
{
  extern Class_Descriptor cd_S1753C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1753C3, buf);
    S1753C3 *dp, &lv = *(dp=new (buf) S1753C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1753C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1753C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1753C3");
    check_field_offset(lv, s1753c3f0, ABISELECT(16,8), "S1753C3.s1753c3f0");
    check_field_offset(lv, s1753c3f1, ABISELECT(24,12), "S1753C3.s1753c3f1");
    set_bf_and_test(lv, s1753c3f2, ABISELECT(32,20), 0, 1, 1, "S1753C3");
    set_bf_and_test(lv, s1753c3f3, ABISELECT(32,20), 1, 1, 1, "S1753C3");
    set_bf_and_test(lv, s1753c3f4, ABISELECT(32,20), 2, 1, 1, "S1753C3");
    set_bf_and_test(lv, s1753c3f5, ABISELECT(32,20), 3, 1, 1, "S1753C3");
    check_field_offset(lv, s1753c3f6, ABISELECT(36,24), "S1753C3.s1753c3f6");
    test_class_info(&lv, &cd_S1753C3);
    dp->~S1753C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1753C3(Test_S1753C3, "S1753C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1753C3C1Ev();
extern void _ZN7S1753C3D1Ev();
Name_Map name_map_S1753C3[] = {
  NSPAIR(_ZN7S1753C3C1Ev),
  NSPAIR(_ZN7S1753C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1753C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1753C3[];
extern void _ZN7S1753C3D1Ev();
extern void _ZN7S1753C3D0Ev();
static  VTBL_ENTRY vtc_S1753C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1753C3[0]),
  (VTBL_ENTRY)&_ZN7S1753C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1753C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1753C3[];
extern  VTBL_ENTRY _ZTV7S1753C3[];
Class_Descriptor cd_S1753C3 = {  "S1753C3", // class name
  bases_S1753C3, 1,
  &(vtc_S1753C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1753C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1753C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1753C2  : S1753C3 {
  int s1753c2f0;
  void *s1753c2f1[2];
  int s1753c2f2[2];
  virtual  ~S1753C2(); // _ZN7S1753C2D1Ev
  S1753C2(); // tgen
};
//SIG(-1 S1753C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fi Fp[2] Fi[2]}


 S1753C2 ::~S1753C2(){ note_dtor("S1753C2", this);}
S1753C2 ::S1753C2(){ note_ctor("S1753C2", this);} // tgen

static void Test_S1753C2()
{
  extern Class_Descriptor cd_S1753C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S1753C2, buf);
    S1753C2 *dp, &lv = *(dp=new (buf) S1753C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S1753C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1753C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1753C3*), 0, "S1753C2");
    check_base_class_offset(lv, (S1753C3*), 0, "S1753C2");
    check_field_offset(lv, s1753c2f0, ABISELECT(44,32), "S1753C2.s1753c2f0");
    check_field_offset(lv, s1753c2f1, ABISELECT(48,36), "S1753C2.s1753c2f1");
    check_field_offset(lv, s1753c2f2, ABISELECT(64,44), "S1753C2.s1753c2f2");
    test_class_info(&lv, &cd_S1753C2);
    dp->~S1753C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1753C2(Test_S1753C2, "S1753C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S1753C2C1Ev();
extern void _ZN7S1753C2D1Ev();
Name_Map name_map_S1753C2[] = {
  NSPAIR(_ZN7S1753C2C1Ev),
  NSPAIR(_ZN7S1753C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1753C3;
extern VTBL_ENTRY _ZTI7S1753C3[];
extern  VTBL_ENTRY _ZTV7S1753C3[];
static Base_Class bases_S1753C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1753C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1753C2[];
extern void _ZN7S1753C2D1Ev();
extern void _ZN7S1753C2D0Ev();
static  VTBL_ENTRY vtc_S1753C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1753C2[0]),
  (VTBL_ENTRY)&_ZN7S1753C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1753C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1753C2[];
extern  VTBL_ENTRY _ZTV7S1753C2[];
Class_Descriptor cd_S1753C2 = {  "S1753C2", // class name
  bases_S1753C2, 2,
  &(vtc_S1753C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S1753C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1753C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1753C1  : S1753C2 , S2121C38 {
  ~S1753C1(); // tgen
  S1753C1(); // tgen
};
//SIG(1 S1753C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fi Fp[2] Fi[2]} BC5{ m}}


S1753C1 ::~S1753C1(){ note_dtor("S1753C1", this);} // tgen
S1753C1 ::S1753C1(){ note_ctor("S1753C1", this);} // tgen

static void Test_S1753C1()
{
  extern Class_Descriptor cd_S1753C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S1753C1, buf);
    S1753C1 *dp, &lv = *(dp=new (buf) S1753C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S1753C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1753C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1753C3*)(S1753C2*), 0, "S1753C1");
    check_base_class_offset(lv, (S1753C3*)(S1753C2*), 0, "S1753C1");
    check_base_class_offset(lv, (S1753C2*), 0, "S1753C1");
    check_base_class_offset(lv, (S2121C38*), 0, "S1753C1");
    test_class_info(&lv, &cd_S1753C1);
    dp->~S1753C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1753C1(Test_S1753C1, "S1753C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S1753C1C1Ev();
extern void _ZN7S1753C1D1Ev();
Name_Map name_map_S1753C1[] = {
  NSPAIR(_ZN7S1753C1C1Ev),
  NSPAIR(_ZN7S1753C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1753C3;
extern VTBL_ENTRY _ZTI7S1753C3[];
extern  VTBL_ENTRY _ZTV7S1753C3[];
extern Class_Descriptor cd_S1753C2;
extern VTBL_ENTRY _ZTI7S1753C2[];
extern  VTBL_ENTRY _ZTV7S1753C2[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S1753C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1753C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1753C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1753C1[];
extern void _ZN7S1753C1D1Ev();
extern void _ZN7S1753C1D0Ev();
static  VTBL_ENTRY vtc_S1753C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1753C1[0]),
  (VTBL_ENTRY)&_ZN7S1753C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1753C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1753C1[];
extern  VTBL_ENTRY _ZTV7S1753C1[];
Class_Descriptor cd_S1753C1 = {  "S1753C1", // class name
  bases_S1753C1, 4,
  &(vtc_S1753C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S1753C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1753C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1755C3  : S6282C14_nt {
  void *s1755c3f0;
  int s1755c3f1[2];
  unsigned int s1755c3f2:1;
  unsigned int s1755c3f3:1;
  unsigned int s1755c3f4:1;
  unsigned int s1755c3f5:1;
  int s1755c3f6[2];
  virtual  ~S1755C3(); // _ZN7S1755C3D1Ev
  S1755C3(); // tgen
};
//SIG(-1 S1755C3) C1{ BC2{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S1755C3 ::~S1755C3(){ note_dtor("S1755C3", this);}
S1755C3 ::S1755C3(){ note_ctor("S1755C3", this);} // tgen

static void Test_S1755C3()
{
  extern Class_Descriptor cd_S1755C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1755C3, buf);
    S1755C3 *dp, &lv = *(dp=new (buf) S1755C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1755C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1755C3)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S1755C3");
    check_field_offset(lv, s1755c3f0, ABISELECT(16,8), "S1755C3.s1755c3f0");
    check_field_offset(lv, s1755c3f1, ABISELECT(24,12), "S1755C3.s1755c3f1");
    set_bf_and_test(lv, s1755c3f2, ABISELECT(32,20), 0, 1, 1, "S1755C3");
    set_bf_and_test(lv, s1755c3f3, ABISELECT(32,20), 1, 1, 1, "S1755C3");
    set_bf_and_test(lv, s1755c3f4, ABISELECT(32,20), 2, 1, 1, "S1755C3");
    set_bf_and_test(lv, s1755c3f5, ABISELECT(32,20), 3, 1, 1, "S1755C3");
    check_field_offset(lv, s1755c3f6, ABISELECT(36,24), "S1755C3.s1755c3f6");
    test_class_info(&lv, &cd_S1755C3);
    dp->~S1755C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1755C3(Test_S1755C3, "S1755C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1755C3C1Ev();
extern void _ZN7S1755C3D1Ev();
Name_Map name_map_S1755C3[] = {
  NSPAIR(_ZN7S1755C3C1Ev),
  NSPAIR(_ZN7S1755C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S1755C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1755C3[];
extern void _ZN7S1755C3D1Ev();
extern void _ZN7S1755C3D0Ev();
static  VTBL_ENTRY vtc_S1755C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1755C3[0]),
  (VTBL_ENTRY)&_ZN7S1755C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1755C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S1755C3[];
extern  VTBL_ENTRY _ZTV7S1755C3[];
Class_Descriptor cd_S1755C3 = {  "S1755C3", // class name
  bases_S1755C3, 1,
  &(vtc_S1755C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1755C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1755C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1755C2  : S1755C3 {
  void *s1755c2f0;
  virtual  ~S1755C2(); // _ZN7S1755C2D1Ev
  S1755C2(); // tgen
};
//SIG(-1 S1755C2) C1{ BC2{ BC3{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fp}


 S1755C2 ::~S1755C2(){ note_dtor("S1755C2", this);}
S1755C2 ::S1755C2(){ note_ctor("S1755C2", this);} // tgen

static void Test_S1755C2()
{
  extern Class_Descriptor cd_S1755C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S1755C2, buf);
    S1755C2 *dp, &lv = *(dp=new (buf) S1755C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S1755C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1755C2)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1755C3*), 0, "S1755C2");
    check_base_class_offset(lv, (S1755C3*), 0, "S1755C2");
    check_field_offset(lv, s1755c2f0, ABISELECT(48,32), "S1755C2.s1755c2f0");
    test_class_info(&lv, &cd_S1755C2);
    dp->~S1755C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1755C2(Test_S1755C2, "S1755C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S1755C2C1Ev();
extern void _ZN7S1755C2D1Ev();
Name_Map name_map_S1755C2[] = {
  NSPAIR(_ZN7S1755C2C1Ev),
  NSPAIR(_ZN7S1755C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1755C3;
extern VTBL_ENTRY _ZTI7S1755C3[];
extern  VTBL_ENTRY _ZTV7S1755C3[];
static Base_Class bases_S1755C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1755C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1755C2[];
extern void _ZN7S1755C2D1Ev();
extern void _ZN7S1755C2D0Ev();
static  VTBL_ENTRY vtc_S1755C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1755C2[0]),
  (VTBL_ENTRY)&_ZN7S1755C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1755C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S1755C2[];
extern  VTBL_ENTRY _ZTV7S1755C2[];
Class_Descriptor cd_S1755C2 = {  "S1755C2", // class name
  bases_S1755C2, 2,
  &(vtc_S1755C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S1755C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1755C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1755C1  : S1755C2 {
  void *s1755c1f0;
  int s1755c1f1;
  void *s1755c1f2[4];
  virtual  ~S1755C1(); // _ZN7S1755C1D1Ev
  S1755C1(); // tgen
};
//SIG(1 S1755C1) C1{ BC2{ BC3{ BC4{ vd m Fi} vd Fp Fi[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd Fp} vd Fp Fi Fp[4]}


 S1755C1 ::~S1755C1(){ note_dtor("S1755C1", this);}
S1755C1 ::S1755C1(){ note_ctor("S1755C1", this);} // tgen

static void Test_S1755C1()
{
  extern Class_Descriptor cd_S1755C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S1755C1, buf);
    S1755C1 *dp, &lv = *(dp=new (buf) S1755C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S1755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1755C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S1755C3*)(S1755C2*), 0, "S1755C1");
    check_base_class_offset(lv, (S1755C3*)(S1755C2*), 0, "S1755C1");
    check_base_class_offset(lv, (S1755C2*), 0, "S1755C1");
    check_field_offset(lv, s1755c1f0, ABISELECT(56,36), "S1755C1.s1755c1f0");
    check_field_offset(lv, s1755c1f1, ABISELECT(64,40), "S1755C1.s1755c1f1");
    check_field_offset(lv, s1755c1f2, ABISELECT(72,44), "S1755C1.s1755c1f2");
    test_class_info(&lv, &cd_S1755C1);
    dp->~S1755C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1755C1(Test_S1755C1, "S1755C1", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN7S1755C1C1Ev();
extern void _ZN7S1755C1D1Ev();
Name_Map name_map_S1755C1[] = {
  NSPAIR(_ZN7S1755C1C1Ev),
  NSPAIR(_ZN7S1755C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S1755C3;
extern VTBL_ENTRY _ZTI7S1755C3[];
extern  VTBL_ENTRY _ZTV7S1755C3[];
extern Class_Descriptor cd_S1755C2;
extern VTBL_ENTRY _ZTI7S1755C2[];
extern  VTBL_ENTRY _ZTV7S1755C2[];
static Base_Class bases_S1755C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1755C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1755C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1755C1[];
extern void _ZN7S1755C1D1Ev();
extern void _ZN7S1755C1D0Ev();
static  VTBL_ENTRY vtc_S1755C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1755C1[0]),
  (VTBL_ENTRY)&_ZN7S1755C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1755C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S1755C1[];
extern  VTBL_ENTRY _ZTV7S1755C1[];
Class_Descriptor cd_S1755C1 = {  "S1755C1", // class name
  bases_S1755C1, 3,
  &(vtc_S1755C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI7S1755C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1755C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10089C2  {
  virtual  ~S10089C2(); // _ZN8S10089C2D1Ev
  virtual void  v6(); // _ZN8S10089C22v6Ev
  virtual void  v7(); // _ZN8S10089C22v7Ev
  virtual void  v8(); // _ZN8S10089C22v8Ev
  virtual void  v9(); // _ZN8S10089C22v9Ev
  virtual void  v10(); // _ZN8S10089C23v10Ev
  S10089C2(); // tgen
};
//SIG(-1 S10089C2) C1{ vd v1 v2 v3 v4 v5}


 S10089C2 ::~S10089C2(){ note_dtor("S10089C2", this);}
void  S10089C2 ::v6(){vfunc_called(this, "_ZN8S10089C22v6Ev");}
void  S10089C2 ::v7(){vfunc_called(this, "_ZN8S10089C22v7Ev");}
void  S10089C2 ::v8(){vfunc_called(this, "_ZN8S10089C22v8Ev");}
void  S10089C2 ::v9(){vfunc_called(this, "_ZN8S10089C22v9Ev");}
void  S10089C2 ::v10(){vfunc_called(this, "_ZN8S10089C23v10Ev");}
S10089C2 ::S10089C2(){ note_ctor("S10089C2", this);} // tgen

static void Test_S10089C2()
{
  extern Class_Descriptor cd_S10089C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10089C2, buf);
    S10089C2 *dp, &lv = *(dp=new (buf) S10089C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10089C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10089C2)");
    test_class_info(&lv, &cd_S10089C2);
    dp->~S10089C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10089C2(Test_S10089C2, "S10089C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10089C2C1Ev();
extern void _ZN8S10089C2D1Ev();
Name_Map name_map_S10089C2[] = {
  NSPAIR(_ZN8S10089C2C1Ev),
  NSPAIR(_ZN8S10089C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10089C2[];
extern void _ZN8S10089C2D1Ev();
extern void _ZN8S10089C2D0Ev();
extern void _ZN8S10089C22v6Ev();
extern void _ZN8S10089C22v7Ev();
extern void _ZN8S10089C22v8Ev();
extern void _ZN8S10089C22v9Ev();
extern void _ZN8S10089C23v10Ev();
static  VTBL_ENTRY vtc_S10089C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10089C2[0]),
  (VTBL_ENTRY)&_ZN8S10089C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10089C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10089C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10089C2[];
extern  VTBL_ENTRY _ZTV8S10089C2[];
Class_Descriptor cd_S10089C2 = {  "S10089C2", // class name
  0,0,//no base classes
  &(vtc_S10089C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10089C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10089C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10089C1  : S10089C2 {
  void *s10089c1f0[3];
  char s10089c1f1;
  ::S2121C13_nt s10089c1f2;
  ::S2121C13_nt s10089c1f3;
  virtual  ~S10089C1(); // _ZN8S10089C1D1Ev
  virtual void  v1(); // _ZN8S10089C12v1Ev
  virtual void  v2(); // _ZN8S10089C12v2Ev
  virtual void  v3(); // _ZN8S10089C12v3Ev
  virtual void  v4(); // _ZN8S10089C12v4Ev
  virtual void  v5(); // _ZN8S10089C12v5Ev
  S10089C1(); // tgen
};
//SIG(1 S10089C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[3] Fc FC3{ m FC4{ m FL[2]}} FC3}


 S10089C1 ::~S10089C1(){ note_dtor("S10089C1", this);}
void  S10089C1 ::v1(){vfunc_called(this, "_ZN8S10089C12v1Ev");}
void  S10089C1 ::v2(){vfunc_called(this, "_ZN8S10089C12v2Ev");}
void  S10089C1 ::v3(){vfunc_called(this, "_ZN8S10089C12v3Ev");}
void  S10089C1 ::v4(){vfunc_called(this, "_ZN8S10089C12v4Ev");}
void  S10089C1 ::v5(){vfunc_called(this, "_ZN8S10089C12v5Ev");}
S10089C1 ::S10089C1(){ note_ctor("S10089C1", this);} // tgen

static void Test_S10089C1()
{
  extern Class_Descriptor cd_S10089C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S10089C1, buf);
    S10089C1 *dp, &lv = *(dp=new (buf) S10089C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S10089C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10089C1)");
    check_base_class_offset(lv, (S10089C2*), 0, "S10089C1");
    check_field_offset(lv, s10089c1f0, ABISELECT(8,4), "S10089C1.s10089c1f0");
    check_field_offset(lv, s10089c1f1, ABISELECT(32,16), "S10089C1.s10089c1f1");
    check_field_offset(lv, s10089c1f2, ABISELECT(40,20), "S10089C1.s10089c1f2");
    check_field_offset(lv, s10089c1f3, ABISELECT(56,36), "S10089C1.s10089c1f3");
    test_class_info(&lv, &cd_S10089C1);
    dp->~S10089C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10089C1(Test_S10089C1, "S10089C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN8S10089C1C1Ev();
extern void _ZN8S10089C1D1Ev();
Name_Map name_map_S10089C1[] = {
  NSPAIR(_ZN8S10089C1C1Ev),
  NSPAIR(_ZN8S10089C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10089C2;
extern VTBL_ENTRY _ZTI8S10089C2[];
extern  VTBL_ENTRY _ZTV8S10089C2[];
static Base_Class bases_S10089C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10089C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10089C1[];
extern void _ZN8S10089C1D1Ev();
extern void _ZN8S10089C1D0Ev();
extern void _ZN8S10089C22v6Ev();
extern void _ZN8S10089C22v7Ev();
extern void _ZN8S10089C22v8Ev();
extern void _ZN8S10089C22v9Ev();
extern void _ZN8S10089C23v10Ev();
extern void _ZN8S10089C12v1Ev();
extern void _ZN8S10089C12v2Ev();
extern void _ZN8S10089C12v3Ev();
extern void _ZN8S10089C12v4Ev();
extern void _ZN8S10089C12v5Ev();
static  VTBL_ENTRY vtc_S10089C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10089C1[0]),
  (VTBL_ENTRY)&_ZN8S10089C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10089C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10089C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10089C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10089C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10089C1[];
extern  VTBL_ENTRY _ZTV8S10089C1[];
Class_Descriptor cd_S10089C1 = {  "S10089C1", // class name
  bases_S10089C1, 1,
  &(vtc_S10089C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI8S10089C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10089C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7032C2  {
  virtual  ~S7032C2(); // _ZN7S7032C2D1Ev
  virtual void  v6(); // _ZN7S7032C22v6Ev
  virtual void  v7(); // _ZN7S7032C22v7Ev
  virtual void  v8(); // _ZN7S7032C22v8Ev
  virtual void  v9(); // _ZN7S7032C22v9Ev
  virtual void  v10(); // _ZN7S7032C23v10Ev
  S7032C2(); // tgen
};
//SIG(-1 S7032C2) C1{ vd v1 v2 v3 v4 v5}


 S7032C2 ::~S7032C2(){ note_dtor("S7032C2", this);}
void  S7032C2 ::v6(){vfunc_called(this, "_ZN7S7032C22v6Ev");}
void  S7032C2 ::v7(){vfunc_called(this, "_ZN7S7032C22v7Ev");}
void  S7032C2 ::v8(){vfunc_called(this, "_ZN7S7032C22v8Ev");}
void  S7032C2 ::v9(){vfunc_called(this, "_ZN7S7032C22v9Ev");}
void  S7032C2 ::v10(){vfunc_called(this, "_ZN7S7032C23v10Ev");}
S7032C2 ::S7032C2(){ note_ctor("S7032C2", this);} // tgen

static void Test_S7032C2()
{
  extern Class_Descriptor cd_S7032C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7032C2, buf);
    S7032C2 *dp, &lv = *(dp=new (buf) S7032C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7032C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7032C2)");
    test_class_info(&lv, &cd_S7032C2);
    dp->~S7032C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7032C2(Test_S7032C2, "S7032C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7032C2C1Ev();
extern void _ZN7S7032C2D1Ev();
Name_Map name_map_S7032C2[] = {
  NSPAIR(_ZN7S7032C2C1Ev),
  NSPAIR(_ZN7S7032C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7032C2[];
extern void _ZN7S7032C2D1Ev();
extern void _ZN7S7032C2D0Ev();
extern void _ZN7S7032C22v6Ev();
extern void _ZN7S7032C22v7Ev();
extern void _ZN7S7032C22v8Ev();
extern void _ZN7S7032C22v9Ev();
extern void _ZN7S7032C23v10Ev();
static  VTBL_ENTRY vtc_S7032C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7032C2[0]),
  (VTBL_ENTRY)&_ZN7S7032C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7032C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7032C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7032C2[];
extern  VTBL_ENTRY _ZTV7S7032C2[];
Class_Descriptor cd_S7032C2 = {  "S7032C2", // class name
  0,0,//no base classes
  &(vtc_S7032C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7032C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7032C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7032C4_nt  {
  int s7032c4f0[3];
};
//SIG(-1 S7032C4_nt) C1{ Fi[3]}



//skip512 S7032C4_nt

#else // __cplusplus

Class_Descriptor cd_S7032C4_nt = {  "S7032C4_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  12, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7032C3_nt  : S7032C4_nt {
};
//SIG(-1 S7032C3_nt) C1{ BC2{ Fi[3]}}



//skip512 S7032C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S7032C4_nt;
static Base_Class bases_S7032C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7032C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7032C1  : S7032C2 {
  ::S7032C3_nt s7032c1f0;
  int s7032c1f1;
  void *s7032c1f2;
  int s7032c1f3[258];
  virtual  ~S7032C1(); // _ZN7S7032C1D1Ev
  virtual void  v1(); // _ZN7S7032C12v1Ev
  virtual void  v2(); // _ZN7S7032C12v2Ev
  virtual void  v3(); // _ZN7S7032C12v3Ev
  virtual void  v4(); // _ZN7S7032C12v4Ev
  virtual void  v5(); // _ZN7S7032C12v5Ev
  S7032C1(); // tgen
};
//SIG(1 S7032C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC3{ BC4{ Fi[3]}} Fi Fp Fi[258]}


 S7032C1 ::~S7032C1(){ note_dtor("S7032C1", this);}
void  S7032C1 ::v1(){vfunc_called(this, "_ZN7S7032C12v1Ev");}
void  S7032C1 ::v2(){vfunc_called(this, "_ZN7S7032C12v2Ev");}
void  S7032C1 ::v3(){vfunc_called(this, "_ZN7S7032C12v3Ev");}
void  S7032C1 ::v4(){vfunc_called(this, "_ZN7S7032C12v4Ev");}
void  S7032C1 ::v5(){vfunc_called(this, "_ZN7S7032C12v5Ev");}
S7032C1 ::S7032C1(){ note_ctor("S7032C1", this);} // tgen

static void Test_S7032C1()
{
  extern Class_Descriptor cd_S7032C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(134,265)];
    init_test(&cd_S7032C1, buf);
    S7032C1 *dp, &lv = *(dp=new (buf) S7032C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1064,1056), "sizeof(S7032C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7032C1)");
    check_base_class_offset(lv, (S7032C2*), 0, "S7032C1");
    check_field_offset(lv, s7032c1f0, ABISELECT(8,4), "S7032C1.s7032c1f0");
    check_field_offset(lv, s7032c1f1, ABISELECT(20,16), "S7032C1.s7032c1f1");
    check_field_offset(lv, s7032c1f2, ABISELECT(24,20), "S7032C1.s7032c1f2");
    check_field_offset(lv, s7032c1f3, ABISELECT(32,24), "S7032C1.s7032c1f3");
    test_class_info(&lv, &cd_S7032C1);
    dp->~S7032C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7032C1(Test_S7032C1, "S7032C1", ABISELECT(1064,1056));

#else // __cplusplus

extern void _ZN7S7032C1C1Ev();
extern void _ZN7S7032C1D1Ev();
Name_Map name_map_S7032C1[] = {
  NSPAIR(_ZN7S7032C1C1Ev),
  NSPAIR(_ZN7S7032C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7032C2;
extern VTBL_ENTRY _ZTI7S7032C2[];
extern  VTBL_ENTRY _ZTV7S7032C2[];
static Base_Class bases_S7032C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7032C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7032C1[];
extern void _ZN7S7032C1D1Ev();
extern void _ZN7S7032C1D0Ev();
extern void _ZN7S7032C22v6Ev();
extern void _ZN7S7032C22v7Ev();
extern void _ZN7S7032C22v8Ev();
extern void _ZN7S7032C22v9Ev();
extern void _ZN7S7032C23v10Ev();
extern void _ZN7S7032C12v1Ev();
extern void _ZN7S7032C12v2Ev();
extern void _ZN7S7032C12v3Ev();
extern void _ZN7S7032C12v4Ev();
extern void _ZN7S7032C12v5Ev();
static  VTBL_ENTRY vtc_S7032C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7032C1[0]),
  (VTBL_ENTRY)&_ZN7S7032C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7032C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7032C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7032C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7032C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7032C1[];
extern  VTBL_ENTRY _ZTV7S7032C1[];
Class_Descriptor cd_S7032C1 = {  "S7032C1", // class name
  bases_S7032C1, 1,
  &(vtc_S7032C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1064,1056), // object size
  NSPAIRA(_ZTI7S7032C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7032C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2608C2  : S3350C8_nt {
};
//SIG(-1 S2608C2) C1{ BC2{ m Fi}}



static void Test_S2608C2()
{
  extern Class_Descriptor cd_S2608C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2608C2, buf);
    S2608C2 &lv = *(new (buf) S2608C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2608C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2608C2)");
    check_base_class_offset(lv, (S3350C8_nt*), 0, "S2608C2");
    test_class_info(&lv, &cd_S2608C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2608C2(Test_S2608C2, "S2608C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
static Base_Class bases_S2608C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2608C2[];
Class_Descriptor cd_S2608C2 = {  "S2608C2", // class name
  bases_S2608C2, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S2608C2),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2608C4  {
  virtual  ~S2608C4(); // _ZN7S2608C4D1Ev
  virtual void  v7(); // _ZN7S2608C42v7Ev
  virtual void  v8(); // _ZN7S2608C42v8Ev
  virtual void  v9(); // _ZN7S2608C42v9Ev
  virtual void  v10(); // _ZN7S2608C43v10Ev
  virtual void  v11(); // _ZN7S2608C43v11Ev
  S2608C4(); // tgen
};
//SIG(-1 S2608C4) C1{ vd v1 v2 v3 v4 v5}


 S2608C4 ::~S2608C4(){ note_dtor("S2608C4", this);}
void  S2608C4 ::v7(){vfunc_called(this, "_ZN7S2608C42v7Ev");}
void  S2608C4 ::v8(){vfunc_called(this, "_ZN7S2608C42v8Ev");}
void  S2608C4 ::v9(){vfunc_called(this, "_ZN7S2608C42v9Ev");}
void  S2608C4 ::v10(){vfunc_called(this, "_ZN7S2608C43v10Ev");}
void  S2608C4 ::v11(){vfunc_called(this, "_ZN7S2608C43v11Ev");}
S2608C4 ::S2608C4(){ note_ctor("S2608C4", this);} // tgen

static void Test_S2608C4()
{
  extern Class_Descriptor cd_S2608C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2608C4, buf);
    S2608C4 *dp, &lv = *(dp=new (buf) S2608C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2608C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2608C4)");
    test_class_info(&lv, &cd_S2608C4);
    dp->~S2608C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2608C4(Test_S2608C4, "S2608C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2608C4C1Ev();
extern void _ZN7S2608C4D1Ev();
Name_Map name_map_S2608C4[] = {
  NSPAIR(_ZN7S2608C4C1Ev),
  NSPAIR(_ZN7S2608C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2608C4[];
extern void _ZN7S2608C4D1Ev();
extern void _ZN7S2608C4D0Ev();
extern void _ZN7S2608C42v7Ev();
extern void _ZN7S2608C42v8Ev();
extern void _ZN7S2608C42v9Ev();
extern void _ZN7S2608C43v10Ev();
extern void _ZN7S2608C43v11Ev();
static  VTBL_ENTRY vtc_S2608C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2608C4[0]),
  (VTBL_ENTRY)&_ZN7S2608C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2608C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2608C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2608C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S2608C4[];
extern  VTBL_ENTRY _ZTV7S2608C4[];
Class_Descriptor cd_S2608C4 = {  "S2608C4", // class name
  0,0,//no base classes
  &(vtc_S2608C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2608C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2608C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2608C1  : S2608C2 , S2608C4 {
  ::S21811C13_nt s2608c1f0;
  virtual  ~S2608C1(); // _ZN7S2608C1D1Ev
  virtual void  v1(); // _ZN7S2608C12v1Ev
  virtual void  v2(); // _ZN7S2608C12v2Ev
  virtual void  v3(); // _ZN7S2608C12v3Ev
  virtual void  v4(); // _ZN7S2608C12v4Ev
  virtual void  v5(); // _ZN7S2608C12v5Ev
  virtual void  v6(); // _ZN7S2608C12v6Ev
  S2608C1(); // tgen
};
//SIG(1 S2608C1) C1{ BC2{ BC3{ m Fi}} BC4{ vd v7 v8 v9 v10 v11} vd v1 v2 v3 v4 v5 v6 FC5{ m Fp}}


 S2608C1 ::~S2608C1(){ note_dtor("S2608C1", this);}
void  S2608C1 ::v1(){vfunc_called(this, "_ZN7S2608C12v1Ev");}
void  S2608C1 ::v2(){vfunc_called(this, "_ZN7S2608C12v2Ev");}
void  S2608C1 ::v3(){vfunc_called(this, "_ZN7S2608C12v3Ev");}
void  S2608C1 ::v4(){vfunc_called(this, "_ZN7S2608C12v4Ev");}
void  S2608C1 ::v5(){vfunc_called(this, "_ZN7S2608C12v5Ev");}
void  S2608C1 ::v6(){vfunc_called(this, "_ZN7S2608C12v6Ev");}
S2608C1 ::S2608C1(){ note_ctor("S2608C1", this);} // tgen

static void Test_S2608C1()
{
  extern Class_Descriptor cd_S2608C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S2608C1, buf);
    S2608C1 *dp, &lv = *(dp=new (buf) S2608C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2608C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2608C1)");
    check_base_class_offset(lv, (S3350C8_nt*)(S2608C2*), ABISELECT(8,4), "S2608C1");
    check_base_class_offset(lv, (S2608C2*), ABISELECT(8,4), "S2608C1");
    check_base_class_offset(lv, (S2608C4*), 0, "S2608C1");
    check_field_offset(lv, s2608c1f0, ABISELECT(16,8), "S2608C1.s2608c1f0");
    test_class_info(&lv, &cd_S2608C1);
    dp->~S2608C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2608C1(Test_S2608C1, "S2608C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S2608C1C1Ev();
extern void _ZN7S2608C1D1Ev();
Name_Map name_map_S2608C1[] = {
  NSPAIR(_ZN7S2608C1C1Ev),
  NSPAIR(_ZN7S2608C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
extern Class_Descriptor cd_S2608C2;
extern VTBL_ENTRY _ZTI7S2608C2[];
extern Class_Descriptor cd_S2608C4;
extern VTBL_ENTRY _ZTI7S2608C4[];
extern  VTBL_ENTRY _ZTV7S2608C4[];
static Base_Class bases_S2608C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2608C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2608C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2608C1[];
extern void _ZN7S2608C1D1Ev();
extern void _ZN7S2608C1D0Ev();
extern void _ZN7S2608C42v7Ev();
extern void _ZN7S2608C42v8Ev();
extern void _ZN7S2608C42v9Ev();
extern void _ZN7S2608C43v10Ev();
extern void _ZN7S2608C43v11Ev();
extern void _ZN7S2608C12v1Ev();
extern void _ZN7S2608C12v2Ev();
extern void _ZN7S2608C12v3Ev();
extern void _ZN7S2608C12v4Ev();
extern void _ZN7S2608C12v5Ev();
extern void _ZN7S2608C12v6Ev();
static  VTBL_ENTRY vtc_S2608C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2608C1[0]),
  (VTBL_ENTRY)&_ZN7S2608C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2608C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2608C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2608C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2608C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2608C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S2608C1[];
extern  VTBL_ENTRY _ZTV7S2608C1[];
Class_Descriptor cd_S2608C1 = {  "S2608C1", // class name
  bases_S2608C1, 3,
  &(vtc_S2608C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2608C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2608C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3345C3  {
  virtual  ~S3345C3(); // _ZN7S3345C3D1Ev
  virtual void  v6(); // _ZN7S3345C32v6Ev
  virtual void  v7(); // _ZN7S3345C32v7Ev
  virtual void  v8(); // _ZN7S3345C32v8Ev
  virtual void  v9(); // _ZN7S3345C32v9Ev
  virtual void  v10(); // _ZN7S3345C33v10Ev
  S3345C3(); // tgen
};
//SIG(-1 S3345C3) C1{ vd v1 v2 v3 v4 v5}


 S3345C3 ::~S3345C3(){ note_dtor("S3345C3", this);}
void  S3345C3 ::v6(){vfunc_called(this, "_ZN7S3345C32v6Ev");}
void  S3345C3 ::v7(){vfunc_called(this, "_ZN7S3345C32v7Ev");}
void  S3345C3 ::v8(){vfunc_called(this, "_ZN7S3345C32v8Ev");}
void  S3345C3 ::v9(){vfunc_called(this, "_ZN7S3345C32v9Ev");}
void  S3345C3 ::v10(){vfunc_called(this, "_ZN7S3345C33v10Ev");}
S3345C3 ::S3345C3(){ note_ctor("S3345C3", this);} // tgen

static void Test_S3345C3()
{
  extern Class_Descriptor cd_S3345C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3345C3, buf);
    S3345C3 *dp, &lv = *(dp=new (buf) S3345C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3345C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3345C3)");
    test_class_info(&lv, &cd_S3345C3);
    dp->~S3345C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3345C3(Test_S3345C3, "S3345C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3345C3C1Ev();
extern void _ZN7S3345C3D1Ev();
Name_Map name_map_S3345C3[] = {
  NSPAIR(_ZN7S3345C3C1Ev),
  NSPAIR(_ZN7S3345C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3345C3[];
extern void _ZN7S3345C3D1Ev();
extern void _ZN7S3345C3D0Ev();
extern void _ZN7S3345C32v6Ev();
extern void _ZN7S3345C32v7Ev();
extern void _ZN7S3345C32v8Ev();
extern void _ZN7S3345C32v9Ev();
extern void _ZN7S3345C33v10Ev();
static  VTBL_ENTRY vtc_S3345C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3345C3[0]),
  (VTBL_ENTRY)&_ZN7S3345C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3345C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3345C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3345C3[];
extern  VTBL_ENTRY _ZTV7S3345C3[];
Class_Descriptor cd_S3345C3 = {  "S3345C3", // class name
  0,0,//no base classes
  &(vtc_S3345C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3345C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3345C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3345C2  : S3345C3 {
  ::S3345C3 s3345c2f0;
  virtual  ~S3345C2(); // _ZN7S3345C2D1Ev
  virtual void  v11(); // _ZN7S3345C23v11Ev
  virtual void  v12(); // _ZN7S3345C23v12Ev
  virtual void  v13(); // _ZN7S3345C23v13Ev
  virtual void  v14(); // _ZN7S3345C23v14Ev
  virtual void  v15(); // _ZN7S3345C23v15Ev
  S3345C2(); // tgen
};
//SIG(-1 S3345C2) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC2}


 S3345C2 ::~S3345C2(){ note_dtor("S3345C2", this);}
void  S3345C2 ::v11(){vfunc_called(this, "_ZN7S3345C23v11Ev");}
void  S3345C2 ::v12(){vfunc_called(this, "_ZN7S3345C23v12Ev");}
void  S3345C2 ::v13(){vfunc_called(this, "_ZN7S3345C23v13Ev");}
void  S3345C2 ::v14(){vfunc_called(this, "_ZN7S3345C23v14Ev");}
void  S3345C2 ::v15(){vfunc_called(this, "_ZN7S3345C23v15Ev");}
S3345C2 ::S3345C2(){ note_ctor("S3345C2", this);} // tgen

static void Test_S3345C2()
{
  extern Class_Descriptor cd_S3345C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3345C2, buf);
    S3345C2 *dp, &lv = *(dp=new (buf) S3345C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3345C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3345C2)");
    check_base_class_offset(lv, (S3345C3*), 0, "S3345C2");
    check_field_offset(lv, s3345c2f0, ABISELECT(8,4), "S3345C2.s3345c2f0");
    test_class_info(&lv, &cd_S3345C2);
    dp->~S3345C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3345C2(Test_S3345C2, "S3345C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3345C2C1Ev();
extern void _ZN7S3345C2D1Ev();
Name_Map name_map_S3345C2[] = {
  NSPAIR(_ZN7S3345C2C1Ev),
  NSPAIR(_ZN7S3345C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3345C3;
extern VTBL_ENTRY _ZTI7S3345C3[];
extern  VTBL_ENTRY _ZTV7S3345C3[];
static Base_Class bases_S3345C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3345C2[];
extern void _ZN7S3345C2D1Ev();
extern void _ZN7S3345C2D0Ev();
extern void _ZN7S3345C32v6Ev();
extern void _ZN7S3345C32v7Ev();
extern void _ZN7S3345C32v8Ev();
extern void _ZN7S3345C32v9Ev();
extern void _ZN7S3345C33v10Ev();
extern void _ZN7S3345C23v11Ev();
extern void _ZN7S3345C23v12Ev();
extern void _ZN7S3345C23v13Ev();
extern void _ZN7S3345C23v14Ev();
extern void _ZN7S3345C23v15Ev();
static  VTBL_ENTRY vtc_S3345C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3345C2[0]),
  (VTBL_ENTRY)&_ZN7S3345C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3345C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3345C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S3345C2[];
extern  VTBL_ENTRY _ZTV7S3345C2[];
Class_Descriptor cd_S3345C2 = {  "S3345C2", // class name
  bases_S3345C2, 1,
  &(vtc_S3345C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3345C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3345C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3345C1  : S3345C2 {
  virtual void  v1(); // _ZN7S3345C12v1Ev
  virtual void  v2(); // _ZN7S3345C12v2Ev
  virtual void  v3(); // _ZN7S3345C12v3Ev
  virtual void  v4(); // _ZN7S3345C12v4Ev
  virtual void  v5(); // _ZN7S3345C12v5Ev
  ~S3345C1(); // tgen
  S3345C1(); // tgen
};
//SIG(1 S3345C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10} vd v11 v12 v13 v14 v15 FC3} v1 v2 v3 v4 v5}


void  S3345C1 ::v1(){vfunc_called(this, "_ZN7S3345C12v1Ev");}
void  S3345C1 ::v2(){vfunc_called(this, "_ZN7S3345C12v2Ev");}
void  S3345C1 ::v3(){vfunc_called(this, "_ZN7S3345C12v3Ev");}
void  S3345C1 ::v4(){vfunc_called(this, "_ZN7S3345C12v4Ev");}
void  S3345C1 ::v5(){vfunc_called(this, "_ZN7S3345C12v5Ev");}
S3345C1 ::~S3345C1(){ note_dtor("S3345C1", this);} // tgen
S3345C1 ::S3345C1(){ note_ctor("S3345C1", this);} // tgen

static void Test_S3345C1()
{
  extern Class_Descriptor cd_S3345C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3345C1, buf);
    S3345C1 *dp, &lv = *(dp=new (buf) S3345C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3345C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3345C1)");
    check_base_class_offset(lv, (S3345C3*)(S3345C2*), 0, "S3345C1");
    check_base_class_offset(lv, (S3345C2*), 0, "S3345C1");
    test_class_info(&lv, &cd_S3345C1);
    dp->~S3345C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3345C1(Test_S3345C1, "S3345C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3345C1C1Ev();
extern void _ZN7S3345C1D1Ev();
Name_Map name_map_S3345C1[] = {
  NSPAIR(_ZN7S3345C1C1Ev),
  NSPAIR(_ZN7S3345C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3345C3;
extern VTBL_ENTRY _ZTI7S3345C3[];
extern  VTBL_ENTRY _ZTV7S3345C3[];
extern Class_Descriptor cd_S3345C2;
extern VTBL_ENTRY _ZTI7S3345C2[];
extern  VTBL_ENTRY _ZTV7S3345C2[];
static Base_Class bases_S3345C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3345C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3345C1[];
extern void _ZN7S3345C1D1Ev();
extern void _ZN7S3345C1D0Ev();
extern void _ZN7S3345C32v6Ev();
extern void _ZN7S3345C32v7Ev();
extern void _ZN7S3345C32v8Ev();
extern void _ZN7S3345C32v9Ev();
extern void _ZN7S3345C33v10Ev();
extern void _ZN7S3345C23v11Ev();
extern void _ZN7S3345C23v12Ev();
extern void _ZN7S3345C23v13Ev();
extern void _ZN7S3345C23v14Ev();
extern void _ZN7S3345C23v15Ev();
extern void _ZN7S3345C12v1Ev();
extern void _ZN7S3345C12v2Ev();
extern void _ZN7S3345C12v3Ev();
extern void _ZN7S3345C12v4Ev();
extern void _ZN7S3345C12v5Ev();
static  VTBL_ENTRY vtc_S3345C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3345C1[0]),
  (VTBL_ENTRY)&_ZN7S3345C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3345C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3345C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3345C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3345C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3345C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3345C1[];
extern  VTBL_ENTRY _ZTV7S3345C1[];
Class_Descriptor cd_S3345C1 = {  "S3345C1", // class name
  bases_S3345C1, 2,
  &(vtc_S3345C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3345C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3345C1),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20363C2  {
  virtual void  v7(); // _ZN8S20363C22v7Ev
  virtual void  v8(); // _ZN8S20363C22v8Ev
  virtual void  v9(); // _ZN8S20363C22v9Ev
  virtual void  v10(); // _ZN8S20363C23v10Ev
  ~S20363C2(); // tgen
  S20363C2(); // tgen
};
//SIG(-1 S20363C2) C1{ v1 v2 v3 v4}


void  S20363C2 ::v7(){vfunc_called(this, "_ZN8S20363C22v7Ev");}
void  S20363C2 ::v8(){vfunc_called(this, "_ZN8S20363C22v8Ev");}
void  S20363C2 ::v9(){vfunc_called(this, "_ZN8S20363C22v9Ev");}
void  S20363C2 ::v10(){vfunc_called(this, "_ZN8S20363C23v10Ev");}
S20363C2 ::~S20363C2(){ note_dtor("S20363C2", this);} // tgen
S20363C2 ::S20363C2(){ note_ctor("S20363C2", this);} // tgen

static void Test_S20363C2()
{
  extern Class_Descriptor cd_S20363C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20363C2, buf);
    S20363C2 *dp, &lv = *(dp=new (buf) S20363C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20363C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20363C2)");
    test_class_info(&lv, &cd_S20363C2);
    dp->~S20363C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20363C2(Test_S20363C2, "S20363C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20363C2C1Ev();
extern void _ZN8S20363C2D1Ev();
Name_Map name_map_S20363C2[] = {
  NSPAIR(_ZN8S20363C2C1Ev),
  NSPAIR(_ZN8S20363C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20363C2[];
extern void _ZN8S20363C22v7Ev();
extern void _ZN8S20363C22v8Ev();
extern void _ZN8S20363C22v9Ev();
extern void _ZN8S20363C23v10Ev();
static  VTBL_ENTRY vtc_S20363C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20363C2[0]),
  (VTBL_ENTRY)&_ZN8S20363C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20363C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20363C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20363C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20363C2[];
extern  VTBL_ENTRY _ZTV8S20363C2[];
Class_Descriptor cd_S20363C2 = {  "S20363C2", // class name
  0,0,//no base classes
  &(vtc_S20363C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20363C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20363C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20363C3  {
  virtual  ~S20363C3(); // _ZN8S20363C3D1Ev
  virtual void  v11(); // _ZN8S20363C33v11Ev
  virtual void  v12(); // _ZN8S20363C33v12Ev
  virtual void  v13(); // _ZN8S20363C33v13Ev
  virtual void  v14(); // _ZN8S20363C33v14Ev
  virtual void  v15(); // _ZN8S20363C33v15Ev
  S20363C3(); // tgen
};
//SIG(-1 S20363C3) C1{ vd v1 v2 v3 v4 v5}


 S20363C3 ::~S20363C3(){ note_dtor("S20363C3", this);}
void  S20363C3 ::v11(){vfunc_called(this, "_ZN8S20363C33v11Ev");}
void  S20363C3 ::v12(){vfunc_called(this, "_ZN8S20363C33v12Ev");}
void  S20363C3 ::v13(){vfunc_called(this, "_ZN8S20363C33v13Ev");}
void  S20363C3 ::v14(){vfunc_called(this, "_ZN8S20363C33v14Ev");}
void  S20363C3 ::v15(){vfunc_called(this, "_ZN8S20363C33v15Ev");}
S20363C3 ::S20363C3(){ note_ctor("S20363C3", this);} // tgen

static void Test_S20363C3()
{
  extern Class_Descriptor cd_S20363C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20363C3, buf);
    S20363C3 *dp, &lv = *(dp=new (buf) S20363C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20363C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20363C3)");
    test_class_info(&lv, &cd_S20363C3);
    dp->~S20363C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20363C3(Test_S20363C3, "S20363C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20363C3C1Ev();
extern void _ZN8S20363C3D1Ev();
Name_Map name_map_S20363C3[] = {
  NSPAIR(_ZN8S20363C3C1Ev),
  NSPAIR(_ZN8S20363C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20363C3[];
extern void _ZN8S20363C3D1Ev();
extern void _ZN8S20363C3D0Ev();
extern void _ZN8S20363C33v11Ev();
extern void _ZN8S20363C33v12Ev();
extern void _ZN8S20363C33v13Ev();
extern void _ZN8S20363C33v14Ev();
extern void _ZN8S20363C33v15Ev();
static  VTBL_ENTRY vtc_S20363C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20363C3[0]),
  (VTBL_ENTRY)&_ZN8S20363C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20363C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v15Ev,
};
extern VTBL_ENTRY _ZTI8S20363C3[];
extern  VTBL_ENTRY _ZTV8S20363C3[];
Class_Descriptor cd_S20363C3 = {  "S20363C3", // class name
  0,0,//no base classes
  &(vtc_S20363C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20363C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20363C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20363C1  : virtual S20363C2 , virtual S20363C3 {
  virtual  ~S20363C1(); // _ZN8S20363C1D2Ev
  virtual void  v1(); // _ZN8S20363C12v1Ev
  virtual void  v2(); // _ZN8S20363C12v2Ev
  virtual void  v3(); // _ZN8S20363C12v3Ev
  virtual void  v4(); // _ZN8S20363C12v4Ev
  virtual void  v5(); // _ZN8S20363C12v5Ev
  virtual void  v6(); // _ZN8S20363C12v6Ev
  S20363C1(); // tgen
};
//SIG(1 S20363C1) C1{ VBC2{ v7 v8 v9 v10} VBC3{ vd v11 v12 v13 v14 v15} vd v1 v2 v3 v4 v5 v6}


 S20363C1 ::~S20363C1(){ note_dtor("S20363C1", this);}
void  S20363C1 ::v1(){vfunc_called(this, "_ZN8S20363C12v1Ev");}
void  S20363C1 ::v2(){vfunc_called(this, "_ZN8S20363C12v2Ev");}
void  S20363C1 ::v3(){vfunc_called(this, "_ZN8S20363C12v3Ev");}
void  S20363C1 ::v4(){vfunc_called(this, "_ZN8S20363C12v4Ev");}
void  S20363C1 ::v5(){vfunc_called(this, "_ZN8S20363C12v5Ev");}
void  S20363C1 ::v6(){vfunc_called(this, "_ZN8S20363C12v6Ev");}
S20363C1 ::S20363C1(){ note_ctor("S20363C1", this);} // tgen

static void Test_S20363C1()
{
  extern Class_Descriptor cd_S20363C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20363C1, buf);
    S20363C1 *dp, &lv = *(dp=new (buf) S20363C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20363C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20363C1)");
    check_base_class_offset(lv, (S20363C2*), 0, "S20363C1");
    check_base_class_offset(lv, (S20363C3*), ABISELECT(8,4), "S20363C1");
    test_class_info(&lv, &cd_S20363C1);
    dp->~S20363C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20363C1(Test_S20363C1, "S20363C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20363C1C1Ev();
extern void _ZN8S20363C1D2Ev();
Name_Map name_map_S20363C1[] = {
  NSPAIR(_ZN8S20363C1C1Ev),
  NSPAIR(_ZN8S20363C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20363C2;
extern VTBL_ENTRY _ZTI8S20363C2[];
extern  VTBL_ENTRY _ZTV8S20363C2[];
extern Class_Descriptor cd_S20363C3;
extern VTBL_ENTRY _ZTI8S20363C3[];
extern  VTBL_ENTRY _ZTV8S20363C3[];
static Base_Class bases_S20363C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20363C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20363C3,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20363C1[];
extern void _ZN8S20363C22v7Ev();
extern void _ZN8S20363C22v8Ev();
extern void _ZN8S20363C22v9Ev();
extern void _ZN8S20363C23v10Ev();
extern void _ZN8S20363C1D1Ev();
extern void _ZN8S20363C1D0Ev();
extern void _ZN8S20363C12v1Ev();
extern void _ZN8S20363C12v2Ev();
extern void _ZN8S20363C12v3Ev();
extern void _ZN8S20363C12v4Ev();
extern void _ZN8S20363C12v5Ev();
extern void _ZN8S20363C12v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S20363C1D1Ev,_ZTv0_n12_N8S20363C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20363C1D1Ev,_ZThn4_N8S20363C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20363C1D0Ev,_ZTv0_n12_N8S20363C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20363C1D0Ev,_ZThn4_N8S20363C1D0Ev)() __attribute__((weak));
extern void _ZN8S20363C33v11Ev();
extern void _ZN8S20363C33v12Ev();
extern void _ZN8S20363C33v13Ev();
extern void _ZN8S20363C33v14Ev();
extern void _ZN8S20363C33v15Ev();
static  VTBL_ENTRY vtc_S20363C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20363C1[0]),
  (VTBL_ENTRY)&_ZN8S20363C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20363C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20363C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20363C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20363C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20363C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20363C12v6Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20363C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20363C1D1Ev,_ZTv0_n12_N8S20363C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20363C1D0Ev,_ZTv0_n12_N8S20363C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20363C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20363C33v15Ev,
};
extern VTBL_ENTRY _ZTV8S20363C1[];
static  VTT_ENTRY vtt_S20363C1[] = {
  {&(_ZTV8S20363C1[8]),  8,35},
  {&(_ZTV8S20363C1[8]),  8,35},
  {&(_ZTV8S20363C1[28]),  28,35},
};
extern VTBL_ENTRY _ZTI8S20363C1[];
extern  VTBL_ENTRY _ZTV8S20363C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20363C1[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20363C1D0Ev,_ZTv0_n12_N8S20363C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20363C1D0Ev,_ZThn4_N8S20363C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20363C1D1Ev,_ZTv0_n12_N8S20363C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20363C1D1Ev,_ZThn4_N8S20363C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20363C1 = {  "S20363C1", // class name
  bases_S20363C1, 2,
  &(vtc_S20363C1[0]), // expected_vtbl_contents
  &(vtt_S20363C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20363C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20363C1),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20363C1),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3388C3  {
  virtual  ~S3388C3(); // _ZN7S3388C3D1Ev
  virtual void  v7(); // _ZN7S3388C32v7Ev
  virtual void  v8(); // _ZN7S3388C32v8Ev
  virtual void  v9(); // _ZN7S3388C32v9Ev
  virtual void  v10(); // _ZN7S3388C33v10Ev
  virtual void  v11(); // _ZN7S3388C33v11Ev
  S3388C3(); // tgen
};
//SIG(-1 S3388C3) C1{ vd v1 v2 v3 v4 v5}


 S3388C3 ::~S3388C3(){ note_dtor("S3388C3", this);}
void  S3388C3 ::v7(){vfunc_called(this, "_ZN7S3388C32v7Ev");}
void  S3388C3 ::v8(){vfunc_called(this, "_ZN7S3388C32v8Ev");}
void  S3388C3 ::v9(){vfunc_called(this, "_ZN7S3388C32v9Ev");}
void  S3388C3 ::v10(){vfunc_called(this, "_ZN7S3388C33v10Ev");}
void  S3388C3 ::v11(){vfunc_called(this, "_ZN7S3388C33v11Ev");}
S3388C3 ::S3388C3(){ note_ctor("S3388C3", this);} // tgen

static void Test_S3388C3()
{
  extern Class_Descriptor cd_S3388C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3388C3, buf);
    S3388C3 *dp, &lv = *(dp=new (buf) S3388C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3388C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3388C3)");
    test_class_info(&lv, &cd_S3388C3);
    dp->~S3388C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3388C3(Test_S3388C3, "S3388C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3388C3C1Ev();
extern void _ZN7S3388C3D1Ev();
Name_Map name_map_S3388C3[] = {
  NSPAIR(_ZN7S3388C3C1Ev),
  NSPAIR(_ZN7S3388C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3388C3[];
extern void _ZN7S3388C3D1Ev();
extern void _ZN7S3388C3D0Ev();
extern void _ZN7S3388C32v7Ev();
extern void _ZN7S3388C32v8Ev();
extern void _ZN7S3388C32v9Ev();
extern void _ZN7S3388C33v10Ev();
extern void _ZN7S3388C33v11Ev();
static  VTBL_ENTRY vtc_S3388C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3388C3[0]),
  (VTBL_ENTRY)&_ZN7S3388C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3388C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3388C3[];
extern  VTBL_ENTRY _ZTV7S3388C3[];
Class_Descriptor cd_S3388C3 = {  "S3388C3", // class name
  0,0,//no base classes
  &(vtc_S3388C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3388C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3388C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3388C2  : S3388C3 {
  void *s3388c2f0;
  virtual  ~S3388C2(); // _ZN7S3388C2D1Ev
  S3388C2(); // tgen
};
//SIG(-1 S3388C2) C1{ BC2{ vd v1 v2 v3 v4 v5} vd Fp}


 S3388C2 ::~S3388C2(){ note_dtor("S3388C2", this);}
S3388C2 ::S3388C2(){ note_ctor("S3388C2", this);} // tgen

static void Test_S3388C2()
{
  extern Class_Descriptor cd_S3388C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3388C2, buf);
    S3388C2 *dp, &lv = *(dp=new (buf) S3388C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3388C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3388C2)");
    check_base_class_offset(lv, (S3388C3*), 0, "S3388C2");
    check_field_offset(lv, s3388c2f0, ABISELECT(8,4), "S3388C2.s3388c2f0");
    test_class_info(&lv, &cd_S3388C2);
    dp->~S3388C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3388C2(Test_S3388C2, "S3388C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3388C2C1Ev();
extern void _ZN7S3388C2D1Ev();
Name_Map name_map_S3388C2[] = {
  NSPAIR(_ZN7S3388C2C1Ev),
  NSPAIR(_ZN7S3388C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3388C3;
extern VTBL_ENTRY _ZTI7S3388C3[];
extern  VTBL_ENTRY _ZTV7S3388C3[];
static Base_Class bases_S3388C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3388C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3388C2[];
extern void _ZN7S3388C2D1Ev();
extern void _ZN7S3388C2D0Ev();
extern void _ZN7S3388C32v7Ev();
extern void _ZN7S3388C32v8Ev();
extern void _ZN7S3388C32v9Ev();
extern void _ZN7S3388C33v10Ev();
extern void _ZN7S3388C33v11Ev();
static  VTBL_ENTRY vtc_S3388C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3388C2[0]),
  (VTBL_ENTRY)&_ZN7S3388C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3388C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3388C2[];
extern  VTBL_ENTRY _ZTV7S3388C2[];
Class_Descriptor cd_S3388C2 = {  "S3388C2", // class name
  bases_S3388C2, 1,
  &(vtc_S3388C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3388C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3388C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3388C1  : S3388C2 {
  int s3388c1f0[2];
  void *s3388c1f1[2];
  virtual  ~S3388C1(); // _ZN7S3388C1D1Ev
  virtual void  v1(); // _ZN7S3388C12v1Ev
  virtual void  v2(); // _ZN7S3388C12v2Ev
  virtual void  v3(); // _ZN7S3388C12v3Ev
  virtual void  v4(); // _ZN7S3388C12v4Ev
  virtual void  v5(); // _ZN7S3388C12v5Ev
  virtual void  v6(); // _ZN7S3388C12v6Ev
  S3388C1(); // tgen
};
//SIG(1 S3388C1) C1{ BC2{ BC3{ vd v7 v8 v9 v10 v11} vd Fp} vd v1 v2 v3 v4 v5 v6 Fi[2] Fp[2]}


 S3388C1 ::~S3388C1(){ note_dtor("S3388C1", this);}
void  S3388C1 ::v1(){vfunc_called(this, "_ZN7S3388C12v1Ev");}
void  S3388C1 ::v2(){vfunc_called(this, "_ZN7S3388C12v2Ev");}
void  S3388C1 ::v3(){vfunc_called(this, "_ZN7S3388C12v3Ev");}
void  S3388C1 ::v4(){vfunc_called(this, "_ZN7S3388C12v4Ev");}
void  S3388C1 ::v5(){vfunc_called(this, "_ZN7S3388C12v5Ev");}
void  S3388C1 ::v6(){vfunc_called(this, "_ZN7S3388C12v6Ev");}
S3388C1 ::S3388C1(){ note_ctor("S3388C1", this);} // tgen

static void Test_S3388C1()
{
  extern Class_Descriptor cd_S3388C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S3388C1, buf);
    S3388C1 *dp, &lv = *(dp=new (buf) S3388C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S3388C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3388C1)");
    check_base_class_offset(lv, (S3388C3*)(S3388C2*), 0, "S3388C1");
    check_base_class_offset(lv, (S3388C2*), 0, "S3388C1");
    check_field_offset(lv, s3388c1f0, ABISELECT(16,8), "S3388C1.s3388c1f0");
    check_field_offset(lv, s3388c1f1, ABISELECT(24,16), "S3388C1.s3388c1f1");
    test_class_info(&lv, &cd_S3388C1);
    dp->~S3388C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3388C1(Test_S3388C1, "S3388C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S3388C1C1Ev();
extern void _ZN7S3388C1D1Ev();
Name_Map name_map_S3388C1[] = {
  NSPAIR(_ZN7S3388C1C1Ev),
  NSPAIR(_ZN7S3388C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3388C3;
extern VTBL_ENTRY _ZTI7S3388C3[];
extern  VTBL_ENTRY _ZTV7S3388C3[];
extern Class_Descriptor cd_S3388C2;
extern VTBL_ENTRY _ZTI7S3388C2[];
extern  VTBL_ENTRY _ZTV7S3388C2[];
static Base_Class bases_S3388C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3388C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3388C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3388C1[];
extern void _ZN7S3388C1D1Ev();
extern void _ZN7S3388C1D0Ev();
extern void _ZN7S3388C32v7Ev();
extern void _ZN7S3388C32v8Ev();
extern void _ZN7S3388C32v9Ev();
extern void _ZN7S3388C33v10Ev();
extern void _ZN7S3388C33v11Ev();
extern void _ZN7S3388C12v1Ev();
extern void _ZN7S3388C12v2Ev();
extern void _ZN7S3388C12v3Ev();
extern void _ZN7S3388C12v4Ev();
extern void _ZN7S3388C12v5Ev();
extern void _ZN7S3388C12v6Ev();
static  VTBL_ENTRY vtc_S3388C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3388C1[0]),
  (VTBL_ENTRY)&_ZN7S3388C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3388C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3388C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3388C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3388C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S3388C1[];
extern  VTBL_ENTRY _ZTV7S3388C1[];
Class_Descriptor cd_S3388C1 = {  "S3388C1", // class name
  bases_S3388C1, 2,
  &(vtc_S3388C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S3388C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3388C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10079C2  {
  virtual  ~S10079C2(); // _ZN8S10079C2D1Ev
  virtual void  v6(); // _ZN8S10079C22v6Ev
  virtual void  v7(); // _ZN8S10079C22v7Ev
  virtual void  v8(); // _ZN8S10079C22v8Ev
  virtual void  v9(); // _ZN8S10079C22v9Ev
  virtual void  v10(); // _ZN8S10079C23v10Ev
  S10079C2(); // tgen
};
//SIG(-1 S10079C2) C1{ vd v1 v2 v3 v4 v5}


 S10079C2 ::~S10079C2(){ note_dtor("S10079C2", this);}
void  S10079C2 ::v6(){vfunc_called(this, "_ZN8S10079C22v6Ev");}
void  S10079C2 ::v7(){vfunc_called(this, "_ZN8S10079C22v7Ev");}
void  S10079C2 ::v8(){vfunc_called(this, "_ZN8S10079C22v8Ev");}
void  S10079C2 ::v9(){vfunc_called(this, "_ZN8S10079C22v9Ev");}
void  S10079C2 ::v10(){vfunc_called(this, "_ZN8S10079C23v10Ev");}
S10079C2 ::S10079C2(){ note_ctor("S10079C2", this);} // tgen

static void Test_S10079C2()
{
  extern Class_Descriptor cd_S10079C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10079C2, buf);
    S10079C2 *dp, &lv = *(dp=new (buf) S10079C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10079C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10079C2)");
    test_class_info(&lv, &cd_S10079C2);
    dp->~S10079C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10079C2(Test_S10079C2, "S10079C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10079C2C1Ev();
extern void _ZN8S10079C2D1Ev();
Name_Map name_map_S10079C2[] = {
  NSPAIR(_ZN8S10079C2C1Ev),
  NSPAIR(_ZN8S10079C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10079C2[];
extern void _ZN8S10079C2D1Ev();
extern void _ZN8S10079C2D0Ev();
extern void _ZN8S10079C22v6Ev();
extern void _ZN8S10079C22v7Ev();
extern void _ZN8S10079C22v8Ev();
extern void _ZN8S10079C22v9Ev();
extern void _ZN8S10079C23v10Ev();
static  VTBL_ENTRY vtc_S10079C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10079C2[0]),
  (VTBL_ENTRY)&_ZN8S10079C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10079C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10079C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10079C2[];
extern  VTBL_ENTRY _ZTV8S10079C2[];
Class_Descriptor cd_S10079C2 = {  "S10079C2", // class name
  0,0,//no base classes
  &(vtc_S10079C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10079C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10079C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10079C1  : S10079C2 {
  char s10079c1f0;
  void *s10079c1f1;
  ::S21811C13_nt s10079c1f2;
  void *s10079c1f3;
  int s10079c1f4[5];
  virtual  ~S10079C1(); // _ZN8S10079C1D1Ev
  virtual void  v1(); // _ZN8S10079C12v1Ev
  virtual void  v2(); // _ZN8S10079C12v2Ev
  virtual void  v3(); // _ZN8S10079C12v3Ev
  virtual void  v4(); // _ZN8S10079C12v4Ev
  virtual void  v5(); // _ZN8S10079C12v5Ev
  S10079C1(); // tgen
};
//SIG(1 S10079C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fc Fp FC3{ m Fp} Fp Fi[5]}


 S10079C1 ::~S10079C1(){ note_dtor("S10079C1", this);}
void  S10079C1 ::v1(){vfunc_called(this, "_ZN8S10079C12v1Ev");}
void  S10079C1 ::v2(){vfunc_called(this, "_ZN8S10079C12v2Ev");}
void  S10079C1 ::v3(){vfunc_called(this, "_ZN8S10079C12v3Ev");}
void  S10079C1 ::v4(){vfunc_called(this, "_ZN8S10079C12v4Ev");}
void  S10079C1 ::v5(){vfunc_called(this, "_ZN8S10079C12v5Ev");}
S10079C1 ::S10079C1(){ note_ctor("S10079C1", this);} // tgen

static void Test_S10079C1()
{
  extern Class_Descriptor cd_S10079C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S10079C1, buf);
    S10079C1 *dp, &lv = *(dp=new (buf) S10079C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S10079C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10079C1)");
    check_base_class_offset(lv, (S10079C2*), 0, "S10079C1");
    check_field_offset(lv, s10079c1f0, ABISELECT(8,4), "S10079C1.s10079c1f0");
    check_field_offset(lv, s10079c1f1, ABISELECT(16,8), "S10079C1.s10079c1f1");
    check_field_offset(lv, s10079c1f2, ABISELECT(24,12), "S10079C1.s10079c1f2");
    check_field_offset(lv, s10079c1f3, ABISELECT(32,16), "S10079C1.s10079c1f3");
    check_field_offset(lv, s10079c1f4, ABISELECT(40,20), "S10079C1.s10079c1f4");
    test_class_info(&lv, &cd_S10079C1);
    dp->~S10079C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10079C1(Test_S10079C1, "S10079C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN8S10079C1C1Ev();
extern void _ZN8S10079C1D1Ev();
Name_Map name_map_S10079C1[] = {
  NSPAIR(_ZN8S10079C1C1Ev),
  NSPAIR(_ZN8S10079C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10079C2;
extern VTBL_ENTRY _ZTI8S10079C2[];
extern  VTBL_ENTRY _ZTV8S10079C2[];
static Base_Class bases_S10079C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10079C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10079C1[];
extern void _ZN8S10079C1D1Ev();
extern void _ZN8S10079C1D0Ev();
extern void _ZN8S10079C22v6Ev();
extern void _ZN8S10079C22v7Ev();
extern void _ZN8S10079C22v8Ev();
extern void _ZN8S10079C22v9Ev();
extern void _ZN8S10079C23v10Ev();
extern void _ZN8S10079C12v1Ev();
extern void _ZN8S10079C12v2Ev();
extern void _ZN8S10079C12v3Ev();
extern void _ZN8S10079C12v4Ev();
extern void _ZN8S10079C12v5Ev();
static  VTBL_ENTRY vtc_S10079C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10079C1[0]),
  (VTBL_ENTRY)&_ZN8S10079C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10079C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10079C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10079C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10079C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10079C1[];
extern  VTBL_ENTRY _ZTV8S10079C1[];
Class_Descriptor cd_S10079C1 = {  "S10079C1", // class name
  bases_S10079C1, 1,
  &(vtc_S10079C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI8S10079C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10079C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16738C1  {
  int s16738c1f0;
  ::S3350C4_nt s16738c1f1;
  ::S287C8_nt s16738c1f2;
  ::S3350C17 s16738c1f3;
  void  mf16738c1(); // _ZN8S16738C19mf16738c1Ev
};
//SIG(1 S16738C1) C1{ m Fi FC2{ m Fi[2]} FC3{ BC4{ BC5{ BC6{ m Fp Fi[2]}}}} FC7{ BC8{ BC6}}}


void  S16738C1 ::mf16738c1(){}

static void Test_S16738C1()
{
  {
    init_simple_test("S16738C1");
    S16738C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S16738C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16738C1)");
    check_field_offset(lv, s16738c1f0, 0, "S16738C1.s16738c1f0");
    check_field_offset(lv, s16738c1f1, 4, "S16738C1.s16738c1f1");
    check_field_offset(lv, s16738c1f2, ABISELECT(16,12), "S16738C1.s16738c1f2");
    check_field_offset(lv, s16738c1f3, ABISELECT(32,24), "S16738C1.s16738c1f3");
  }
}
static Arrange_To_Call_Me vS16738C1(Test_S16738C1, "S16738C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20729C6  {
  virtual void  v2(); // _ZN8S20729C62v2Ev
  ~S20729C6(); // tgen
  S20729C6(); // tgen
};
//SIG(-1 S20729C6) C1{ v1}


void  S20729C6 ::v2(){vfunc_called(this, "_ZN8S20729C62v2Ev");}
S20729C6 ::~S20729C6(){ note_dtor("S20729C6", this);} // tgen
S20729C6 ::S20729C6(){ note_ctor("S20729C6", this);} // tgen

static void Test_S20729C6()
{
  extern Class_Descriptor cd_S20729C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20729C6, buf);
    S20729C6 *dp, &lv = *(dp=new (buf) S20729C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20729C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C6)");
    test_class_info(&lv, &cd_S20729C6);
    dp->~S20729C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C6(Test_S20729C6, "S20729C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20729C6C1Ev();
extern void _ZN8S20729C6D1Ev();
Name_Map name_map_S20729C6[] = {
  NSPAIR(_ZN8S20729C6C1Ev),
  NSPAIR(_ZN8S20729C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20729C6[];
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY vtc_S20729C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C6[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
Class_Descriptor cd_S20729C6 = {  "S20729C6", // class name
  0,0,//no base classes
  &(vtc_S20729C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20729C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20729C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20729C5  : virtual S2121C38 , S20729C6 , virtual S2121C28 {
  ~S20729C5(); // tgen
  S20729C5(); // tgen
};
//SIG(-1 S20729C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20729C5 ::~S20729C5(){ note_dtor("S20729C5", this);} // tgen
S20729C5 ::S20729C5(){ note_ctor("S20729C5", this);} // tgen

static void Test_S20729C5()
{
  extern Class_Descriptor cd_S20729C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20729C5, buf);
    S20729C5 *dp, &lv = *(dp=new (buf) S20729C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20729C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20729C5");
    check_base_class_offset(lv, (S20729C6*), 0, "S20729C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S20729C5");
    test_class_info(&lv, &cd_S20729C5);
    dp->~S20729C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C5(Test_S20729C5, "S20729C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20729C5C1Ev();
extern void _ZN8S20729C5D1Ev();
Name_Map name_map_S20729C5[] = {
  NSPAIR(_ZN8S20729C5C1Ev),
  NSPAIR(_ZN8S20729C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20729C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20729C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20729C5[];
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY vtc_S20729C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C5[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S20729C5[];
static  VTT_ENTRY vtt_S20729C5[] = {
  {&(_ZTV8S20729C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20729C5[];
extern  VTBL_ENTRY _ZTV8S20729C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C5[];
Class_Descriptor cd_S20729C5 = {  "S20729C5", // class name
  bases_S20729C5, 3,
  &(vtc_S20729C5[0]), // expected_vtbl_contents
  &(vtt_S20729C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20729C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20729C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20729C5),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20729C4  : S2121C38 , S20729C5 {
  virtual void  v3(); // _ZN8S20729C42v3Ev
  ~S20729C4(); // tgen
  S20729C4(); // tgen
};
//SIG(-1 S20729C4) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S20729C4 ::v3(){vfunc_called(this, "_ZN8S20729C42v3Ev");}
S20729C4 ::~S20729C4(){ note_dtor("S20729C4", this);} // tgen
S20729C4 ::S20729C4(){ note_ctor("S20729C4", this);} // tgen

static void Test_S20729C4()
{
  extern Class_Descriptor cd_S20729C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20729C4, buf);
    S20729C4 *dp, &lv = *(dp=new (buf) S20729C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20729C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C4)");
    /*is_ambiguous_... S20729C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20729C4");
    check_base_class_offset(lv, (S2121C38*)(S20729C5*), ABISELECT(8,4), "S20729C4");
    check_base_class_offset(lv, (S20729C6*)(S20729C5*), 0, "S20729C4");
    check_base_class_offset(lv, (S2121C28*)(S20729C5*), 0, "S20729C4");
    check_base_class_offset(lv, (S20729C5*), 0, "S20729C4");
    test_class_info(&lv, &cd_S20729C4);
    dp->~S20729C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C4(Test_S20729C4, "S20729C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20729C4C1Ev();
extern void _ZN8S20729C4D1Ev();
Name_Map name_map_S20729C4[] = {
  NSPAIR(_ZN8S20729C4C1Ev),
  NSPAIR(_ZN8S20729C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20729C5;
extern VTBL_ENTRY _ZTI8S20729C5[];
extern  VTBL_ENTRY _ZTV8S20729C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C5[];
static Base_Class bases_S20729C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20729C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20729C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20729C4[];
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY vtc_S20729C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C4[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20729C4[];
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C5__8S20729C4[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C5[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
static  VTT_ENTRY vtt_S20729C4[] = {
  {&(_ZTV8S20729C4[4]),  4,6},
  {&(_tg__ZTV8S20729C5__8S20729C4[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20729C4[];
extern  VTBL_ENTRY _ZTV8S20729C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C4[];
Class_Descriptor cd_S20729C4 = {  "S20729C4", // class name
  bases_S20729C4, 5,
  &(vtc_S20729C4[0]), // expected_vtbl_contents
  &(vtt_S20729C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20729C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20729C4),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20729C4),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20729C2  : virtual S2121C38 , virtual S20729C4 , S20729C6 {
  int s20729c2f0;
  void *s20729c2f1;
  ~S20729C2(); // tgen
  S20729C2(); // tgen
};
//SIG(-1 S20729C2) C1{ VBC2{ m} VBC3{ BC2 BC4{ VBC2 BC5{ v1} VBC6{ m}} v2} BC5 Fi Fp}


S20729C2 ::~S20729C2(){ note_dtor("S20729C2", this);} // tgen
S20729C2 ::S20729C2(){ note_ctor("S20729C2", this);} // tgen

static void Test_S20729C2()
{
  extern Class_Descriptor cd_S20729C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20729C2, buf);
    S20729C2 *dp, &lv = *(dp=new (buf) S20729C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20729C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C2)");
    /*is_ambiguous_... S20729C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S20729C2");
    check_base_class_offset(lv, (S2121C38*)(S20729C5*)(S20729C4*), 0, "S20729C2");
    /*is_ambiguous_... S20729C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20729C4*), ABISELECT(24,12), "S20729C2");
    check_base_class_offset(lv, (S20729C6*)(S20729C5*)(S20729C4*), ABISELECT(24,12), "S20729C2");
    check_base_class_offset(lv, (S2121C28*)(S20729C5*)(S20729C4*), 0, "S20729C2");
    check_base_class_offset(lv, (S20729C5*)(S20729C4*), ABISELECT(24,12), "S20729C2");
    check_base_class_offset(lv, (S20729C4*), ABISELECT(24,12), "S20729C2");
    /*is_ambiguous_... S20729C2::S20729C6 */ AMB_check_base_class_offset(lv, (S20729C6*), 0, "S20729C2");
    check_field_offset(lv, s20729c2f0, ABISELECT(8,4), "S20729C2.s20729c2f0");
    check_field_offset(lv, s20729c2f1, ABISELECT(16,8), "S20729C2.s20729c2f1");
    test_class_info(&lv, &cd_S20729C2);
    dp->~S20729C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C2(Test_S20729C2, "S20729C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20729C2C1Ev();
extern void _ZN8S20729C2D1Ev();
Name_Map name_map_S20729C2[] = {
  NSPAIR(_ZN8S20729C2C1Ev),
  NSPAIR(_ZN8S20729C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20729C5;
extern VTBL_ENTRY _ZTI8S20729C5[];
extern  VTBL_ENTRY _ZTV8S20729C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C5[];
extern Class_Descriptor cd_S20729C4;
extern VTBL_ENTRY _ZTI8S20729C4[];
extern  VTBL_ENTRY _ZTV8S20729C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C4[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
static Base_Class bases_S20729C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2121C38,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20729C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20729C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20729C4,    ABISELECT(24,12), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20729C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20729C2[];
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY vtc_S20729C2[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C2[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20729C2[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20729C2[];
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C4__8S20729C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C4[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C58S20729C4__8S20729C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C5[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
static  VTT_ENTRY vtt_S20729C2[] = {
  {&(_ZTV8S20729C2[5]),  5,14},
  {&(_ZTV8S20729C2[12]),  12,14},
  {&(_tg__ZTV8S20729C4__8S20729C2[4]),  4,6},
  {&(_tg__ZTV8S20729C58S20729C4__8S20729C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20729C2[];
extern  VTBL_ENTRY _ZTV8S20729C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C2[];
Class_Descriptor cd_S20729C2 = {  "S20729C2", // class name
  bases_S20729C2, 7,
  &(vtc_S20729C2[0]), // expected_vtbl_contents
  &(vtt_S20729C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20729C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20729C2),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20729C2),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20729C1  : virtual S20729C2 {
  virtual void  v1(); // _ZN8S20729C12v1Ev
  ~S20729C1(); // tgen
  S20729C1(); // tgen
};
//SIG(1 S20729C1) C1{ VBC2{ VBC3{ m} VBC4{ BC3 BC5{ VBC3 BC6{ v2} VBC7{ m}} v3} BC6 Fi Fp} v1}


void  S20729C1 ::v1(){vfunc_called(this, "_ZN8S20729C12v1Ev");}
S20729C1 ::~S20729C1(){ note_dtor("S20729C1", this);} // tgen
S20729C1 ::S20729C1(){ note_ctor("S20729C1", this);} // tgen

static void Test_S20729C1()
{
  extern Class_Descriptor cd_S20729C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20729C1, buf);
    S20729C1 *dp, &lv = *(dp=new (buf) S20729C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20729C1)");
    /*is_ambiguous_... S20729C2::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20729C2*), ABISELECT(32,16), "S20729C1");
    check_base_class_offset(lv, (S2121C38*)(S20729C5*)(S20729C4*), ABISELECT(32,16), "S20729C1");
    /*is_ambiguous_... S20729C4::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S20729C4*), 0, "S20729C1");
    check_base_class_offset(lv, (S20729C6*)(S20729C5*)(S20729C4*), 0, "S20729C1");
    check_base_class_offset(lv, (S2121C28*)(S20729C5*)(S20729C4*), 0, "S20729C1");
    check_base_class_offset(lv, (S20729C5*)(S20729C4*), 0, "S20729C1");
    check_base_class_offset(lv, (S20729C4*)(S20729C2*), 0, "S20729C1");
    /*is_ambiguous_... S20729C2::S20729C6 */ AMB_check_base_class_offset(lv, (S20729C6*)(S20729C2*), ABISELECT(8,4), "S20729C1");
    check_base_class_offset(lv, (S20729C2*), ABISELECT(8,4), "S20729C1");
    test_class_info(&lv, &cd_S20729C1);
    dp->~S20729C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20729C1(Test_S20729C1, "S20729C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20729C1C1Ev();
extern void _ZN8S20729C1D1Ev();
Name_Map name_map_S20729C1[] = {
  NSPAIR(_ZN8S20729C1C1Ev),
  NSPAIR(_ZN8S20729C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20729C5;
extern VTBL_ENTRY _ZTI8S20729C5[];
extern  VTBL_ENTRY _ZTV8S20729C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C5[];
extern Class_Descriptor cd_S20729C4;
extern VTBL_ENTRY _ZTI8S20729C4[];
extern  VTBL_ENTRY _ZTV8S20729C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C4[];
extern Class_Descriptor cd_S20729C6;
extern VTBL_ENTRY _ZTI8S20729C6[];
extern  VTBL_ENTRY _ZTV8S20729C6[];
extern Class_Descriptor cd_S20729C2;
extern VTBL_ENTRY _ZTI8S20729C2[];
extern  VTBL_ENTRY _ZTV8S20729C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C2[];
static Base_Class bases_S20729C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20729C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20729C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20729C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20729C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20729C2,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20729C1[];
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
extern void _ZN8S20729C12v1Ev();
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY vtc_S20729C1[] = {
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C1[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20729C12v1Ev,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20729C1[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
extern VTBL_ENTRY _ZTV8S20729C1[];
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C2__8S20729C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C2[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C4__8S20729C2__8S20729C1[] = {
  0,
  0,
  0,
  ABISELECT(32,16),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20729C2[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern void _ZN8S20729C62v2Ev();
extern void _ZN8S20729C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C4__8S20729C1[] = {
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C4[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
  (VTBL_ENTRY)&_ZN8S20729C42v3Ev,
};
extern void _ZN8S20729C62v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20729C58S20729C4__8S20729C1[] = {
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20729C5[0]),
  (VTBL_ENTRY)&_ZN8S20729C62v2Ev,
};
static  VTT_ENTRY vtt_S20729C1[] = {
  {&(_ZTV8S20729C1[8]),  8,18},
  {&(_ZTV8S20729C1[17]),  17,18},
  {&(_ZTV8S20729C1[8]),  8,18},
  {&(_tg__ZTV8S20729C2__8S20729C1[5]),  5,6},
  {&(_tg__ZTV8S20729C4__8S20729C2__8S20729C1[6]),  6,8},
  {&(_tg__ZTV8S20729C4__8S20729C1[4]),  4,6},
  {&(_tg__ZTV8S20729C58S20729C4__8S20729C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20729C1[];
extern  VTBL_ENTRY _ZTV8S20729C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20729C1[];
Class_Descriptor cd_S20729C1 = {  "S20729C1", // class name
  bases_S20729C1, 8,
  &(vtc_S20729C1[0]), // expected_vtbl_contents
  &(vtt_S20729C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20729C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20729C1),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20729C1),7, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3389C3  {
  virtual  ~S3389C3(); // _ZN7S3389C3D1Ev
  virtual void  v7(); // _ZN7S3389C32v7Ev
  virtual void  v8(); // _ZN7S3389C32v8Ev
  virtual void  v9(); // _ZN7S3389C32v9Ev
  virtual void  v10(); // _ZN7S3389C33v10Ev
  virtual void  v11(); // _ZN7S3389C33v11Ev
  S3389C3(); // tgen
};
//SIG(-1 S3389C3) C1{ vd v1 v2 v3 v4 v5}


 S3389C3 ::~S3389C3(){ note_dtor("S3389C3", this);}
void  S3389C3 ::v7(){vfunc_called(this, "_ZN7S3389C32v7Ev");}
void  S3389C3 ::v8(){vfunc_called(this, "_ZN7S3389C32v8Ev");}
void  S3389C3 ::v9(){vfunc_called(this, "_ZN7S3389C32v9Ev");}
void  S3389C3 ::v10(){vfunc_called(this, "_ZN7S3389C33v10Ev");}
void  S3389C3 ::v11(){vfunc_called(this, "_ZN7S3389C33v11Ev");}
S3389C3 ::S3389C3(){ note_ctor("S3389C3", this);} // tgen

static void Test_S3389C3()
{
  extern Class_Descriptor cd_S3389C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3389C3, buf);
    S3389C3 *dp, &lv = *(dp=new (buf) S3389C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3389C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3389C3)");
    test_class_info(&lv, &cd_S3389C3);
    dp->~S3389C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3389C3(Test_S3389C3, "S3389C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3389C3C1Ev();
extern void _ZN7S3389C3D1Ev();
Name_Map name_map_S3389C3[] = {
  NSPAIR(_ZN7S3389C3C1Ev),
  NSPAIR(_ZN7S3389C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3389C3[];
extern void _ZN7S3389C3D1Ev();
extern void _ZN7S3389C3D0Ev();
extern void _ZN7S3389C32v7Ev();
extern void _ZN7S3389C32v8Ev();
extern void _ZN7S3389C32v9Ev();
extern void _ZN7S3389C33v10Ev();
extern void _ZN7S3389C33v11Ev();
static  VTBL_ENTRY vtc_S3389C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3389C3[0]),
  (VTBL_ENTRY)&_ZN7S3389C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3389C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3389C3[];
extern  VTBL_ENTRY _ZTV7S3389C3[];
Class_Descriptor cd_S3389C3 = {  "S3389C3", // class name
  0,0,//no base classes
  &(vtc_S3389C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3389C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3389C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3389C2  : S3389C3 {
  void *s3389c2f0;
  virtual  ~S3389C2(); // _ZN7S3389C2D1Ev
  S3389C2(); // tgen
};
//SIG(-1 S3389C2) C1{ BC2{ vd v1 v2 v3 v4 v5} vd Fp}


 S3389C2 ::~S3389C2(){ note_dtor("S3389C2", this);}
S3389C2 ::S3389C2(){ note_ctor("S3389C2", this);} // tgen

static void Test_S3389C2()
{
  extern Class_Descriptor cd_S3389C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3389C2, buf);
    S3389C2 *dp, &lv = *(dp=new (buf) S3389C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3389C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3389C2)");
    check_base_class_offset(lv, (S3389C3*), 0, "S3389C2");
    check_field_offset(lv, s3389c2f0, ABISELECT(8,4), "S3389C2.s3389c2f0");
    test_class_info(&lv, &cd_S3389C2);
    dp->~S3389C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3389C2(Test_S3389C2, "S3389C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3389C2C1Ev();
extern void _ZN7S3389C2D1Ev();
Name_Map name_map_S3389C2[] = {
  NSPAIR(_ZN7S3389C2C1Ev),
  NSPAIR(_ZN7S3389C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3389C3;
extern VTBL_ENTRY _ZTI7S3389C3[];
extern  VTBL_ENTRY _ZTV7S3389C3[];
static Base_Class bases_S3389C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3389C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3389C2[];
extern void _ZN7S3389C2D1Ev();
extern void _ZN7S3389C2D0Ev();
extern void _ZN7S3389C32v7Ev();
extern void _ZN7S3389C32v8Ev();
extern void _ZN7S3389C32v9Ev();
extern void _ZN7S3389C33v10Ev();
extern void _ZN7S3389C33v11Ev();
static  VTBL_ENTRY vtc_S3389C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3389C2[0]),
  (VTBL_ENTRY)&_ZN7S3389C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3389C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S3389C2[];
extern  VTBL_ENTRY _ZTV7S3389C2[];
Class_Descriptor cd_S3389C2 = {  "S3389C2", // class name
  bases_S3389C2, 1,
  &(vtc_S3389C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3389C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3389C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3389C1  : S3389C2 {
  int s3389c1f0[2];
  virtual  ~S3389C1(); // _ZN7S3389C1D1Ev
  virtual void  v1(); // _ZN7S3389C12v1Ev
  virtual void  v2(); // _ZN7S3389C12v2Ev
  virtual void  v3(); // _ZN7S3389C12v3Ev
  virtual void  v4(); // _ZN7S3389C12v4Ev
  virtual void  v5(); // _ZN7S3389C12v5Ev
  virtual void  v6(); // _ZN7S3389C12v6Ev
  S3389C1(); // tgen
};
//SIG(1 S3389C1) C1{ BC2{ BC3{ vd v7 v8 v9 v10 v11} vd Fp} vd v1 v2 v3 v4 v5 v6 Fi[2]}


 S3389C1 ::~S3389C1(){ note_dtor("S3389C1", this);}
void  S3389C1 ::v1(){vfunc_called(this, "_ZN7S3389C12v1Ev");}
void  S3389C1 ::v2(){vfunc_called(this, "_ZN7S3389C12v2Ev");}
void  S3389C1 ::v3(){vfunc_called(this, "_ZN7S3389C12v3Ev");}
void  S3389C1 ::v4(){vfunc_called(this, "_ZN7S3389C12v4Ev");}
void  S3389C1 ::v5(){vfunc_called(this, "_ZN7S3389C12v5Ev");}
void  S3389C1 ::v6(){vfunc_called(this, "_ZN7S3389C12v6Ev");}
S3389C1 ::S3389C1(){ note_ctor("S3389C1", this);} // tgen

static void Test_S3389C1()
{
  extern Class_Descriptor cd_S3389C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3389C1, buf);
    S3389C1 *dp, &lv = *(dp=new (buf) S3389C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3389C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3389C1)");
    check_base_class_offset(lv, (S3389C3*)(S3389C2*), 0, "S3389C1");
    check_base_class_offset(lv, (S3389C2*), 0, "S3389C1");
    check_field_offset(lv, s3389c1f0, ABISELECT(16,8), "S3389C1.s3389c1f0");
    test_class_info(&lv, &cd_S3389C1);
    dp->~S3389C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3389C1(Test_S3389C1, "S3389C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3389C1C1Ev();
extern void _ZN7S3389C1D1Ev();
Name_Map name_map_S3389C1[] = {
  NSPAIR(_ZN7S3389C1C1Ev),
  NSPAIR(_ZN7S3389C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3389C3;
extern VTBL_ENTRY _ZTI7S3389C3[];
extern  VTBL_ENTRY _ZTV7S3389C3[];
extern Class_Descriptor cd_S3389C2;
extern VTBL_ENTRY _ZTI7S3389C2[];
extern  VTBL_ENTRY _ZTV7S3389C2[];
static Base_Class bases_S3389C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3389C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3389C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3389C1[];
extern void _ZN7S3389C1D1Ev();
extern void _ZN7S3389C1D0Ev();
extern void _ZN7S3389C32v7Ev();
extern void _ZN7S3389C32v8Ev();
extern void _ZN7S3389C32v9Ev();
extern void _ZN7S3389C33v10Ev();
extern void _ZN7S3389C33v11Ev();
extern void _ZN7S3389C12v1Ev();
extern void _ZN7S3389C12v2Ev();
extern void _ZN7S3389C12v3Ev();
extern void _ZN7S3389C12v4Ev();
extern void _ZN7S3389C12v5Ev();
extern void _ZN7S3389C12v6Ev();
static  VTBL_ENTRY vtc_S3389C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3389C1[0]),
  (VTBL_ENTRY)&_ZN7S3389C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3389C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3389C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3389C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3389C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S3389C1[];
extern  VTBL_ENTRY _ZTV7S3389C1[];
Class_Descriptor cd_S3389C1 = {  "S3389C1", // class name
  bases_S3389C1, 2,
  &(vtc_S3389C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3389C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3389C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10119C2  {
  void *s10119c2f0[2];
  int s10119c2f1;
  virtual  ~S10119C2(); // _ZN8S10119C2D1Ev
  virtual void  v7(); // _ZN8S10119C22v7Ev
  virtual void  v8(); // _ZN8S10119C22v8Ev
  virtual void  v9(); // _ZN8S10119C22v9Ev
  virtual void  v10(); // _ZN8S10119C23v10Ev
  virtual void  v11(); // _ZN8S10119C23v11Ev
  virtual void  v12(); // _ZN8S10119C23v12Ev
  S10119C2(); // tgen
};
//SIG(-1 S10119C2) C1{ vd v1 v2 v3 v4 v5 v6 Fp[2] Fi}


 S10119C2 ::~S10119C2(){ note_dtor("S10119C2", this);}
void  S10119C2 ::v7(){vfunc_called(this, "_ZN8S10119C22v7Ev");}
void  S10119C2 ::v8(){vfunc_called(this, "_ZN8S10119C22v8Ev");}
void  S10119C2 ::v9(){vfunc_called(this, "_ZN8S10119C22v9Ev");}
void  S10119C2 ::v10(){vfunc_called(this, "_ZN8S10119C23v10Ev");}
void  S10119C2 ::v11(){vfunc_called(this, "_ZN8S10119C23v11Ev");}
void  S10119C2 ::v12(){vfunc_called(this, "_ZN8S10119C23v12Ev");}
S10119C2 ::S10119C2(){ note_ctor("S10119C2", this);} // tgen

static void Test_S10119C2()
{
  extern Class_Descriptor cd_S10119C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10119C2, buf);
    S10119C2 *dp, &lv = *(dp=new (buf) S10119C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10119C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10119C2)");
    check_field_offset(lv, s10119c2f0, ABISELECT(8,4), "S10119C2.s10119c2f0");
    check_field_offset(lv, s10119c2f1, ABISELECT(24,12), "S10119C2.s10119c2f1");
    test_class_info(&lv, &cd_S10119C2);
    dp->~S10119C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10119C2(Test_S10119C2, "S10119C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S10119C2C1Ev();
extern void _ZN8S10119C2D1Ev();
Name_Map name_map_S10119C2[] = {
  NSPAIR(_ZN8S10119C2C1Ev),
  NSPAIR(_ZN8S10119C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10119C2[];
extern void _ZN8S10119C2D1Ev();
extern void _ZN8S10119C2D0Ev();
extern void _ZN8S10119C22v7Ev();
extern void _ZN8S10119C22v8Ev();
extern void _ZN8S10119C22v9Ev();
extern void _ZN8S10119C23v10Ev();
extern void _ZN8S10119C23v11Ev();
extern void _ZN8S10119C23v12Ev();
static  VTBL_ENTRY vtc_S10119C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10119C2[0]),
  (VTBL_ENTRY)&_ZN8S10119C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10119C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10119C2[];
extern  VTBL_ENTRY _ZTV8S10119C2[];
Class_Descriptor cd_S10119C2 = {  "S10119C2", // class name
  0,0,//no base classes
  &(vtc_S10119C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S10119C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10119C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10119C1  : S10119C2 {
  virtual  ~S10119C1(); // _ZN8S10119C1D1Ev
  virtual void  v1(); // _ZN8S10119C12v1Ev
  virtual void  v2(); // _ZN8S10119C12v2Ev
  virtual void  v3(); // _ZN8S10119C12v3Ev
  virtual void  v4(); // _ZN8S10119C12v4Ev
  virtual void  v5(); // _ZN8S10119C12v5Ev
  virtual void  v6(); // _ZN8S10119C12v6Ev
  S10119C1(); // tgen
};
//SIG(1 S10119C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 Fp[2] Fi} vd v1 v2 v3 v4 v5 v6}


 S10119C1 ::~S10119C1(){ note_dtor("S10119C1", this);}
void  S10119C1 ::v1(){vfunc_called(this, "_ZN8S10119C12v1Ev");}
void  S10119C1 ::v2(){vfunc_called(this, "_ZN8S10119C12v2Ev");}
void  S10119C1 ::v3(){vfunc_called(this, "_ZN8S10119C12v3Ev");}
void  S10119C1 ::v4(){vfunc_called(this, "_ZN8S10119C12v4Ev");}
void  S10119C1 ::v5(){vfunc_called(this, "_ZN8S10119C12v5Ev");}
void  S10119C1 ::v6(){vfunc_called(this, "_ZN8S10119C12v6Ev");}
S10119C1 ::S10119C1(){ note_ctor("S10119C1", this);} // tgen

static void Test_S10119C1()
{
  extern Class_Descriptor cd_S10119C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10119C1, buf);
    S10119C1 *dp, &lv = *(dp=new (buf) S10119C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10119C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10119C1)");
    check_base_class_offset(lv, (S10119C2*), 0, "S10119C1");
    test_class_info(&lv, &cd_S10119C1);
    dp->~S10119C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10119C1(Test_S10119C1, "S10119C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S10119C1C1Ev();
extern void _ZN8S10119C1D1Ev();
Name_Map name_map_S10119C1[] = {
  NSPAIR(_ZN8S10119C1C1Ev),
  NSPAIR(_ZN8S10119C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10119C2;
extern VTBL_ENTRY _ZTI8S10119C2[];
extern  VTBL_ENTRY _ZTV8S10119C2[];
static Base_Class bases_S10119C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10119C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10119C1[];
extern void _ZN8S10119C1D1Ev();
extern void _ZN8S10119C1D0Ev();
extern void _ZN8S10119C22v7Ev();
extern void _ZN8S10119C22v8Ev();
extern void _ZN8S10119C22v9Ev();
extern void _ZN8S10119C23v10Ev();
extern void _ZN8S10119C23v11Ev();
extern void _ZN8S10119C23v12Ev();
extern void _ZN8S10119C12v1Ev();
extern void _ZN8S10119C12v2Ev();
extern void _ZN8S10119C12v3Ev();
extern void _ZN8S10119C12v4Ev();
extern void _ZN8S10119C12v5Ev();
extern void _ZN8S10119C12v6Ev();
static  VTBL_ENTRY vtc_S10119C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10119C1[0]),
  (VTBL_ENTRY)&_ZN8S10119C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10119C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10119C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10119C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10119C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S10119C1[];
extern  VTBL_ENTRY _ZTV8S10119C1[];
Class_Descriptor cd_S10119C1 = {  "S10119C1", // class name
  bases_S10119C1, 1,
  &(vtc_S10119C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S10119C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10119C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3346C3  {
  virtual  ~S3346C3(); // _ZN7S3346C3D1Ev
  virtual void  v6(); // _ZN7S3346C32v6Ev
  virtual void  v7(); // _ZN7S3346C32v7Ev
  virtual void  v8(); // _ZN7S3346C32v8Ev
  virtual void  v9(); // _ZN7S3346C32v9Ev
  virtual void  v10(); // _ZN7S3346C33v10Ev
  S3346C3(); // tgen
};
//SIG(-1 S3346C3) C1{ vd v1 v2 v3 v4 v5}


 S3346C3 ::~S3346C3(){ note_dtor("S3346C3", this);}
void  S3346C3 ::v6(){vfunc_called(this, "_ZN7S3346C32v6Ev");}
void  S3346C3 ::v7(){vfunc_called(this, "_ZN7S3346C32v7Ev");}
void  S3346C3 ::v8(){vfunc_called(this, "_ZN7S3346C32v8Ev");}
void  S3346C3 ::v9(){vfunc_called(this, "_ZN7S3346C32v9Ev");}
void  S3346C3 ::v10(){vfunc_called(this, "_ZN7S3346C33v10Ev");}
S3346C3 ::S3346C3(){ note_ctor("S3346C3", this);} // tgen

static void Test_S3346C3()
{
  extern Class_Descriptor cd_S3346C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3346C3, buf);
    S3346C3 *dp, &lv = *(dp=new (buf) S3346C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3346C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3346C3)");
    test_class_info(&lv, &cd_S3346C3);
    dp->~S3346C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3346C3(Test_S3346C3, "S3346C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3346C3C1Ev();
extern void _ZN7S3346C3D1Ev();
Name_Map name_map_S3346C3[] = {
  NSPAIR(_ZN7S3346C3C1Ev),
  NSPAIR(_ZN7S3346C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3346C3[];
extern void _ZN7S3346C3D1Ev();
extern void _ZN7S3346C3D0Ev();
extern void _ZN7S3346C32v6Ev();
extern void _ZN7S3346C32v7Ev();
extern void _ZN7S3346C32v8Ev();
extern void _ZN7S3346C32v9Ev();
extern void _ZN7S3346C33v10Ev();
static  VTBL_ENTRY vtc_S3346C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3346C3[0]),
  (VTBL_ENTRY)&_ZN7S3346C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3346C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3346C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3346C3[];
extern  VTBL_ENTRY _ZTV7S3346C3[];
Class_Descriptor cd_S3346C3 = {  "S3346C3", // class name
  0,0,//no base classes
  &(vtc_S3346C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3346C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3346C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3346C2  : S3346C3 {
  void *s3346c2f0;
  virtual  ~S3346C2(); // _ZN7S3346C2D1Ev
  S3346C2(); // tgen
};
//SIG(-1 S3346C2) C1{ BC2{ vd v1 v2 v3 v4 v5} vd Fp}


 S3346C2 ::~S3346C2(){ note_dtor("S3346C2", this);}
S3346C2 ::S3346C2(){ note_ctor("S3346C2", this);} // tgen

static void Test_S3346C2()
{
  extern Class_Descriptor cd_S3346C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3346C2, buf);
    S3346C2 *dp, &lv = *(dp=new (buf) S3346C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3346C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3346C2)");
    check_base_class_offset(lv, (S3346C3*), 0, "S3346C2");
    check_field_offset(lv, s3346c2f0, ABISELECT(8,4), "S3346C2.s3346c2f0");
    test_class_info(&lv, &cd_S3346C2);
    dp->~S3346C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3346C2(Test_S3346C2, "S3346C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3346C2C1Ev();
extern void _ZN7S3346C2D1Ev();
Name_Map name_map_S3346C2[] = {
  NSPAIR(_ZN7S3346C2C1Ev),
  NSPAIR(_ZN7S3346C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3346C3;
extern VTBL_ENTRY _ZTI7S3346C3[];
extern  VTBL_ENTRY _ZTV7S3346C3[];
static Base_Class bases_S3346C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3346C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3346C2[];
extern void _ZN7S3346C2D1Ev();
extern void _ZN7S3346C2D0Ev();
extern void _ZN7S3346C32v6Ev();
extern void _ZN7S3346C32v7Ev();
extern void _ZN7S3346C32v8Ev();
extern void _ZN7S3346C32v9Ev();
extern void _ZN7S3346C33v10Ev();
static  VTBL_ENTRY vtc_S3346C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3346C2[0]),
  (VTBL_ENTRY)&_ZN7S3346C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3346C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3346C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3346C2[];
extern  VTBL_ENTRY _ZTV7S3346C2[];
Class_Descriptor cd_S3346C2 = {  "S3346C2", // class name
  bases_S3346C2, 1,
  &(vtc_S3346C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3346C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3346C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3346C1  : S3346C2 {
  int s3346c1f0[2];
  virtual  ~S3346C1(); // _ZN7S3346C1D1Ev
  virtual void  v1(); // _ZN7S3346C12v1Ev
  virtual void  v2(); // _ZN7S3346C12v2Ev
  virtual void  v3(); // _ZN7S3346C12v3Ev
  virtual void  v4(); // _ZN7S3346C12v4Ev
  virtual void  v5(); // _ZN7S3346C12v5Ev
  S3346C1(); // tgen
};
//SIG(1 S3346C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10} vd Fp} vd v1 v2 v3 v4 v5 Fi[2]}


 S3346C1 ::~S3346C1(){ note_dtor("S3346C1", this);}
void  S3346C1 ::v1(){vfunc_called(this, "_ZN7S3346C12v1Ev");}
void  S3346C1 ::v2(){vfunc_called(this, "_ZN7S3346C12v2Ev");}
void  S3346C1 ::v3(){vfunc_called(this, "_ZN7S3346C12v3Ev");}
void  S3346C1 ::v4(){vfunc_called(this, "_ZN7S3346C12v4Ev");}
void  S3346C1 ::v5(){vfunc_called(this, "_ZN7S3346C12v5Ev");}
S3346C1 ::S3346C1(){ note_ctor("S3346C1", this);} // tgen

static void Test_S3346C1()
{
  extern Class_Descriptor cd_S3346C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3346C1, buf);
    S3346C1 *dp, &lv = *(dp=new (buf) S3346C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3346C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3346C1)");
    check_base_class_offset(lv, (S3346C3*)(S3346C2*), 0, "S3346C1");
    check_base_class_offset(lv, (S3346C2*), 0, "S3346C1");
    check_field_offset(lv, s3346c1f0, ABISELECT(16,8), "S3346C1.s3346c1f0");
    test_class_info(&lv, &cd_S3346C1);
    dp->~S3346C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3346C1(Test_S3346C1, "S3346C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3346C1C1Ev();
extern void _ZN7S3346C1D1Ev();
Name_Map name_map_S3346C1[] = {
  NSPAIR(_ZN7S3346C1C1Ev),
  NSPAIR(_ZN7S3346C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3346C3;
extern VTBL_ENTRY _ZTI7S3346C3[];
extern  VTBL_ENTRY _ZTV7S3346C3[];
extern Class_Descriptor cd_S3346C2;
extern VTBL_ENTRY _ZTI7S3346C2[];
extern  VTBL_ENTRY _ZTV7S3346C2[];
static Base_Class bases_S3346C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3346C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3346C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3346C1[];
extern void _ZN7S3346C1D1Ev();
extern void _ZN7S3346C1D0Ev();
extern void _ZN7S3346C32v6Ev();
extern void _ZN7S3346C32v7Ev();
extern void _ZN7S3346C32v8Ev();
extern void _ZN7S3346C32v9Ev();
extern void _ZN7S3346C33v10Ev();
extern void _ZN7S3346C12v1Ev();
extern void _ZN7S3346C12v2Ev();
extern void _ZN7S3346C12v3Ev();
extern void _ZN7S3346C12v4Ev();
extern void _ZN7S3346C12v5Ev();
static  VTBL_ENTRY vtc_S3346C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3346C1[0]),
  (VTBL_ENTRY)&_ZN7S3346C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3346C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3346C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3346C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3346C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3346C1[];
extern  VTBL_ENTRY _ZTV7S3346C1[];
Class_Descriptor cd_S3346C1 = {  "S3346C1", // class name
  bases_S3346C1, 2,
  &(vtc_S3346C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3346C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3346C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3770C2  : S6282C14_nt {
  int s3770c2f0[6];
  char s3770c2f1[2];
  virtual  ~S3770C2(); // _ZN7S3770C2D1Ev
  S3770C2(); // tgen
};
//SIG(-1 S3770C2) C1{ BC2{ vd m Fi} vd Fi[6] Fc[2]}


 S3770C2 ::~S3770C2(){ note_dtor("S3770C2", this);}
S3770C2 ::S3770C2(){ note_ctor("S3770C2", this);} // tgen

static void Test_S3770C2()
{
  extern Class_Descriptor cd_S3770C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S3770C2, buf);
    S3770C2 *dp, &lv = *(dp=new (buf) S3770C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S3770C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3770C2)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S3770C2");
    check_field_offset(lv, s3770c2f0, ABISELECT(12,8), "S3770C2.s3770c2f0");
    check_field_offset(lv, s3770c2f1, ABISELECT(36,32), "S3770C2.s3770c2f1");
    test_class_info(&lv, &cd_S3770C2);
    dp->~S3770C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3770C2(Test_S3770C2, "S3770C2", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN7S3770C2C1Ev();
extern void _ZN7S3770C2D1Ev();
Name_Map name_map_S3770C2[] = {
  NSPAIR(_ZN7S3770C2C1Ev),
  NSPAIR(_ZN7S3770C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S3770C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3770C2[];
extern void _ZN7S3770C2D1Ev();
extern void _ZN7S3770C2D0Ev();
static  VTBL_ENTRY vtc_S3770C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3770C2[0]),
  (VTBL_ENTRY)&_ZN7S3770C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3770C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3770C2[];
extern  VTBL_ENTRY _ZTV7S3770C2[];
Class_Descriptor cd_S3770C2 = {  "S3770C2", // class name
  bases_S3770C2, 1,
  &(vtc_S3770C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI7S3770C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3770C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3770C1  : S3770C2 {
  ::S2185C10_nt s3770c1f0;
  int s3770c1f1;
  virtual  ~S3770C1(); // _ZN7S3770C1D1Ev
  S3770C1(); // tgen
};
//SIG(1 S3770C1) C1{ BC2{ BC3{ vd m Fi} vd Fi[6] Fc[2]} vd FC4{ m Fp Fi FC5{ m}} Fi}


 S3770C1 ::~S3770C1(){ note_dtor("S3770C1", this);}
S3770C1 ::S3770C1(){ note_ctor("S3770C1", this);} // tgen

static void Test_S3770C1()
{
  extern Class_Descriptor cd_S3770C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,14)];
    init_test(&cd_S3770C1, buf);
    S3770C1 *dp, &lv = *(dp=new (buf) S3770C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S3770C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3770C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S3770C2*), 0, "S3770C1");
    check_base_class_offset(lv, (S3770C2*), 0, "S3770C1");
    check_field_offset(lv, s3770c1f0, ABISELECT(40,36), "S3770C1.s3770c1f0");
    check_field_offset(lv, s3770c1f1, ABISELECT(56,48), "S3770C1.s3770c1f1");
    test_class_info(&lv, &cd_S3770C1);
    dp->~S3770C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3770C1(Test_S3770C1, "S3770C1", ABISELECT(64,52));

#else // __cplusplus

extern void _ZN7S3770C1C1Ev();
extern void _ZN7S3770C1D1Ev();
Name_Map name_map_S3770C1[] = {
  NSPAIR(_ZN7S3770C1C1Ev),
  NSPAIR(_ZN7S3770C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S3770C2;
extern VTBL_ENTRY _ZTI7S3770C2[];
extern  VTBL_ENTRY _ZTV7S3770C2[];
static Base_Class bases_S3770C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3770C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3770C1[];
extern void _ZN7S3770C1D1Ev();
extern void _ZN7S3770C1D0Ev();
static  VTBL_ENTRY vtc_S3770C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3770C1[0]),
  (VTBL_ENTRY)&_ZN7S3770C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3770C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3770C1[];
extern  VTBL_ENTRY _ZTV7S3770C1[];
Class_Descriptor cd_S3770C1 = {  "S3770C1", // class name
  bases_S3770C1, 2,
  &(vtc_S3770C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,52), // object size
  NSPAIRA(_ZTI7S3770C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3770C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9933C2  {
  virtual  ~S9933C2(); // _ZN7S9933C2D1Ev
  virtual void  v5(); // _ZN7S9933C22v5Ev
  virtual void  v6(); // _ZN7S9933C22v6Ev
  virtual void  v7(); // _ZN7S9933C22v7Ev
  virtual void  v8(); // _ZN7S9933C22v8Ev
  virtual void  v9(); // _ZN7S9933C22v9Ev
  S9933C2(); // tgen
};
//SIG(-1 S9933C2) C1{ vd v1 v2 v3 v4 v5}


 S9933C2 ::~S9933C2(){ note_dtor("S9933C2", this);}
void  S9933C2 ::v5(){vfunc_called(this, "_ZN7S9933C22v5Ev");}
void  S9933C2 ::v6(){vfunc_called(this, "_ZN7S9933C22v6Ev");}
void  S9933C2 ::v7(){vfunc_called(this, "_ZN7S9933C22v7Ev");}
void  S9933C2 ::v8(){vfunc_called(this, "_ZN7S9933C22v8Ev");}
void  S9933C2 ::v9(){vfunc_called(this, "_ZN7S9933C22v9Ev");}
S9933C2 ::S9933C2(){ note_ctor("S9933C2", this);} // tgen

static void Test_S9933C2()
{
  extern Class_Descriptor cd_S9933C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9933C2, buf);
    S9933C2 *dp, &lv = *(dp=new (buf) S9933C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9933C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9933C2)");
    test_class_info(&lv, &cd_S9933C2);
    dp->~S9933C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9933C2(Test_S9933C2, "S9933C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9933C2C1Ev();
extern void _ZN7S9933C2D1Ev();
Name_Map name_map_S9933C2[] = {
  NSPAIR(_ZN7S9933C2C1Ev),
  NSPAIR(_ZN7S9933C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9933C2[];
extern void _ZN7S9933C2D1Ev();
extern void _ZN7S9933C2D0Ev();
extern void _ZN7S9933C22v5Ev();
extern void _ZN7S9933C22v6Ev();
extern void _ZN7S9933C22v7Ev();
extern void _ZN7S9933C22v8Ev();
extern void _ZN7S9933C22v9Ev();
static  VTBL_ENTRY vtc_S9933C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9933C2[0]),
  (VTBL_ENTRY)&_ZN7S9933C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9933C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9933C2[];
extern  VTBL_ENTRY _ZTV7S9933C2[];
Class_Descriptor cd_S9933C2 = {  "S9933C2", // class name
  0,0,//no base classes
  &(vtc_S9933C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9933C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9933C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9933C1  : S9933C2 {
  int s9933c1f0[2];
  ::S3350C4_nt s9933c1f1;
  char s9933c1f2;
  virtual void  v1(); // _ZN7S9933C12v1Ev
  virtual void  v2(); // _ZN7S9933C12v2Ev
  virtual void  v3(); // _ZN7S9933C12v3Ev
  virtual void  v4(); // _ZN7S9933C12v4Ev
  ~S9933C1(); // tgen
  S9933C1(); // tgen
};
//SIG(1 S9933C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[2] FC3{ m Fi[2]} Fc}


void  S9933C1 ::v1(){vfunc_called(this, "_ZN7S9933C12v1Ev");}
void  S9933C1 ::v2(){vfunc_called(this, "_ZN7S9933C12v2Ev");}
void  S9933C1 ::v3(){vfunc_called(this, "_ZN7S9933C12v3Ev");}
void  S9933C1 ::v4(){vfunc_called(this, "_ZN7S9933C12v4Ev");}
S9933C1 ::~S9933C1(){ note_dtor("S9933C1", this);} // tgen
S9933C1 ::S9933C1(){ note_ctor("S9933C1", this);} // tgen

static void Test_S9933C1()
{
  extern Class_Descriptor cd_S9933C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S9933C1, buf);
    S9933C1 *dp, &lv = *(dp=new (buf) S9933C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S9933C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9933C1)");
    check_base_class_offset(lv, (S9933C2*), 0, "S9933C1");
    check_field_offset(lv, s9933c1f0, ABISELECT(8,4), "S9933C1.s9933c1f0");
    check_field_offset(lv, s9933c1f1, ABISELECT(16,12), "S9933C1.s9933c1f1");
    check_field_offset(lv, s9933c1f2, ABISELECT(24,20), "S9933C1.s9933c1f2");
    test_class_info(&lv, &cd_S9933C1);
    dp->~S9933C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9933C1(Test_S9933C1, "S9933C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S9933C1C1Ev();
extern void _ZN7S9933C1D1Ev();
Name_Map name_map_S9933C1[] = {
  NSPAIR(_ZN7S9933C1C1Ev),
  NSPAIR(_ZN7S9933C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9933C2;
extern VTBL_ENTRY _ZTI7S9933C2[];
extern  VTBL_ENTRY _ZTV7S9933C2[];
static Base_Class bases_S9933C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9933C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9933C1[];
extern void _ZN7S9933C1D1Ev();
extern void _ZN7S9933C1D0Ev();
extern void _ZN7S9933C22v5Ev();
extern void _ZN7S9933C22v6Ev();
extern void _ZN7S9933C22v7Ev();
extern void _ZN7S9933C22v8Ev();
extern void _ZN7S9933C22v9Ev();
extern void _ZN7S9933C12v1Ev();
extern void _ZN7S9933C12v2Ev();
extern void _ZN7S9933C12v3Ev();
extern void _ZN7S9933C12v4Ev();
static  VTBL_ENTRY vtc_S9933C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9933C1[0]),
  (VTBL_ENTRY)&_ZN7S9933C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9933C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9933C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9933C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9933C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9933C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9933C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9933C1[];
extern  VTBL_ENTRY _ZTV7S9933C1[];
Class_Descriptor cd_S9933C1 = {  "S9933C1", // class name
  bases_S9933C1, 1,
  &(vtc_S9933C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S9933C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9933C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2603C2  : S3350C8_nt {
};
//SIG(-1 S2603C2) C1{ BC2{ m Fi}}



static void Test_S2603C2()
{
  extern Class_Descriptor cd_S2603C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2603C2, buf);
    S2603C2 &lv = *(new (buf) S2603C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2603C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2603C2)");
    check_base_class_offset(lv, (S3350C8_nt*), 0, "S2603C2");
    test_class_info(&lv, &cd_S2603C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2603C2(Test_S2603C2, "S2603C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
static Base_Class bases_S2603C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2603C2[];
Class_Descriptor cd_S2603C2 = {  "S2603C2", // class name
  bases_S2603C2, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI7S2603C2),ABISELECT(24,12), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2603C4  {
  virtual  ~S2603C4(); // _ZN7S2603C4D1Ev
  virtual void  v6(); // _ZN7S2603C42v6Ev
  virtual void  v7(); // _ZN7S2603C42v7Ev
  virtual void  v8(); // _ZN7S2603C42v8Ev
  virtual void  v9(); // _ZN7S2603C42v9Ev
  virtual void  v10(); // _ZN7S2603C43v10Ev
  S2603C4(); // tgen
};
//SIG(-1 S2603C4) C1{ vd v1 v2 v3 v4 v5}


 S2603C4 ::~S2603C4(){ note_dtor("S2603C4", this);}
void  S2603C4 ::v6(){vfunc_called(this, "_ZN7S2603C42v6Ev");}
void  S2603C4 ::v7(){vfunc_called(this, "_ZN7S2603C42v7Ev");}
void  S2603C4 ::v8(){vfunc_called(this, "_ZN7S2603C42v8Ev");}
void  S2603C4 ::v9(){vfunc_called(this, "_ZN7S2603C42v9Ev");}
void  S2603C4 ::v10(){vfunc_called(this, "_ZN7S2603C43v10Ev");}
S2603C4 ::S2603C4(){ note_ctor("S2603C4", this);} // tgen

static void Test_S2603C4()
{
  extern Class_Descriptor cd_S2603C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2603C4, buf);
    S2603C4 *dp, &lv = *(dp=new (buf) S2603C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2603C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2603C4)");
    test_class_info(&lv, &cd_S2603C4);
    dp->~S2603C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2603C4(Test_S2603C4, "S2603C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2603C4C1Ev();
extern void _ZN7S2603C4D1Ev();
Name_Map name_map_S2603C4[] = {
  NSPAIR(_ZN7S2603C4C1Ev),
  NSPAIR(_ZN7S2603C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2603C4[];
extern void _ZN7S2603C4D1Ev();
extern void _ZN7S2603C4D0Ev();
extern void _ZN7S2603C42v6Ev();
extern void _ZN7S2603C42v7Ev();
extern void _ZN7S2603C42v8Ev();
extern void _ZN7S2603C42v9Ev();
extern void _ZN7S2603C43v10Ev();
static  VTBL_ENTRY vtc_S2603C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2603C4[0]),
  (VTBL_ENTRY)&_ZN7S2603C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2603C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2603C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S2603C4[];
extern  VTBL_ENTRY _ZTV7S2603C4[];
Class_Descriptor cd_S2603C4 = {  "S2603C4", // class name
  0,0,//no base classes
  &(vtc_S2603C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2603C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2603C4),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2603C1  : S2603C2 , S2603C4 {
  void *s2603c1f0;
  virtual void  v1(); // _ZN7S2603C12v1Ev
  virtual void  v2(); // _ZN7S2603C12v2Ev
  virtual void  v3(); // _ZN7S2603C12v3Ev
  virtual void  v4(); // _ZN7S2603C12v4Ev
  virtual void  v5(); // _ZN7S2603C12v5Ev
  ~S2603C1(); // tgen
  S2603C1(); // tgen
};
//SIG(1 S2603C1) C1{ BC2{ BC3{ m Fi}} BC4{ vd v6 v7 v8 v9 v10} v1 v2 v3 v4 v5 Fp}


void  S2603C1 ::v1(){vfunc_called(this, "_ZN7S2603C12v1Ev");}
void  S2603C1 ::v2(){vfunc_called(this, "_ZN7S2603C12v2Ev");}
void  S2603C1 ::v3(){vfunc_called(this, "_ZN7S2603C12v3Ev");}
void  S2603C1 ::v4(){vfunc_called(this, "_ZN7S2603C12v4Ev");}
void  S2603C1 ::v5(){vfunc_called(this, "_ZN7S2603C12v5Ev");}
S2603C1 ::~S2603C1(){ note_dtor("S2603C1", this);} // tgen
S2603C1 ::S2603C1(){ note_ctor("S2603C1", this);} // tgen

static void Test_S2603C1()
{
  extern Class_Descriptor cd_S2603C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S2603C1, buf);
    S2603C1 *dp, &lv = *(dp=new (buf) S2603C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2603C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2603C1)");
    check_base_class_offset(lv, (S3350C8_nt*)(S2603C2*), ABISELECT(8,4), "S2603C1");
    check_base_class_offset(lv, (S2603C2*), ABISELECT(8,4), "S2603C1");
    check_base_class_offset(lv, (S2603C4*), 0, "S2603C1");
    check_field_offset(lv, s2603c1f0, ABISELECT(16,8), "S2603C1.s2603c1f0");
    test_class_info(&lv, &cd_S2603C1);
    dp->~S2603C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2603C1(Test_S2603C1, "S2603C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S2603C1C1Ev();
extern void _ZN7S2603C1D1Ev();
Name_Map name_map_S2603C1[] = {
  NSPAIR(_ZN7S2603C1C1Ev),
  NSPAIR(_ZN7S2603C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3350C8_nt;
extern VTBL_ENTRY _ZTI10S3350C8_nt[];
extern Class_Descriptor cd_S2603C2;
extern VTBL_ENTRY _ZTI7S2603C2[];
extern Class_Descriptor cd_S2603C4;
extern VTBL_ENTRY _ZTI7S2603C4[];
extern  VTBL_ENTRY _ZTV7S2603C4[];
static Base_Class bases_S2603C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3350C8_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2603C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2603C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2603C1[];
extern void _ZN7S2603C1D1Ev();
extern void _ZN7S2603C1D0Ev();
extern void _ZN7S2603C42v6Ev();
extern void _ZN7S2603C42v7Ev();
extern void _ZN7S2603C42v8Ev();
extern void _ZN7S2603C42v9Ev();
extern void _ZN7S2603C43v10Ev();
extern void _ZN7S2603C12v1Ev();
extern void _ZN7S2603C12v2Ev();
extern void _ZN7S2603C12v3Ev();
extern void _ZN7S2603C12v4Ev();
extern void _ZN7S2603C12v5Ev();
static  VTBL_ENTRY vtc_S2603C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2603C1[0]),
  (VTBL_ENTRY)&_ZN7S2603C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2603C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2603C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2603C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2603C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S2603C1[];
extern  VTBL_ENTRY _ZTV7S2603C1[];
Class_Descriptor cd_S2603C1 = {  "S2603C1", // class name
  bases_S2603C1, 3,
  &(vtc_S2603C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S2603C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2603C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10088C2  {
  virtual  ~S10088C2(); // _ZN8S10088C2D1Ev
  virtual void  v6(); // _ZN8S10088C22v6Ev
  virtual void  v7(); // _ZN8S10088C22v7Ev
  virtual void  v8(); // _ZN8S10088C22v8Ev
  virtual void  v9(); // _ZN8S10088C22v9Ev
  virtual void  v10(); // _ZN8S10088C23v10Ev
  S10088C2(); // tgen
};
//SIG(-1 S10088C2) C1{ vd v1 v2 v3 v4 v5}


 S10088C2 ::~S10088C2(){ note_dtor("S10088C2", this);}
void  S10088C2 ::v6(){vfunc_called(this, "_ZN8S10088C22v6Ev");}
void  S10088C2 ::v7(){vfunc_called(this, "_ZN8S10088C22v7Ev");}
void  S10088C2 ::v8(){vfunc_called(this, "_ZN8S10088C22v8Ev");}
void  S10088C2 ::v9(){vfunc_called(this, "_ZN8S10088C22v9Ev");}
void  S10088C2 ::v10(){vfunc_called(this, "_ZN8S10088C23v10Ev");}
S10088C2 ::S10088C2(){ note_ctor("S10088C2", this);} // tgen

static void Test_S10088C2()
{
  extern Class_Descriptor cd_S10088C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10088C2, buf);
    S10088C2 *dp, &lv = *(dp=new (buf) S10088C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10088C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10088C2)");
    test_class_info(&lv, &cd_S10088C2);
    dp->~S10088C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10088C2(Test_S10088C2, "S10088C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10088C2C1Ev();
extern void _ZN8S10088C2D1Ev();
Name_Map name_map_S10088C2[] = {
  NSPAIR(_ZN8S10088C2C1Ev),
  NSPAIR(_ZN8S10088C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10088C2[];
extern void _ZN8S10088C2D1Ev();
extern void _ZN8S10088C2D0Ev();
extern void _ZN8S10088C22v6Ev();
extern void _ZN8S10088C22v7Ev();
extern void _ZN8S10088C22v8Ev();
extern void _ZN8S10088C22v9Ev();
extern void _ZN8S10088C23v10Ev();
static  VTBL_ENTRY vtc_S10088C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10088C2[0]),
  (VTBL_ENTRY)&_ZN8S10088C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10088C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10088C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10088C2[];
extern  VTBL_ENTRY _ZTV8S10088C2[];
Class_Descriptor cd_S10088C2 = {  "S10088C2", // class name
  0,0,//no base classes
  &(vtc_S10088C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10088C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10088C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10088C1  : S10088C2 {
  void *s10088c1f0[23];
  char s10088c1f1;
  int s10088c1f2;
  virtual  ~S10088C1(); // _ZN8S10088C1D1Ev
  virtual void  v1(); // _ZN8S10088C12v1Ev
  virtual void  v2(); // _ZN8S10088C12v2Ev
  virtual void  v3(); // _ZN8S10088C12v3Ev
  virtual void  v4(); // _ZN8S10088C12v4Ev
  virtual void  v5(); // _ZN8S10088C12v5Ev
  S10088C1(); // tgen
};
//SIG(1 S10088C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[23] Fc Fi}


 S10088C1 ::~S10088C1(){ note_dtor("S10088C1", this);}
void  S10088C1 ::v1(){vfunc_called(this, "_ZN8S10088C12v1Ev");}
void  S10088C1 ::v2(){vfunc_called(this, "_ZN8S10088C12v2Ev");}
void  S10088C1 ::v3(){vfunc_called(this, "_ZN8S10088C12v3Ev");}
void  S10088C1 ::v4(){vfunc_called(this, "_ZN8S10088C12v4Ev");}
void  S10088C1 ::v5(){vfunc_called(this, "_ZN8S10088C12v5Ev");}
S10088C1 ::S10088C1(){ note_ctor("S10088C1", this);} // tgen

static void Test_S10088C1()
{
  extern Class_Descriptor cd_S10088C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,27)];
    init_test(&cd_S10088C1, buf);
    S10088C1 *dp, &lv = *(dp=new (buf) S10088C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,104), "sizeof(S10088C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10088C1)");
    check_base_class_offset(lv, (S10088C2*), 0, "S10088C1");
    check_field_offset(lv, s10088c1f0, ABISELECT(8,4), "S10088C1.s10088c1f0");
    check_field_offset(lv, s10088c1f1, ABISELECT(192,96), "S10088C1.s10088c1f1");
    check_field_offset(lv, s10088c1f2, ABISELECT(196,100), "S10088C1.s10088c1f2");
    test_class_info(&lv, &cd_S10088C1);
    dp->~S10088C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10088C1(Test_S10088C1, "S10088C1", ABISELECT(200,104));

#else // __cplusplus

extern void _ZN8S10088C1C1Ev();
extern void _ZN8S10088C1D1Ev();
Name_Map name_map_S10088C1[] = {
  NSPAIR(_ZN8S10088C1C1Ev),
  NSPAIR(_ZN8S10088C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10088C2;
extern VTBL_ENTRY _ZTI8S10088C2[];
extern  VTBL_ENTRY _ZTV8S10088C2[];
static Base_Class bases_S10088C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10088C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10088C1[];
extern void _ZN8S10088C1D1Ev();
extern void _ZN8S10088C1D0Ev();
extern void _ZN8S10088C22v6Ev();
extern void _ZN8S10088C22v7Ev();
extern void _ZN8S10088C22v8Ev();
extern void _ZN8S10088C22v9Ev();
extern void _ZN8S10088C23v10Ev();
extern void _ZN8S10088C12v1Ev();
extern void _ZN8S10088C12v2Ev();
extern void _ZN8S10088C12v3Ev();
extern void _ZN8S10088C12v4Ev();
extern void _ZN8S10088C12v5Ev();
static  VTBL_ENTRY vtc_S10088C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10088C1[0]),
  (VTBL_ENTRY)&_ZN8S10088C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10088C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10088C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10088C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10088C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10088C1[];
extern  VTBL_ENTRY _ZTV8S10088C1[];
Class_Descriptor cd_S10088C1 = {  "S10088C1", // class name
  bases_S10088C1, 1,
  &(vtc_S10088C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,104), // object size
  NSPAIRA(_ZTI8S10088C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10088C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3771C2  : S6282C14_nt {
  int s3771c2f0[6];
  char s3771c2f1[2];
  virtual  ~S3771C2(); // _ZN7S3771C2D1Ev
  S3771C2(); // tgen
};
//SIG(-1 S3771C2) C1{ BC2{ vd m Fi} vd Fi[6] Fc[2]}


 S3771C2 ::~S3771C2(){ note_dtor("S3771C2", this);}
S3771C2 ::S3771C2(){ note_ctor("S3771C2", this);} // tgen

static void Test_S3771C2()
{
  extern Class_Descriptor cd_S3771C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S3771C2, buf);
    S3771C2 *dp, &lv = *(dp=new (buf) S3771C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S3771C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3771C2)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S3771C2");
    check_field_offset(lv, s3771c2f0, ABISELECT(12,8), "S3771C2.s3771c2f0");
    check_field_offset(lv, s3771c2f1, ABISELECT(36,32), "S3771C2.s3771c2f1");
    test_class_info(&lv, &cd_S3771C2);
    dp->~S3771C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3771C2(Test_S3771C2, "S3771C2", ABISELECT(40,36));

#else // __cplusplus

extern void _ZN7S3771C2C1Ev();
extern void _ZN7S3771C2D1Ev();
Name_Map name_map_S3771C2[] = {
  NSPAIR(_ZN7S3771C2C1Ev),
  NSPAIR(_ZN7S3771C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S3771C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3771C2[];
extern void _ZN7S3771C2D1Ev();
extern void _ZN7S3771C2D0Ev();
static  VTBL_ENTRY vtc_S3771C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3771C2[0]),
  (VTBL_ENTRY)&_ZN7S3771C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3771C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S3771C2[];
extern  VTBL_ENTRY _ZTV7S3771C2[];
Class_Descriptor cd_S3771C2 = {  "S3771C2", // class name
  bases_S3771C2, 1,
  &(vtc_S3771C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,36), // object size
  NSPAIRA(_ZTI7S3771C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3771C2),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3771C1  : S3771C2 {
  ::S2185C10_nt s3771c1f0;
  virtual  ~S3771C1(); // _ZN7S3771C1D1Ev
  S3771C1(); // tgen
};
//SIG(1 S3771C1) C1{ BC2{ BC3{ vd m Fi} vd Fi[6] Fc[2]} vd FC4{ m Fp Fi FC5{ m}}}


 S3771C1 ::~S3771C1(){ note_dtor("S3771C1", this);}
S3771C1 ::S3771C1(){ note_ctor("S3771C1", this);} // tgen

static void Test_S3771C1()
{
  extern Class_Descriptor cd_S3771C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S3771C1, buf);
    S3771C1 *dp, &lv = *(dp=new (buf) S3771C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S3771C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3771C1)");
    check_base_class_offset(lv, (S6282C14_nt*)(S3771C2*), 0, "S3771C1");
    check_base_class_offset(lv, (S3771C2*), 0, "S3771C1");
    check_field_offset(lv, s3771c1f0, ABISELECT(40,36), "S3771C1.s3771c1f0");
    test_class_info(&lv, &cd_S3771C1);
    dp->~S3771C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3771C1(Test_S3771C1, "S3771C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S3771C1C1Ev();
extern void _ZN7S3771C1D1Ev();
Name_Map name_map_S3771C1[] = {
  NSPAIR(_ZN7S3771C1C1Ev),
  NSPAIR(_ZN7S3771C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S3771C2;
extern VTBL_ENTRY _ZTI7S3771C2[];
extern  VTBL_ENTRY _ZTV7S3771C2[];
static Base_Class bases_S3771C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3771C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3771C1[];
extern void _ZN7S3771C1D1Ev();
extern void _ZN7S3771C1D0Ev();
static  VTBL_ENTRY vtc_S3771C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3771C1[0]),
  (VTBL_ENTRY)&_ZN7S3771C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3771C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3771C1[];
extern  VTBL_ENTRY _ZTV7S3771C1[];
Class_Descriptor cd_S3771C1 = {  "S3771C1", // class name
  bases_S3771C1, 2,
  &(vtc_S3771C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S3771C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3771C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10083C2  {
  virtual  ~S10083C2(); // _ZN8S10083C2D1Ev
  virtual void  v6(); // _ZN8S10083C22v6Ev
  virtual void  v7(); // _ZN8S10083C22v7Ev
  virtual void  v8(); // _ZN8S10083C22v8Ev
  virtual void  v9(); // _ZN8S10083C22v9Ev
  virtual void  v10(); // _ZN8S10083C23v10Ev
  S10083C2(); // tgen
};
//SIG(-1 S10083C2) C1{ vd v1 v2 v3 v4 v5}


 S10083C2 ::~S10083C2(){ note_dtor("S10083C2", this);}
void  S10083C2 ::v6(){vfunc_called(this, "_ZN8S10083C22v6Ev");}
void  S10083C2 ::v7(){vfunc_called(this, "_ZN8S10083C22v7Ev");}
void  S10083C2 ::v8(){vfunc_called(this, "_ZN8S10083C22v8Ev");}
void  S10083C2 ::v9(){vfunc_called(this, "_ZN8S10083C22v9Ev");}
void  S10083C2 ::v10(){vfunc_called(this, "_ZN8S10083C23v10Ev");}
S10083C2 ::S10083C2(){ note_ctor("S10083C2", this);} // tgen

static void Test_S10083C2()
{
  extern Class_Descriptor cd_S10083C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10083C2, buf);
    S10083C2 *dp, &lv = *(dp=new (buf) S10083C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10083C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10083C2)");
    test_class_info(&lv, &cd_S10083C2);
    dp->~S10083C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10083C2(Test_S10083C2, "S10083C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10083C2C1Ev();
extern void _ZN8S10083C2D1Ev();
Name_Map name_map_S10083C2[] = {
  NSPAIR(_ZN8S10083C2C1Ev),
  NSPAIR(_ZN8S10083C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10083C2[];
extern void _ZN8S10083C2D1Ev();
extern void _ZN8S10083C2D0Ev();
extern void _ZN8S10083C22v6Ev();
extern void _ZN8S10083C22v7Ev();
extern void _ZN8S10083C22v8Ev();
extern void _ZN8S10083C22v9Ev();
extern void _ZN8S10083C23v10Ev();
static  VTBL_ENTRY vtc_S10083C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10083C2[0]),
  (VTBL_ENTRY)&_ZN8S10083C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10083C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10083C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10083C2[];
extern  VTBL_ENTRY _ZTV8S10083C2[];
Class_Descriptor cd_S10083C2 = {  "S10083C2", // class name
  0,0,//no base classes
  &(vtc_S10083C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10083C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10083C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10083C1  : S10083C2 {
  ::S21811C13_nt s10083c1f0;
  int s10083c1f1;
  virtual  ~S10083C1(); // _ZN8S10083C1D1Ev
  virtual void  v1(); // _ZN8S10083C12v1Ev
  virtual void  v2(); // _ZN8S10083C12v2Ev
  virtual void  v3(); // _ZN8S10083C12v3Ev
  virtual void  v4(); // _ZN8S10083C12v4Ev
  virtual void  v5(); // _ZN8S10083C12v5Ev
  S10083C1(); // tgen
};
//SIG(1 S10083C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 FC3{ m Fp} Fi}


 S10083C1 ::~S10083C1(){ note_dtor("S10083C1", this);}
void  S10083C1 ::v1(){vfunc_called(this, "_ZN8S10083C12v1Ev");}
void  S10083C1 ::v2(){vfunc_called(this, "_ZN8S10083C12v2Ev");}
void  S10083C1 ::v3(){vfunc_called(this, "_ZN8S10083C12v3Ev");}
void  S10083C1 ::v4(){vfunc_called(this, "_ZN8S10083C12v4Ev");}
void  S10083C1 ::v5(){vfunc_called(this, "_ZN8S10083C12v5Ev");}
S10083C1 ::S10083C1(){ note_ctor("S10083C1", this);} // tgen

static void Test_S10083C1()
{
  extern Class_Descriptor cd_S10083C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10083C1, buf);
    S10083C1 *dp, &lv = *(dp=new (buf) S10083C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10083C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10083C1)");
    check_base_class_offset(lv, (S10083C2*), 0, "S10083C1");
    check_field_offset(lv, s10083c1f0, ABISELECT(8,4), "S10083C1.s10083c1f0");
    check_field_offset(lv, s10083c1f1, ABISELECT(16,8), "S10083C1.s10083c1f1");
    test_class_info(&lv, &cd_S10083C1);
    dp->~S10083C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10083C1(Test_S10083C1, "S10083C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10083C1C1Ev();
extern void _ZN8S10083C1D1Ev();
Name_Map name_map_S10083C1[] = {
  NSPAIR(_ZN8S10083C1C1Ev),
  NSPAIR(_ZN8S10083C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10083C2;
extern VTBL_ENTRY _ZTI8S10083C2[];
extern  VTBL_ENTRY _ZTV8S10083C2[];
static Base_Class bases_S10083C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10083C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10083C1[];
extern void _ZN8S10083C1D1Ev();
extern void _ZN8S10083C1D0Ev();
extern void _ZN8S10083C22v6Ev();
extern void _ZN8S10083C22v7Ev();
extern void _ZN8S10083C22v8Ev();
extern void _ZN8S10083C22v9Ev();
extern void _ZN8S10083C23v10Ev();
extern void _ZN8S10083C12v1Ev();
extern void _ZN8S10083C12v2Ev();
extern void _ZN8S10083C12v3Ev();
extern void _ZN8S10083C12v4Ev();
extern void _ZN8S10083C12v5Ev();
static  VTBL_ENTRY vtc_S10083C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10083C1[0]),
  (VTBL_ENTRY)&_ZN8S10083C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10083C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10083C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10083C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10083C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10083C1[];
extern  VTBL_ENTRY _ZTV8S10083C1[];
Class_Descriptor cd_S10083C1 = {  "S10083C1", // class name
  bases_S10083C1, 1,
  &(vtc_S10083C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10083C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10083C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9937C2  {
  virtual  ~S9937C2(); // _ZN7S9937C2D1Ev
  virtual void  v5(); // _ZN7S9937C22v5Ev
  virtual void  v6(); // _ZN7S9937C22v6Ev
  virtual void  v7(); // _ZN7S9937C22v7Ev
  virtual void  v8(); // _ZN7S9937C22v8Ev
  virtual void  v9(); // _ZN7S9937C22v9Ev
  S9937C2(); // tgen
};
//SIG(-1 S9937C2) C1{ vd v1 v2 v3 v4 v5}


 S9937C2 ::~S9937C2(){ note_dtor("S9937C2", this);}
void  S9937C2 ::v5(){vfunc_called(this, "_ZN7S9937C22v5Ev");}
void  S9937C2 ::v6(){vfunc_called(this, "_ZN7S9937C22v6Ev");}
void  S9937C2 ::v7(){vfunc_called(this, "_ZN7S9937C22v7Ev");}
void  S9937C2 ::v8(){vfunc_called(this, "_ZN7S9937C22v8Ev");}
void  S9937C2 ::v9(){vfunc_called(this, "_ZN7S9937C22v9Ev");}
S9937C2 ::S9937C2(){ note_ctor("S9937C2", this);} // tgen

static void Test_S9937C2()
{
  extern Class_Descriptor cd_S9937C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9937C2, buf);
    S9937C2 *dp, &lv = *(dp=new (buf) S9937C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9937C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9937C2)");
    test_class_info(&lv, &cd_S9937C2);
    dp->~S9937C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9937C2(Test_S9937C2, "S9937C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9937C2C1Ev();
extern void _ZN7S9937C2D1Ev();
Name_Map name_map_S9937C2[] = {
  NSPAIR(_ZN7S9937C2C1Ev),
  NSPAIR(_ZN7S9937C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9937C2[];
extern void _ZN7S9937C2D1Ev();
extern void _ZN7S9937C2D0Ev();
extern void _ZN7S9937C22v5Ev();
extern void _ZN7S9937C22v6Ev();
extern void _ZN7S9937C22v7Ev();
extern void _ZN7S9937C22v8Ev();
extern void _ZN7S9937C22v9Ev();
static  VTBL_ENTRY vtc_S9937C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9937C2[0]),
  (VTBL_ENTRY)&_ZN7S9937C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9937C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9937C2[];
extern  VTBL_ENTRY _ZTV7S9937C2[];
Class_Descriptor cd_S9937C2 = {  "S9937C2", // class name
  0,0,//no base classes
  &(vtc_S9937C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9937C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9937C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9937C1  : S9937C2 {
  int s9937c1f0[2];
  ::S3350C4_nt s9937c1f1;
  virtual void  v1(); // _ZN7S9937C12v1Ev
  virtual void  v2(); // _ZN7S9937C12v2Ev
  virtual void  v3(); // _ZN7S9937C12v3Ev
  virtual void  v4(); // _ZN7S9937C12v4Ev
  ~S9937C1(); // tgen
  S9937C1(); // tgen
};
//SIG(1 S9937C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[2] FC3{ m Fi[2]}}


void  S9937C1 ::v1(){vfunc_called(this, "_ZN7S9937C12v1Ev");}
void  S9937C1 ::v2(){vfunc_called(this, "_ZN7S9937C12v2Ev");}
void  S9937C1 ::v3(){vfunc_called(this, "_ZN7S9937C12v3Ev");}
void  S9937C1 ::v4(){vfunc_called(this, "_ZN7S9937C12v4Ev");}
S9937C1 ::~S9937C1(){ note_dtor("S9937C1", this);} // tgen
S9937C1 ::S9937C1(){ note_ctor("S9937C1", this);} // tgen

static void Test_S9937C1()
{
  extern Class_Descriptor cd_S9937C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S9937C1, buf);
    S9937C1 *dp, &lv = *(dp=new (buf) S9937C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S9937C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9937C1)");
    check_base_class_offset(lv, (S9937C2*), 0, "S9937C1");
    check_field_offset(lv, s9937c1f0, ABISELECT(8,4), "S9937C1.s9937c1f0");
    check_field_offset(lv, s9937c1f1, ABISELECT(16,12), "S9937C1.s9937c1f1");
    test_class_info(&lv, &cd_S9937C1);
    dp->~S9937C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9937C1(Test_S9937C1, "S9937C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S9937C1C1Ev();
extern void _ZN7S9937C1D1Ev();
Name_Map name_map_S9937C1[] = {
  NSPAIR(_ZN7S9937C1C1Ev),
  NSPAIR(_ZN7S9937C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9937C2;
extern VTBL_ENTRY _ZTI7S9937C2[];
extern  VTBL_ENTRY _ZTV7S9937C2[];
static Base_Class bases_S9937C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9937C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9937C1[];
extern void _ZN7S9937C1D1Ev();
extern void _ZN7S9937C1D0Ev();
extern void _ZN7S9937C22v5Ev();
extern void _ZN7S9937C22v6Ev();
extern void _ZN7S9937C22v7Ev();
extern void _ZN7S9937C22v8Ev();
extern void _ZN7S9937C22v9Ev();
extern void _ZN7S9937C12v1Ev();
extern void _ZN7S9937C12v2Ev();
extern void _ZN7S9937C12v3Ev();
extern void _ZN7S9937C12v4Ev();
static  VTBL_ENTRY vtc_S9937C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9937C1[0]),
  (VTBL_ENTRY)&_ZN7S9937C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9937C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9937C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9937C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9937C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9937C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9937C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9937C1[];
extern  VTBL_ENTRY _ZTV7S9937C1[];
Class_Descriptor cd_S9937C1 = {  "S9937C1", // class name
  bases_S9937C1, 1,
  &(vtc_S9937C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S9937C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9937C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7286C6  {
  virtual void  v1(); // _ZN7S7286C62v1Ev
  ~S7286C6(); // tgen
  S7286C6(); // tgen
};
//SIG(-1 S7286C6) C1{ v1}


void  S7286C6 ::v1(){vfunc_called(this, "_ZN7S7286C62v1Ev");}
S7286C6 ::~S7286C6(){ note_dtor("S7286C6", this);} // tgen
S7286C6 ::S7286C6(){ note_ctor("S7286C6", this);} // tgen

static void Test_S7286C6()
{
  extern Class_Descriptor cd_S7286C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7286C6, buf);
    S7286C6 *dp, &lv = *(dp=new (buf) S7286C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7286C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C6)");
    test_class_info(&lv, &cd_S7286C6);
    dp->~S7286C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C6(Test_S7286C6, "S7286C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7286C6C1Ev();
extern void _ZN7S7286C6D1Ev();
Name_Map name_map_S7286C6[] = {
  NSPAIR(_ZN7S7286C6C1Ev),
  NSPAIR(_ZN7S7286C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7286C6[];
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY vtc_S7286C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C6[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
Class_Descriptor cd_S7286C6 = {  "S7286C6", // class name
  0,0,//no base classes
  &(vtc_S7286C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7286C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7286C6),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7286C5  : virtual S2121C38 , S7286C6 , virtual S2121C28 {
  ~S7286C5(); // tgen
  S7286C5(); // tgen
};
//SIG(-1 S7286C5) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S7286C5 ::~S7286C5(){ note_dtor("S7286C5", this);} // tgen
S7286C5 ::S7286C5(){ note_ctor("S7286C5", this);} // tgen

static void Test_S7286C5()
{
  extern Class_Descriptor cd_S7286C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7286C5, buf);
    S7286C5 *dp, &lv = *(dp=new (buf) S7286C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7286C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C5)");
    check_base_class_offset(lv, (S2121C38*), 0, "S7286C5");
    check_base_class_offset(lv, (S7286C6*), 0, "S7286C5");
    check_base_class_offset(lv, (S2121C28*), 0, "S7286C5");
    test_class_info(&lv, &cd_S7286C5);
    dp->~S7286C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C5(Test_S7286C5, "S7286C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7286C5C1Ev();
extern void _ZN7S7286C5D1Ev();
Name_Map name_map_S7286C5[] = {
  NSPAIR(_ZN7S7286C5C1Ev),
  NSPAIR(_ZN7S7286C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7286C6;
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S7286C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7286C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7286C5[];
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY vtc_S7286C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C5[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
extern VTBL_ENTRY _ZTV7S7286C5[];
static  VTT_ENTRY vtt_S7286C5[] = {
  {&(_ZTV7S7286C5[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7286C5[];
extern  VTBL_ENTRY _ZTV7S7286C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C5[];
Class_Descriptor cd_S7286C5 = {  "S7286C5", // class name
  bases_S7286C5, 3,
  &(vtc_S7286C5[0]), // expected_vtbl_contents
  &(vtt_S7286C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7286C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7286C5),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7286C5),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7286C3  : S2121C38 , S7286C5 {
  virtual void  v2(); // _ZN7S7286C32v2Ev
  ~S7286C3(); // tgen
  S7286C3(); // tgen
};
//SIG(-1 S7286C3) C1{ BC2{ m} BC3{ VBC2 BC4{ v2} VBC5{ m}} v1}


void  S7286C3 ::v2(){vfunc_called(this, "_ZN7S7286C32v2Ev");}
S7286C3 ::~S7286C3(){ note_dtor("S7286C3", this);} // tgen
S7286C3 ::S7286C3(){ note_ctor("S7286C3", this);} // tgen

static void Test_S7286C3()
{
  extern Class_Descriptor cd_S7286C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7286C3, buf);
    S7286C3 *dp, &lv = *(dp=new (buf) S7286C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7286C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C3)");
    /*is_ambiguous_... S7286C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*), 0, "S7286C3");
    check_base_class_offset(lv, (S2121C38*)(S7286C5*), ABISELECT(8,4), "S7286C3");
    check_base_class_offset(lv, (S7286C6*)(S7286C5*), 0, "S7286C3");
    check_base_class_offset(lv, (S2121C28*)(S7286C5*), 0, "S7286C3");
    check_base_class_offset(lv, (S7286C5*), 0, "S7286C3");
    test_class_info(&lv, &cd_S7286C3);
    dp->~S7286C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C3(Test_S7286C3, "S7286C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7286C3C1Ev();
extern void _ZN7S7286C3D1Ev();
Name_Map name_map_S7286C3[] = {
  NSPAIR(_ZN7S7286C3C1Ev),
  NSPAIR(_ZN7S7286C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7286C6;
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7286C5;
extern VTBL_ENTRY _ZTI7S7286C5[];
extern  VTBL_ENTRY _ZTV7S7286C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C5[];
static Base_Class bases_S7286C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C38,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7286C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7286C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7286C3[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY vtc_S7286C3[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C3[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7286C3[];
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C5__7S7286C3[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C5[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
static  VTT_ENTRY vtt_S7286C3[] = {
  {&(_ZTV7S7286C3[4]),  4,6},
  {&(_tg__ZTV7S7286C5__7S7286C3[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7286C3[];
extern  VTBL_ENTRY _ZTV7S7286C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C3[];
Class_Descriptor cd_S7286C3 = {  "S7286C3", // class name
  bases_S7286C3, 5,
  &(vtc_S7286C3[0]), // expected_vtbl_contents
  &(vtt_S7286C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7286C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7286C3),6, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7286C3),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7286C2  : virtual S7286C3 {
  int s7286c2f0;
  ~S7286C2(); // tgen
  S7286C2(); // tgen
};
//SIG(-1 S7286C2) C1{ VBC2{ BC3{ m} BC4{ VBC3 BC5{ v1} VBC6{ m}} v2} Fi}


S7286C2 ::~S7286C2(){ note_dtor("S7286C2", this);} // tgen
S7286C2 ::S7286C2(){ note_ctor("S7286C2", this);} // tgen

static void Test_S7286C2()
{
  extern Class_Descriptor cd_S7286C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7286C2, buf);
    S7286C2 *dp, &lv = *(dp=new (buf) S7286C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7286C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C2)");
    /*is_ambiguous_... S7286C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7286C3*), 0, "S7286C2");
    check_base_class_offset(lv, (S2121C38*)(S7286C5*)(S7286C3*), ABISELECT(12,8), "S7286C2");
    check_base_class_offset(lv, (S7286C6*)(S7286C5*)(S7286C3*), 0, "S7286C2");
    check_base_class_offset(lv, (S2121C28*)(S7286C5*)(S7286C3*), 0, "S7286C2");
    check_base_class_offset(lv, (S7286C5*)(S7286C3*), 0, "S7286C2");
    check_base_class_offset(lv, (S7286C3*), 0, "S7286C2");
    check_field_offset(lv, s7286c2f0, ABISELECT(8,4), "S7286C2.s7286c2f0");
    test_class_info(&lv, &cd_S7286C2);
    dp->~S7286C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C2(Test_S7286C2, "S7286C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7286C2C1Ev();
extern void _ZN7S7286C2D1Ev();
Name_Map name_map_S7286C2[] = {
  NSPAIR(_ZN7S7286C2C1Ev),
  NSPAIR(_ZN7S7286C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7286C6;
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7286C5;
extern VTBL_ENTRY _ZTI7S7286C5[];
extern  VTBL_ENTRY _ZTV7S7286C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C5[];
extern Class_Descriptor cd_S7286C3;
extern VTBL_ENTRY _ZTI7S7286C3[];
extern  VTBL_ENTRY _ZTV7S7286C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C3[];
static Base_Class bases_S7286C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7286C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7286C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7286C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7286C2[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY vtc_S7286C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C2[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7286C2[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C3__7S7286C2[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C3[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C57S7286C3__7S7286C2[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C5[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
static  VTT_ENTRY vtt_S7286C2[] = {
  {&(_ZTV7S7286C2[7]),  7,9},
  {&(_ZTV7S7286C2[7]),  7,9},
  {&(_tg__ZTV7S7286C3__7S7286C2[4]),  4,6},
  {&(_tg__ZTV7S7286C57S7286C3__7S7286C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7286C2[];
extern  VTBL_ENTRY _ZTV7S7286C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C2[];
Class_Descriptor cd_S7286C2 = {  "S7286C2", // class name
  bases_S7286C2, 6,
  &(vtc_S7286C2[0]), // expected_vtbl_contents
  &(vtt_S7286C2[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7286C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7286C2),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7286C2),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7286C1  : S7286C2 , S2121C24 {
  ~S7286C1(); // tgen
  S7286C1(); // tgen
};
//SIG(1 S7286C1) C1{ BC2{ VBC3{ BC4{ m} BC5{ VBC4 BC6{ v1} VBC7{ m}} v2} Fi} BC8{ m}}


S7286C1 ::~S7286C1(){ note_dtor("S7286C1", this);} // tgen
S7286C1 ::S7286C1(){ note_ctor("S7286C1", this);} // tgen

static void Test_S7286C1()
{
  extern Class_Descriptor cd_S7286C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7286C1, buf);
    S7286C1 *dp, &lv = *(dp=new (buf) S7286C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7286C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7286C1)");
    /*is_ambiguous_... S7286C3::S2121C38 */ AMB_check_base_class_offset(lv, (S2121C38*)(S7286C3*), 0, "S7286C1");
    check_base_class_offset(lv, (S2121C38*)(S7286C5*)(S7286C3*), ABISELECT(12,8), "S7286C1");
    check_base_class_offset(lv, (S7286C6*)(S7286C5*)(S7286C3*), 0, "S7286C1");
    check_base_class_offset(lv, (S2121C28*)(S7286C5*)(S7286C3*), 0, "S7286C1");
    check_base_class_offset(lv, (S7286C5*)(S7286C3*), 0, "S7286C1");
    check_base_class_offset(lv, (S7286C3*)(S7286C2*), 0, "S7286C1");
    check_base_class_offset(lv, (S7286C2*), 0, "S7286C1");
    check_base_class_offset(lv, (S2121C24*), 0, "S7286C1");
    test_class_info(&lv, &cd_S7286C1);
    dp->~S7286C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7286C1(Test_S7286C1, "S7286C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7286C1C1Ev();
extern void _ZN7S7286C1D1Ev();
Name_Map name_map_S7286C1[] = {
  NSPAIR(_ZN7S7286C1C1Ev),
  NSPAIR(_ZN7S7286C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S7286C6;
extern VTBL_ENTRY _ZTI7S7286C6[];
extern  VTBL_ENTRY _ZTV7S7286C6[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S7286C5;
extern VTBL_ENTRY _ZTI7S7286C5[];
extern  VTBL_ENTRY _ZTV7S7286C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C5[];
extern Class_Descriptor cd_S7286C3;
extern VTBL_ENTRY _ZTI7S7286C3[];
extern  VTBL_ENTRY _ZTV7S7286C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C3[];
extern Class_Descriptor cd_S7286C2;
extern VTBL_ENTRY _ZTI7S7286C2[];
extern  VTBL_ENTRY _ZTV7S7286C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C2[];
extern Class_Descriptor cd_S2121C24;
extern VTBL_ENTRY _ZTI8S2121C24[];
static Base_Class bases_S7286C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2121C38,    ABISELECT(12,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7286C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7286C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7286C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7286C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7286C1[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY vtc_S7286C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C1[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7286C1[];
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C2__7S7286C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C2[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern void _ZN7S7286C62v1Ev();
extern void _ZN7S7286C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C3__7S7286C1[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C3[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
  (VTBL_ENTRY)&_ZN7S7286C32v2Ev,
};
extern void _ZN7S7286C62v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7286C57S7286C3__7S7286C1[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7286C5[0]),
  (VTBL_ENTRY)&_ZN7S7286C62v1Ev,
};
static  VTT_ENTRY vtt_S7286C1[] = {
  {&(_ZTV7S7286C1[7]),  7,9},
  {&(_tg__ZTV7S7286C2__7S7286C1[7]),  7,9},
  {&(_tg__ZTV7S7286C2__7S7286C1[7]),  7,9},
  {&(_ZTV7S7286C1[7]),  7,9},
  {&(_tg__ZTV7S7286C3__7S7286C1[4]),  4,6},
  {&(_tg__ZTV7S7286C57S7286C3__7S7286C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S7286C1[];
extern  VTBL_ENTRY _ZTV7S7286C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7286C1[];
Class_Descriptor cd_S7286C1 = {  "S7286C1", // class name
  bases_S7286C1, 8,
  &(vtc_S7286C1[0]), // expected_vtbl_contents
  &(vtt_S7286C1[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7286C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7286C1),9, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7286C1),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10251C2  {
  virtual  ~S10251C2(); // _ZN8S10251C2D1Ev
  virtual void  v8(); // _ZN8S10251C22v8Ev
  virtual void  v9(); // _ZN8S10251C22v9Ev
  virtual void  v10(); // _ZN8S10251C23v10Ev
  virtual void  v11(); // _ZN8S10251C23v11Ev
  virtual void  v12(); // _ZN8S10251C23v12Ev
  S10251C2(); // tgen
};
//SIG(-1 S10251C2) C1{ vd v1 v2 v3 v4 v5}


 S10251C2 ::~S10251C2(){ note_dtor("S10251C2", this);}
void  S10251C2 ::v8(){vfunc_called(this, "_ZN8S10251C22v8Ev");}
void  S10251C2 ::v9(){vfunc_called(this, "_ZN8S10251C22v9Ev");}
void  S10251C2 ::v10(){vfunc_called(this, "_ZN8S10251C23v10Ev");}
void  S10251C2 ::v11(){vfunc_called(this, "_ZN8S10251C23v11Ev");}
void  S10251C2 ::v12(){vfunc_called(this, "_ZN8S10251C23v12Ev");}
S10251C2 ::S10251C2(){ note_ctor("S10251C2", this);} // tgen

static void Test_S10251C2()
{
  extern Class_Descriptor cd_S10251C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10251C2, buf);
    S10251C2 *dp, &lv = *(dp=new (buf) S10251C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10251C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10251C2)");
    test_class_info(&lv, &cd_S10251C2);
    dp->~S10251C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10251C2(Test_S10251C2, "S10251C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10251C2C1Ev();
extern void _ZN8S10251C2D1Ev();
Name_Map name_map_S10251C2[] = {
  NSPAIR(_ZN8S10251C2C1Ev),
  NSPAIR(_ZN8S10251C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10251C2[];
extern void _ZN8S10251C2D1Ev();
extern void _ZN8S10251C2D0Ev();
extern void _ZN8S10251C22v8Ev();
extern void _ZN8S10251C22v9Ev();
extern void _ZN8S10251C23v10Ev();
extern void _ZN8S10251C23v11Ev();
extern void _ZN8S10251C23v12Ev();
static  VTBL_ENTRY vtc_S10251C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10251C2[0]),
  (VTBL_ENTRY)&_ZN8S10251C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10251C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10251C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10251C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S10251C2[];
extern  VTBL_ENTRY _ZTV8S10251C2[];
Class_Descriptor cd_S10251C2 = {  "S10251C2", // class name
  0,0,//no base classes
  &(vtc_S10251C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10251C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10251C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10251C1  : S10251C2 {
  void *s10251c1f0;
  virtual  ~S10251C1(); // _ZN8S10251C1D1Ev
  virtual void  v1(); // _ZN8S10251C12v1Ev
  virtual void  v2(); // _ZN8S10251C12v2Ev
  virtual void  v3(); // _ZN8S10251C12v3Ev
  virtual void  v4(); // _ZN8S10251C12v4Ev
  virtual void  v5(); // _ZN8S10251C12v5Ev
  virtual void  v6(); // _ZN8S10251C12v6Ev
  virtual void  v7(); // _ZN8S10251C12v7Ev
  S10251C1(); // tgen
};
//SIG(1 S10251C1) C1{ BC2{ vd v8 v9 v10 v11 v12} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S10251C1 ::~S10251C1(){ note_dtor("S10251C1", this);}
void  S10251C1 ::v1(){vfunc_called(this, "_ZN8S10251C12v1Ev");}
void  S10251C1 ::v2(){vfunc_called(this, "_ZN8S10251C12v2Ev");}
void  S10251C1 ::v3(){vfunc_called(this, "_ZN8S10251C12v3Ev");}
void  S10251C1 ::v4(){vfunc_called(this, "_ZN8S10251C12v4Ev");}
void  S10251C1 ::v5(){vfunc_called(this, "_ZN8S10251C12v5Ev");}
void  S10251C1 ::v6(){vfunc_called(this, "_ZN8S10251C12v6Ev");}
void  S10251C1 ::v7(){vfunc_called(this, "_ZN8S10251C12v7Ev");}
S10251C1 ::S10251C1(){ note_ctor("S10251C1", this);} // tgen

static void Test_S10251C1()
{
  extern Class_Descriptor cd_S10251C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10251C1, buf);
    S10251C1 *dp, &lv = *(dp=new (buf) S10251C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10251C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10251C1)");
    check_base_class_offset(lv, (S10251C2*), 0, "S10251C1");
    check_field_offset(lv, s10251c1f0, ABISELECT(8,4), "S10251C1.s10251c1f0");
    test_class_info(&lv, &cd_S10251C1);
    dp->~S10251C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10251C1(Test_S10251C1, "S10251C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10251C1C1Ev();
extern void _ZN8S10251C1D1Ev();
Name_Map name_map_S10251C1[] = {
  NSPAIR(_ZN8S10251C1C1Ev),
  NSPAIR(_ZN8S10251C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10251C2;
extern VTBL_ENTRY _ZTI8S10251C2[];
extern  VTBL_ENTRY _ZTV8S10251C2[];
static Base_Class bases_S10251C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10251C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10251C1[];
extern void _ZN8S10251C1D1Ev();
extern void _ZN8S10251C1D0Ev();
extern void _ZN8S10251C22v8Ev();
extern void _ZN8S10251C22v9Ev();
extern void _ZN8S10251C23v10Ev();
extern void _ZN8S10251C23v11Ev();
extern void _ZN8S10251C23v12Ev();
extern void _ZN8S10251C12v1Ev();
extern void _ZN8S10251C12v2Ev();
extern void _ZN8S10251C12v3Ev();
extern void _ZN8S10251C12v4Ev();
extern void _ZN8S10251C12v5Ev();
extern void _ZN8S10251C12v6Ev();
extern void _ZN8S10251C12v7Ev();
static  VTBL_ENTRY vtc_S10251C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10251C1[0]),
  (VTBL_ENTRY)&_ZN8S10251C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10251C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10251C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10251C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v11Ev,
  (VTBL_ENTRY)&_ZN8S10251C23v12Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10251C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S10251C1[];
extern  VTBL_ENTRY _ZTV8S10251C1[];
Class_Descriptor cd_S10251C1 = {  "S10251C1", // class name
  bases_S10251C1, 1,
  &(vtc_S10251C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10251C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10251C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9511C2  {
  virtual  ~S9511C2(); // _ZN7S9511C2D1Ev
  virtual void  v3(); // _ZN7S9511C22v3Ev
  virtual void  v4(); // _ZN7S9511C22v4Ev
  virtual void  v5(); // _ZN7S9511C22v5Ev
  virtual void  v6(); // _ZN7S9511C22v6Ev
  virtual void  v7(); // _ZN7S9511C22v7Ev
  S9511C2(); // tgen
};
//SIG(-1 S9511C2) C1{ vd v1 v2 v3 v4 v5}


 S9511C2 ::~S9511C2(){ note_dtor("S9511C2", this);}
void  S9511C2 ::v3(){vfunc_called(this, "_ZN7S9511C22v3Ev");}
void  S9511C2 ::v4(){vfunc_called(this, "_ZN7S9511C22v4Ev");}
void  S9511C2 ::v5(){vfunc_called(this, "_ZN7S9511C22v5Ev");}
void  S9511C2 ::v6(){vfunc_called(this, "_ZN7S9511C22v6Ev");}
void  S9511C2 ::v7(){vfunc_called(this, "_ZN7S9511C22v7Ev");}
S9511C2 ::S9511C2(){ note_ctor("S9511C2", this);} // tgen

static void Test_S9511C2()
{
  extern Class_Descriptor cd_S9511C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9511C2, buf);
    S9511C2 *dp, &lv = *(dp=new (buf) S9511C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9511C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9511C2)");
    test_class_info(&lv, &cd_S9511C2);
    dp->~S9511C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9511C2(Test_S9511C2, "S9511C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9511C2C1Ev();
extern void _ZN7S9511C2D1Ev();
Name_Map name_map_S9511C2[] = {
  NSPAIR(_ZN7S9511C2C1Ev),
  NSPAIR(_ZN7S9511C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9511C2[];
extern void _ZN7S9511C2D1Ev();
extern void _ZN7S9511C2D0Ev();
extern void _ZN7S9511C22v3Ev();
extern void _ZN7S9511C22v4Ev();
extern void _ZN7S9511C22v5Ev();
extern void _ZN7S9511C22v6Ev();
extern void _ZN7S9511C22v7Ev();
static  VTBL_ENTRY vtc_S9511C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9511C2[0]),
  (VTBL_ENTRY)&_ZN7S9511C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9511C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9511C2[];
extern  VTBL_ENTRY _ZTV7S9511C2[];
Class_Descriptor cd_S9511C2 = {  "S9511C2", // class name
  0,0,//no base classes
  &(vtc_S9511C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9511C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9511C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9511C1  : S9511C2 {
  int s9511c1f0;
  void *s9511c1f1;
  int s9511c1f2;
  void *s9511c1f3;
  char s9511c1f4[6];
  int s9511c1f5;
  virtual  ~S9511C1(); // _ZN7S9511C1D1Ev
  virtual void  v1(); // _ZN7S9511C12v1Ev
  virtual void  v2(); // _ZN7S9511C12v2Ev
  S9511C1(); // tgen
};
//SIG(1 S9511C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2 Fi Fp Fi Fp Fc[6] Fi}


 S9511C1 ::~S9511C1(){ note_dtor("S9511C1", this);}
void  S9511C1 ::v1(){vfunc_called(this, "_ZN7S9511C12v1Ev");}
void  S9511C1 ::v2(){vfunc_called(this, "_ZN7S9511C12v2Ev");}
S9511C1 ::S9511C1(){ note_ctor("S9511C1", this);} // tgen

static void Test_S9511C1()
{
  extern Class_Descriptor cd_S9511C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S9511C1, buf);
    S9511C1 *dp, &lv = *(dp=new (buf) S9511C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S9511C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9511C1)");
    check_base_class_offset(lv, (S9511C2*), 0, "S9511C1");
    check_field_offset(lv, s9511c1f0, ABISELECT(8,4), "S9511C1.s9511c1f0");
    check_field_offset(lv, s9511c1f1, ABISELECT(16,8), "S9511C1.s9511c1f1");
    check_field_offset(lv, s9511c1f2, ABISELECT(24,12), "S9511C1.s9511c1f2");
    check_field_offset(lv, s9511c1f3, ABISELECT(32,16), "S9511C1.s9511c1f3");
    check_field_offset(lv, s9511c1f4, ABISELECT(40,20), "S9511C1.s9511c1f4");
    check_field_offset(lv, s9511c1f5, ABISELECT(48,28), "S9511C1.s9511c1f5");
    test_class_info(&lv, &cd_S9511C1);
    dp->~S9511C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9511C1(Test_S9511C1, "S9511C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S9511C1C1Ev();
extern void _ZN7S9511C1D1Ev();
Name_Map name_map_S9511C1[] = {
  NSPAIR(_ZN7S9511C1C1Ev),
  NSPAIR(_ZN7S9511C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9511C2;
extern VTBL_ENTRY _ZTI7S9511C2[];
extern  VTBL_ENTRY _ZTV7S9511C2[];
static Base_Class bases_S9511C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9511C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9511C1[];
extern void _ZN7S9511C1D1Ev();
extern void _ZN7S9511C1D0Ev();
extern void _ZN7S9511C22v3Ev();
extern void _ZN7S9511C22v4Ev();
extern void _ZN7S9511C22v5Ev();
extern void _ZN7S9511C22v6Ev();
extern void _ZN7S9511C22v7Ev();
extern void _ZN7S9511C12v1Ev();
extern void _ZN7S9511C12v2Ev();
static  VTBL_ENTRY vtc_S9511C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9511C1[0]),
  (VTBL_ENTRY)&_ZN7S9511C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9511C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9511C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9511C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9511C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9511C1[];
extern  VTBL_ENTRY _ZTV7S9511C1[];
Class_Descriptor cd_S9511C1 = {  "S9511C1", // class name
  bases_S9511C1, 1,
  &(vtc_S9511C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S9511C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9511C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7033C2  {
  virtual  ~S7033C2(); // _ZN7S7033C2D1Ev
  virtual void  v6(); // _ZN7S7033C22v6Ev
  virtual void  v7(); // _ZN7S7033C22v7Ev
  virtual void  v8(); // _ZN7S7033C22v8Ev
  virtual void  v9(); // _ZN7S7033C22v9Ev
  virtual void  v10(); // _ZN7S7033C23v10Ev
  S7033C2(); // tgen
};
//SIG(-1 S7033C2) C1{ vd v1 v2 v3 v4 v5}


 S7033C2 ::~S7033C2(){ note_dtor("S7033C2", this);}
void  S7033C2 ::v6(){vfunc_called(this, "_ZN7S7033C22v6Ev");}
void  S7033C2 ::v7(){vfunc_called(this, "_ZN7S7033C22v7Ev");}
void  S7033C2 ::v8(){vfunc_called(this, "_ZN7S7033C22v8Ev");}
void  S7033C2 ::v9(){vfunc_called(this, "_ZN7S7033C22v9Ev");}
void  S7033C2 ::v10(){vfunc_called(this, "_ZN7S7033C23v10Ev");}
S7033C2 ::S7033C2(){ note_ctor("S7033C2", this);} // tgen

static void Test_S7033C2()
{
  extern Class_Descriptor cd_S7033C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7033C2, buf);
    S7033C2 *dp, &lv = *(dp=new (buf) S7033C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7033C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7033C2)");
    test_class_info(&lv, &cd_S7033C2);
    dp->~S7033C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7033C2(Test_S7033C2, "S7033C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7033C2C1Ev();
extern void _ZN7S7033C2D1Ev();
Name_Map name_map_S7033C2[] = {
  NSPAIR(_ZN7S7033C2C1Ev),
  NSPAIR(_ZN7S7033C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7033C2[];
extern void _ZN7S7033C2D1Ev();
extern void _ZN7S7033C2D0Ev();
extern void _ZN7S7033C22v6Ev();
extern void _ZN7S7033C22v7Ev();
extern void _ZN7S7033C22v8Ev();
extern void _ZN7S7033C22v9Ev();
extern void _ZN7S7033C23v10Ev();
static  VTBL_ENTRY vtc_S7033C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7033C2[0]),
  (VTBL_ENTRY)&_ZN7S7033C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7033C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7033C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7033C2[];
extern  VTBL_ENTRY _ZTV7S7033C2[];
Class_Descriptor cd_S7033C2 = {  "S7033C2", // class name
  0,0,//no base classes
  &(vtc_S7033C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7033C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7033C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7033C1  : S7033C2 {
  void *s7033c1f0;
  char s7033c1f1[64];
  virtual  ~S7033C1(); // _ZN7S7033C1D1Ev
  virtual void  v1(); // _ZN7S7033C12v1Ev
  virtual void  v2(); // _ZN7S7033C12v2Ev
  virtual void  v3(); // _ZN7S7033C12v3Ev
  virtual void  v4(); // _ZN7S7033C12v4Ev
  virtual void  v5(); // _ZN7S7033C12v5Ev
  S7033C1(); // tgen
};
//SIG(1 S7033C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp Fc[64]}


 S7033C1 ::~S7033C1(){ note_dtor("S7033C1", this);}
void  S7033C1 ::v1(){vfunc_called(this, "_ZN7S7033C12v1Ev");}
void  S7033C1 ::v2(){vfunc_called(this, "_ZN7S7033C12v2Ev");}
void  S7033C1 ::v3(){vfunc_called(this, "_ZN7S7033C12v3Ev");}
void  S7033C1 ::v4(){vfunc_called(this, "_ZN7S7033C12v4Ev");}
void  S7033C1 ::v5(){vfunc_called(this, "_ZN7S7033C12v5Ev");}
S7033C1 ::S7033C1(){ note_ctor("S7033C1", this);} // tgen

static void Test_S7033C1()
{
  extern Class_Descriptor cd_S7033C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,19)];
    init_test(&cd_S7033C1, buf);
    S7033C1 *dp, &lv = *(dp=new (buf) S7033C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,72), "sizeof(S7033C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7033C1)");
    check_base_class_offset(lv, (S7033C2*), 0, "S7033C1");
    check_field_offset(lv, s7033c1f0, ABISELECT(8,4), "S7033C1.s7033c1f0");
    check_field_offset(lv, s7033c1f1, ABISELECT(16,8), "S7033C1.s7033c1f1");
    test_class_info(&lv, &cd_S7033C1);
    dp->~S7033C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7033C1(Test_S7033C1, "S7033C1", ABISELECT(80,72));

#else // __cplusplus

extern void _ZN7S7033C1C1Ev();
extern void _ZN7S7033C1D1Ev();
Name_Map name_map_S7033C1[] = {
  NSPAIR(_ZN7S7033C1C1Ev),
  NSPAIR(_ZN7S7033C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7033C2;
extern VTBL_ENTRY _ZTI7S7033C2[];
extern  VTBL_ENTRY _ZTV7S7033C2[];
static Base_Class bases_S7033C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7033C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7033C1[];
extern void _ZN7S7033C1D1Ev();
extern void _ZN7S7033C1D0Ev();
extern void _ZN7S7033C22v6Ev();
extern void _ZN7S7033C22v7Ev();
extern void _ZN7S7033C22v8Ev();
extern void _ZN7S7033C22v9Ev();
extern void _ZN7S7033C23v10Ev();
extern void _ZN7S7033C12v1Ev();
extern void _ZN7S7033C12v2Ev();
extern void _ZN7S7033C12v3Ev();
extern void _ZN7S7033C12v4Ev();
extern void _ZN7S7033C12v5Ev();
static  VTBL_ENTRY vtc_S7033C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7033C1[0]),
  (VTBL_ENTRY)&_ZN7S7033C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7033C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7033C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7033C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7033C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7033C1[];
extern  VTBL_ENTRY _ZTV7S7033C1[];
Class_Descriptor cd_S7033C1 = {  "S7033C1", // class name
  bases_S7033C1, 1,
  &(vtc_S7033C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,72), // object size
  NSPAIRA(_ZTI7S7033C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7033C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3347C3  {
  virtual  ~S3347C3(); // _ZN7S3347C3D1Ev
  virtual void  v6(); // _ZN7S3347C32v6Ev
  virtual void  v7(); // _ZN7S3347C32v7Ev
  virtual void  v8(); // _ZN7S3347C32v8Ev
  virtual void  v9(); // _ZN7S3347C32v9Ev
  virtual void  v10(); // _ZN7S3347C33v10Ev
  S3347C3(); // tgen
};
//SIG(-1 S3347C3) C1{ vd v1 v2 v3 v4 v5}


 S3347C3 ::~S3347C3(){ note_dtor("S3347C3", this);}
void  S3347C3 ::v6(){vfunc_called(this, "_ZN7S3347C32v6Ev");}
void  S3347C3 ::v7(){vfunc_called(this, "_ZN7S3347C32v7Ev");}
void  S3347C3 ::v8(){vfunc_called(this, "_ZN7S3347C32v8Ev");}
void  S3347C3 ::v9(){vfunc_called(this, "_ZN7S3347C32v9Ev");}
void  S3347C3 ::v10(){vfunc_called(this, "_ZN7S3347C33v10Ev");}
S3347C3 ::S3347C3(){ note_ctor("S3347C3", this);} // tgen

static void Test_S3347C3()
{
  extern Class_Descriptor cd_S3347C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3347C3, buf);
    S3347C3 *dp, &lv = *(dp=new (buf) S3347C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3347C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3347C3)");
    test_class_info(&lv, &cd_S3347C3);
    dp->~S3347C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3347C3(Test_S3347C3, "S3347C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3347C3C1Ev();
extern void _ZN7S3347C3D1Ev();
Name_Map name_map_S3347C3[] = {
  NSPAIR(_ZN7S3347C3C1Ev),
  NSPAIR(_ZN7S3347C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3347C3[];
extern void _ZN7S3347C3D1Ev();
extern void _ZN7S3347C3D0Ev();
extern void _ZN7S3347C32v6Ev();
extern void _ZN7S3347C32v7Ev();
extern void _ZN7S3347C32v8Ev();
extern void _ZN7S3347C32v9Ev();
extern void _ZN7S3347C33v10Ev();
static  VTBL_ENTRY vtc_S3347C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3347C3[0]),
  (VTBL_ENTRY)&_ZN7S3347C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3347C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3347C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3347C3[];
extern  VTBL_ENTRY _ZTV7S3347C3[];
Class_Descriptor cd_S3347C3 = {  "S3347C3", // class name
  0,0,//no base classes
  &(vtc_S3347C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3347C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3347C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3347C2  : S3347C3 {
  void *s3347c2f0;
  virtual  ~S3347C2(); // _ZN7S3347C2D1Ev
  S3347C2(); // tgen
};
//SIG(-1 S3347C2) C1{ BC2{ vd v1 v2 v3 v4 v5} vd Fp}


 S3347C2 ::~S3347C2(){ note_dtor("S3347C2", this);}
S3347C2 ::S3347C2(){ note_ctor("S3347C2", this);} // tgen

static void Test_S3347C2()
{
  extern Class_Descriptor cd_S3347C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3347C2, buf);
    S3347C2 *dp, &lv = *(dp=new (buf) S3347C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3347C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3347C2)");
    check_base_class_offset(lv, (S3347C3*), 0, "S3347C2");
    check_field_offset(lv, s3347c2f0, ABISELECT(8,4), "S3347C2.s3347c2f0");
    test_class_info(&lv, &cd_S3347C2);
    dp->~S3347C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3347C2(Test_S3347C2, "S3347C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3347C2C1Ev();
extern void _ZN7S3347C2D1Ev();
Name_Map name_map_S3347C2[] = {
  NSPAIR(_ZN7S3347C2C1Ev),
  NSPAIR(_ZN7S3347C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3347C3;
extern VTBL_ENTRY _ZTI7S3347C3[];
extern  VTBL_ENTRY _ZTV7S3347C3[];
static Base_Class bases_S3347C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3347C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3347C2[];
extern void _ZN7S3347C2D1Ev();
extern void _ZN7S3347C2D0Ev();
extern void _ZN7S3347C32v6Ev();
extern void _ZN7S3347C32v7Ev();
extern void _ZN7S3347C32v8Ev();
extern void _ZN7S3347C32v9Ev();
extern void _ZN7S3347C33v10Ev();
static  VTBL_ENTRY vtc_S3347C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3347C2[0]),
  (VTBL_ENTRY)&_ZN7S3347C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3347C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3347C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S3347C2[];
extern  VTBL_ENTRY _ZTV7S3347C2[];
Class_Descriptor cd_S3347C2 = {  "S3347C2", // class name
  bases_S3347C2, 1,
  &(vtc_S3347C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3347C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3347C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3347C1  : S3347C2 {
  virtual  ~S3347C1(); // _ZN7S3347C1D1Ev
  virtual void  v1(); // _ZN7S3347C12v1Ev
  virtual void  v2(); // _ZN7S3347C12v2Ev
  virtual void  v3(); // _ZN7S3347C12v3Ev
  virtual void  v4(); // _ZN7S3347C12v4Ev
  virtual void  v5(); // _ZN7S3347C12v5Ev
  S3347C1(); // tgen
};
//SIG(1 S3347C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10} vd Fp} vd v1 v2 v3 v4 v5}


 S3347C1 ::~S3347C1(){ note_dtor("S3347C1", this);}
void  S3347C1 ::v1(){vfunc_called(this, "_ZN7S3347C12v1Ev");}
void  S3347C1 ::v2(){vfunc_called(this, "_ZN7S3347C12v2Ev");}
void  S3347C1 ::v3(){vfunc_called(this, "_ZN7S3347C12v3Ev");}
void  S3347C1 ::v4(){vfunc_called(this, "_ZN7S3347C12v4Ev");}
void  S3347C1 ::v5(){vfunc_called(this, "_ZN7S3347C12v5Ev");}
S3347C1 ::S3347C1(){ note_ctor("S3347C1", this);} // tgen

static void Test_S3347C1()
{
  extern Class_Descriptor cd_S3347C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3347C1, buf);
    S3347C1 *dp, &lv = *(dp=new (buf) S3347C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3347C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3347C1)");
    check_base_class_offset(lv, (S3347C3*)(S3347C2*), 0, "S3347C1");
    check_base_class_offset(lv, (S3347C2*), 0, "S3347C1");
    test_class_info(&lv, &cd_S3347C1);
    dp->~S3347C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3347C1(Test_S3347C1, "S3347C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3347C1C1Ev();
extern void _ZN7S3347C1D1Ev();
Name_Map name_map_S3347C1[] = {
  NSPAIR(_ZN7S3347C1C1Ev),
  NSPAIR(_ZN7S3347C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3347C3;
extern VTBL_ENTRY _ZTI7S3347C3[];
extern  VTBL_ENTRY _ZTV7S3347C3[];
extern Class_Descriptor cd_S3347C2;
extern VTBL_ENTRY _ZTI7S3347C2[];
extern  VTBL_ENTRY _ZTV7S3347C2[];
static Base_Class bases_S3347C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3347C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3347C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3347C1[];
extern void _ZN7S3347C1D1Ev();
extern void _ZN7S3347C1D0Ev();
extern void _ZN7S3347C32v6Ev();
extern void _ZN7S3347C32v7Ev();
extern void _ZN7S3347C32v8Ev();
extern void _ZN7S3347C32v9Ev();
extern void _ZN7S3347C33v10Ev();
extern void _ZN7S3347C12v1Ev();
extern void _ZN7S3347C12v2Ev();
extern void _ZN7S3347C12v3Ev();
extern void _ZN7S3347C12v4Ev();
extern void _ZN7S3347C12v5Ev();
static  VTBL_ENTRY vtc_S3347C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3347C1[0]),
  (VTBL_ENTRY)&_ZN7S3347C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3347C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3347C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3347C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3347C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3347C1[];
extern  VTBL_ENTRY _ZTV7S3347C1[];
Class_Descriptor cd_S3347C1 = {  "S3347C1", // class name
  bases_S3347C1, 2,
  &(vtc_S3347C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3347C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3347C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10084C2  {
  virtual  ~S10084C2(); // _ZN8S10084C2D1Ev
  virtual void  v6(); // _ZN8S10084C22v6Ev
  virtual void  v7(); // _ZN8S10084C22v7Ev
  virtual void  v8(); // _ZN8S10084C22v8Ev
  virtual void  v9(); // _ZN8S10084C22v9Ev
  virtual void  v10(); // _ZN8S10084C23v10Ev
  S10084C2(); // tgen
};
//SIG(-1 S10084C2) C1{ vd v1 v2 v3 v4 v5}


 S10084C2 ::~S10084C2(){ note_dtor("S10084C2", this);}
void  S10084C2 ::v6(){vfunc_called(this, "_ZN8S10084C22v6Ev");}
void  S10084C2 ::v7(){vfunc_called(this, "_ZN8S10084C22v7Ev");}
void  S10084C2 ::v8(){vfunc_called(this, "_ZN8S10084C22v8Ev");}
void  S10084C2 ::v9(){vfunc_called(this, "_ZN8S10084C22v9Ev");}
void  S10084C2 ::v10(){vfunc_called(this, "_ZN8S10084C23v10Ev");}
S10084C2 ::S10084C2(){ note_ctor("S10084C2", this);} // tgen

static void Test_S10084C2()
{
  extern Class_Descriptor cd_S10084C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10084C2, buf);
    S10084C2 *dp, &lv = *(dp=new (buf) S10084C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10084C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10084C2)");
    test_class_info(&lv, &cd_S10084C2);
    dp->~S10084C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10084C2(Test_S10084C2, "S10084C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10084C2C1Ev();
extern void _ZN8S10084C2D1Ev();
Name_Map name_map_S10084C2[] = {
  NSPAIR(_ZN8S10084C2C1Ev),
  NSPAIR(_ZN8S10084C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10084C2[];
extern void _ZN8S10084C2D1Ev();
extern void _ZN8S10084C2D0Ev();
extern void _ZN8S10084C22v6Ev();
extern void _ZN8S10084C22v7Ev();
extern void _ZN8S10084C22v8Ev();
extern void _ZN8S10084C22v9Ev();
extern void _ZN8S10084C23v10Ev();
static  VTBL_ENTRY vtc_S10084C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10084C2[0]),
  (VTBL_ENTRY)&_ZN8S10084C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10084C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10084C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10084C2[];
extern  VTBL_ENTRY _ZTV8S10084C2[];
Class_Descriptor cd_S10084C2 = {  "S10084C2", // class name
  0,0,//no base classes
  &(vtc_S10084C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10084C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10084C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10084C1  : S10084C2 {
  void *s10084c1f0;
  int s10084c1f1;
  long s10084c1f2;
  virtual  ~S10084C1(); // _ZN8S10084C1D1Ev
  virtual void  v1(); // _ZN8S10084C12v1Ev
  virtual void  v2(); // _ZN8S10084C12v2Ev
  virtual void  v3(); // _ZN8S10084C12v3Ev
  virtual void  v4(); // _ZN8S10084C12v4Ev
  virtual void  v5(); // _ZN8S10084C12v5Ev
  S10084C1(); // tgen
};
//SIG(1 S10084C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp Fi Fl}


 S10084C1 ::~S10084C1(){ note_dtor("S10084C1", this);}
void  S10084C1 ::v1(){vfunc_called(this, "_ZN8S10084C12v1Ev");}
void  S10084C1 ::v2(){vfunc_called(this, "_ZN8S10084C12v2Ev");}
void  S10084C1 ::v3(){vfunc_called(this, "_ZN8S10084C12v3Ev");}
void  S10084C1 ::v4(){vfunc_called(this, "_ZN8S10084C12v4Ev");}
void  S10084C1 ::v5(){vfunc_called(this, "_ZN8S10084C12v5Ev");}
S10084C1 ::S10084C1(){ note_ctor("S10084C1", this);} // tgen

static void Test_S10084C1()
{
  extern Class_Descriptor cd_S10084C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S10084C1, buf);
    S10084C1 *dp, &lv = *(dp=new (buf) S10084C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S10084C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10084C1)");
    check_base_class_offset(lv, (S10084C2*), 0, "S10084C1");
    check_field_offset(lv, s10084c1f0, ABISELECT(8,4), "S10084C1.s10084c1f0");
    check_field_offset(lv, s10084c1f1, ABISELECT(16,8), "S10084C1.s10084c1f1");
    check_field_offset(lv, s10084c1f2, ABISELECT(24,12), "S10084C1.s10084c1f2");
    test_class_info(&lv, &cd_S10084C1);
    dp->~S10084C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10084C1(Test_S10084C1, "S10084C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S10084C1C1Ev();
extern void _ZN8S10084C1D1Ev();
Name_Map name_map_S10084C1[] = {
  NSPAIR(_ZN8S10084C1C1Ev),
  NSPAIR(_ZN8S10084C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10084C2;
extern VTBL_ENTRY _ZTI8S10084C2[];
extern  VTBL_ENTRY _ZTV8S10084C2[];
static Base_Class bases_S10084C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10084C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10084C1[];
extern void _ZN8S10084C1D1Ev();
extern void _ZN8S10084C1D0Ev();
extern void _ZN8S10084C22v6Ev();
extern void _ZN8S10084C22v7Ev();
extern void _ZN8S10084C22v8Ev();
extern void _ZN8S10084C22v9Ev();
extern void _ZN8S10084C23v10Ev();
extern void _ZN8S10084C12v1Ev();
extern void _ZN8S10084C12v2Ev();
extern void _ZN8S10084C12v3Ev();
extern void _ZN8S10084C12v4Ev();
extern void _ZN8S10084C12v5Ev();
static  VTBL_ENTRY vtc_S10084C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10084C1[0]),
  (VTBL_ENTRY)&_ZN8S10084C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10084C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10084C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10084C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10084C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10084C1[];
extern  VTBL_ENTRY _ZTV8S10084C1[];
Class_Descriptor cd_S10084C1 = {  "S10084C1", // class name
  bases_S10084C1, 1,
  &(vtc_S10084C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S10084C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10084C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9938C2  {
  virtual  ~S9938C2(); // _ZN7S9938C2D1Ev
  virtual void  v5(); // _ZN7S9938C22v5Ev
  virtual void  v6(); // _ZN7S9938C22v6Ev
  virtual void  v7(); // _ZN7S9938C22v7Ev
  virtual void  v8(); // _ZN7S9938C22v8Ev
  virtual void  v9(); // _ZN7S9938C22v9Ev
  S9938C2(); // tgen
};
//SIG(-1 S9938C2) C1{ vd v1 v2 v3 v4 v5}


 S9938C2 ::~S9938C2(){ note_dtor("S9938C2", this);}
void  S9938C2 ::v5(){vfunc_called(this, "_ZN7S9938C22v5Ev");}
void  S9938C2 ::v6(){vfunc_called(this, "_ZN7S9938C22v6Ev");}
void  S9938C2 ::v7(){vfunc_called(this, "_ZN7S9938C22v7Ev");}
void  S9938C2 ::v8(){vfunc_called(this, "_ZN7S9938C22v8Ev");}
void  S9938C2 ::v9(){vfunc_called(this, "_ZN7S9938C22v9Ev");}
S9938C2 ::S9938C2(){ note_ctor("S9938C2", this);} // tgen

static void Test_S9938C2()
{
  extern Class_Descriptor cd_S9938C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9938C2, buf);
    S9938C2 *dp, &lv = *(dp=new (buf) S9938C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9938C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9938C2)");
    test_class_info(&lv, &cd_S9938C2);
    dp->~S9938C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9938C2(Test_S9938C2, "S9938C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9938C2C1Ev();
extern void _ZN7S9938C2D1Ev();
Name_Map name_map_S9938C2[] = {
  NSPAIR(_ZN7S9938C2C1Ev),
  NSPAIR(_ZN7S9938C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9938C2[];
extern void _ZN7S9938C2D1Ev();
extern void _ZN7S9938C2D0Ev();
extern void _ZN7S9938C22v5Ev();
extern void _ZN7S9938C22v6Ev();
extern void _ZN7S9938C22v7Ev();
extern void _ZN7S9938C22v8Ev();
extern void _ZN7S9938C22v9Ev();
static  VTBL_ENTRY vtc_S9938C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9938C2[0]),
  (VTBL_ENTRY)&_ZN7S9938C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9938C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9938C2[];
extern  VTBL_ENTRY _ZTV7S9938C2[];
Class_Descriptor cd_S9938C2 = {  "S9938C2", // class name
  0,0,//no base classes
  &(vtc_S9938C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9938C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9938C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9938C1  : S9938C2 {
  int s9938c1f0[4];
  char s9938c1f1[2];
  int s9938c1f2;
  virtual void  v1(); // _ZN7S9938C12v1Ev
  virtual void  v2(); // _ZN7S9938C12v2Ev
  virtual void  v3(); // _ZN7S9938C12v3Ev
  virtual void  v4(); // _ZN7S9938C12v4Ev
  ~S9938C1(); // tgen
  S9938C1(); // tgen
};
//SIG(1 S9938C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[4] Fc[2] Fi}


void  S9938C1 ::v1(){vfunc_called(this, "_ZN7S9938C12v1Ev");}
void  S9938C1 ::v2(){vfunc_called(this, "_ZN7S9938C12v2Ev");}
void  S9938C1 ::v3(){vfunc_called(this, "_ZN7S9938C12v3Ev");}
void  S9938C1 ::v4(){vfunc_called(this, "_ZN7S9938C12v4Ev");}
S9938C1 ::~S9938C1(){ note_dtor("S9938C1", this);} // tgen
S9938C1 ::S9938C1(){ note_ctor("S9938C1", this);} // tgen

static void Test_S9938C1()
{
  extern Class_Descriptor cd_S9938C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S9938C1, buf);
    S9938C1 *dp, &lv = *(dp=new (buf) S9938C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S9938C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9938C1)");
    check_base_class_offset(lv, (S9938C2*), 0, "S9938C1");
    check_field_offset(lv, s9938c1f0, ABISELECT(8,4), "S9938C1.s9938c1f0");
    check_field_offset(lv, s9938c1f1, ABISELECT(24,20), "S9938C1.s9938c1f1");
    check_field_offset(lv, s9938c1f2, ABISELECT(28,24), "S9938C1.s9938c1f2");
    test_class_info(&lv, &cd_S9938C1);
    dp->~S9938C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9938C1(Test_S9938C1, "S9938C1", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN7S9938C1C1Ev();
extern void _ZN7S9938C1D1Ev();
Name_Map name_map_S9938C1[] = {
  NSPAIR(_ZN7S9938C1C1Ev),
  NSPAIR(_ZN7S9938C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9938C2;
extern VTBL_ENTRY _ZTI7S9938C2[];
extern  VTBL_ENTRY _ZTV7S9938C2[];
static Base_Class bases_S9938C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9938C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9938C1[];
extern void _ZN7S9938C1D1Ev();
extern void _ZN7S9938C1D0Ev();
extern void _ZN7S9938C22v5Ev();
extern void _ZN7S9938C22v6Ev();
extern void _ZN7S9938C22v7Ev();
extern void _ZN7S9938C22v8Ev();
extern void _ZN7S9938C22v9Ev();
extern void _ZN7S9938C12v1Ev();
extern void _ZN7S9938C12v2Ev();
extern void _ZN7S9938C12v3Ev();
extern void _ZN7S9938C12v4Ev();
static  VTBL_ENTRY vtc_S9938C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9938C1[0]),
  (VTBL_ENTRY)&_ZN7S9938C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9938C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9938C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9938C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9938C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9938C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9938C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9938C1[];
extern  VTBL_ENTRY _ZTV7S9938C1[];
Class_Descriptor cd_S9938C1 = {  "S9938C1", // class name
  bases_S9938C1, 1,
  &(vtc_S9938C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI7S9938C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9938C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9932C2  {
  virtual  ~S9932C2(); // _ZN7S9932C2D1Ev
  virtual void  v5(); // _ZN7S9932C22v5Ev
  virtual void  v6(); // _ZN7S9932C22v6Ev
  virtual void  v7(); // _ZN7S9932C22v7Ev
  virtual void  v8(); // _ZN7S9932C22v8Ev
  virtual void  v9(); // _ZN7S9932C22v9Ev
  S9932C2(); // tgen
};
//SIG(-1 S9932C2) C1{ vd v1 v2 v3 v4 v5}


 S9932C2 ::~S9932C2(){ note_dtor("S9932C2", this);}
void  S9932C2 ::v5(){vfunc_called(this, "_ZN7S9932C22v5Ev");}
void  S9932C2 ::v6(){vfunc_called(this, "_ZN7S9932C22v6Ev");}
void  S9932C2 ::v7(){vfunc_called(this, "_ZN7S9932C22v7Ev");}
void  S9932C2 ::v8(){vfunc_called(this, "_ZN7S9932C22v8Ev");}
void  S9932C2 ::v9(){vfunc_called(this, "_ZN7S9932C22v9Ev");}
S9932C2 ::S9932C2(){ note_ctor("S9932C2", this);} // tgen

static void Test_S9932C2()
{
  extern Class_Descriptor cd_S9932C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9932C2, buf);
    S9932C2 *dp, &lv = *(dp=new (buf) S9932C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9932C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9932C2)");
    test_class_info(&lv, &cd_S9932C2);
    dp->~S9932C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9932C2(Test_S9932C2, "S9932C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9932C2C1Ev();
extern void _ZN7S9932C2D1Ev();
Name_Map name_map_S9932C2[] = {
  NSPAIR(_ZN7S9932C2C1Ev),
  NSPAIR(_ZN7S9932C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9932C2[];
extern void _ZN7S9932C2D1Ev();
extern void _ZN7S9932C2D0Ev();
extern void _ZN7S9932C22v5Ev();
extern void _ZN7S9932C22v6Ev();
extern void _ZN7S9932C22v7Ev();
extern void _ZN7S9932C22v8Ev();
extern void _ZN7S9932C22v9Ev();
static  VTBL_ENTRY vtc_S9932C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9932C2[0]),
  (VTBL_ENTRY)&_ZN7S9932C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9932C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9932C2[];
extern  VTBL_ENTRY _ZTV7S9932C2[];
Class_Descriptor cd_S9932C2 = {  "S9932C2", // class name
  0,0,//no base classes
  &(vtc_S9932C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9932C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9932C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9932C1  : S9932C2 {
  int s9932c1f0[2];
  char s9932c1f1[2];
  int s9932c1f2;
  virtual void  v1(); // _ZN7S9932C12v1Ev
  virtual void  v2(); // _ZN7S9932C12v2Ev
  virtual void  v3(); // _ZN7S9932C12v3Ev
  virtual void  v4(); // _ZN7S9932C12v4Ev
  ~S9932C1(); // tgen
  S9932C1(); // tgen
};
//SIG(1 S9932C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4 Fi[2] Fc[2] Fi}


void  S9932C1 ::v1(){vfunc_called(this, "_ZN7S9932C12v1Ev");}
void  S9932C1 ::v2(){vfunc_called(this, "_ZN7S9932C12v2Ev");}
void  S9932C1 ::v3(){vfunc_called(this, "_ZN7S9932C12v3Ev");}
void  S9932C1 ::v4(){vfunc_called(this, "_ZN7S9932C12v4Ev");}
S9932C1 ::~S9932C1(){ note_dtor("S9932C1", this);} // tgen
S9932C1 ::S9932C1(){ note_ctor("S9932C1", this);} // tgen

static void Test_S9932C1()
{
  extern Class_Descriptor cd_S9932C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S9932C1, buf);
    S9932C1 *dp, &lv = *(dp=new (buf) S9932C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S9932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9932C1)");
    check_base_class_offset(lv, (S9932C2*), 0, "S9932C1");
    check_field_offset(lv, s9932c1f0, ABISELECT(8,4), "S9932C1.s9932c1f0");
    check_field_offset(lv, s9932c1f1, ABISELECT(16,12), "S9932C1.s9932c1f1");
    check_field_offset(lv, s9932c1f2, ABISELECT(20,16), "S9932C1.s9932c1f2");
    test_class_info(&lv, &cd_S9932C1);
    dp->~S9932C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9932C1(Test_S9932C1, "S9932C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S9932C1C1Ev();
extern void _ZN7S9932C1D1Ev();
Name_Map name_map_S9932C1[] = {
  NSPAIR(_ZN7S9932C1C1Ev),
  NSPAIR(_ZN7S9932C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9932C2;
extern VTBL_ENTRY _ZTI7S9932C2[];
extern  VTBL_ENTRY _ZTV7S9932C2[];
static Base_Class bases_S9932C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9932C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9932C1[];
extern void _ZN7S9932C1D1Ev();
extern void _ZN7S9932C1D0Ev();
extern void _ZN7S9932C22v5Ev();
extern void _ZN7S9932C22v6Ev();
extern void _ZN7S9932C22v7Ev();
extern void _ZN7S9932C22v8Ev();
extern void _ZN7S9932C22v9Ev();
extern void _ZN7S9932C12v1Ev();
extern void _ZN7S9932C12v2Ev();
extern void _ZN7S9932C12v3Ev();
extern void _ZN7S9932C12v4Ev();
static  VTBL_ENTRY vtc_S9932C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9932C1[0]),
  (VTBL_ENTRY)&_ZN7S9932C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9932C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9932C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9932C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9932C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9932C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9932C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9932C1[];
extern  VTBL_ENTRY _ZTV7S9932C1[];
Class_Descriptor cd_S9932C1 = {  "S9932C1", // class name
  bases_S9932C1, 1,
  &(vtc_S9932C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S9932C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9932C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10086C2  {
  virtual  ~S10086C2(); // _ZN8S10086C2D1Ev
  virtual void  v6(); // _ZN8S10086C22v6Ev
  virtual void  v7(); // _ZN8S10086C22v7Ev
  virtual void  v8(); // _ZN8S10086C22v8Ev
  virtual void  v9(); // _ZN8S10086C22v9Ev
  virtual void  v10(); // _ZN8S10086C23v10Ev
  S10086C2(); // tgen
};
//SIG(-1 S10086C2) C1{ vd v1 v2 v3 v4 v5}


 S10086C2 ::~S10086C2(){ note_dtor("S10086C2", this);}
void  S10086C2 ::v6(){vfunc_called(this, "_ZN8S10086C22v6Ev");}
void  S10086C2 ::v7(){vfunc_called(this, "_ZN8S10086C22v7Ev");}
void  S10086C2 ::v8(){vfunc_called(this, "_ZN8S10086C22v8Ev");}
void  S10086C2 ::v9(){vfunc_called(this, "_ZN8S10086C22v9Ev");}
void  S10086C2 ::v10(){vfunc_called(this, "_ZN8S10086C23v10Ev");}
S10086C2 ::S10086C2(){ note_ctor("S10086C2", this);} // tgen

static void Test_S10086C2()
{
  extern Class_Descriptor cd_S10086C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10086C2, buf);
    S10086C2 *dp, &lv = *(dp=new (buf) S10086C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10086C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10086C2)");
    test_class_info(&lv, &cd_S10086C2);
    dp->~S10086C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10086C2(Test_S10086C2, "S10086C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10086C2C1Ev();
extern void _ZN8S10086C2D1Ev();
Name_Map name_map_S10086C2[] = {
  NSPAIR(_ZN8S10086C2C1Ev),
  NSPAIR(_ZN8S10086C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10086C2[];
extern void _ZN8S10086C2D1Ev();
extern void _ZN8S10086C2D0Ev();
extern void _ZN8S10086C22v6Ev();
extern void _ZN8S10086C22v7Ev();
extern void _ZN8S10086C22v8Ev();
extern void _ZN8S10086C22v9Ev();
extern void _ZN8S10086C23v10Ev();
static  VTBL_ENTRY vtc_S10086C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10086C2[0]),
  (VTBL_ENTRY)&_ZN8S10086C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10086C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10086C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10086C2[];
extern  VTBL_ENTRY _ZTV8S10086C2[];
Class_Descriptor cd_S10086C2 = {  "S10086C2", // class name
  0,0,//no base classes
  &(vtc_S10086C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10086C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10086C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10086C1  : S10086C2 {
  void *s10086c1f0[15];
  virtual  ~S10086C1(); // _ZN8S10086C1D1Ev
  virtual void  v1(); // _ZN8S10086C12v1Ev
  virtual void  v2(); // _ZN8S10086C12v2Ev
  virtual void  v3(); // _ZN8S10086C12v3Ev
  virtual void  v4(); // _ZN8S10086C12v4Ev
  virtual void  v5(); // _ZN8S10086C12v5Ev
  S10086C1(); // tgen
};
//SIG(1 S10086C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[15]}


 S10086C1 ::~S10086C1(){ note_dtor("S10086C1", this);}
void  S10086C1 ::v1(){vfunc_called(this, "_ZN8S10086C12v1Ev");}
void  S10086C1 ::v2(){vfunc_called(this, "_ZN8S10086C12v2Ev");}
void  S10086C1 ::v3(){vfunc_called(this, "_ZN8S10086C12v3Ev");}
void  S10086C1 ::v4(){vfunc_called(this, "_ZN8S10086C12v4Ev");}
void  S10086C1 ::v5(){vfunc_called(this, "_ZN8S10086C12v5Ev");}
S10086C1 ::S10086C1(){ note_ctor("S10086C1", this);} // tgen

static void Test_S10086C1()
{
  extern Class_Descriptor cd_S10086C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S10086C1, buf);
    S10086C1 *dp, &lv = *(dp=new (buf) S10086C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S10086C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10086C1)");
    check_base_class_offset(lv, (S10086C2*), 0, "S10086C1");
    check_field_offset(lv, s10086c1f0, ABISELECT(8,4), "S10086C1.s10086c1f0");
    test_class_info(&lv, &cd_S10086C1);
    dp->~S10086C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10086C1(Test_S10086C1, "S10086C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S10086C1C1Ev();
extern void _ZN8S10086C1D1Ev();
Name_Map name_map_S10086C1[] = {
  NSPAIR(_ZN8S10086C1C1Ev),
  NSPAIR(_ZN8S10086C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10086C2;
extern VTBL_ENTRY _ZTI8S10086C2[];
extern  VTBL_ENTRY _ZTV8S10086C2[];
static Base_Class bases_S10086C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10086C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10086C1[];
extern void _ZN8S10086C1D1Ev();
extern void _ZN8S10086C1D0Ev();
extern void _ZN8S10086C22v6Ev();
extern void _ZN8S10086C22v7Ev();
extern void _ZN8S10086C22v8Ev();
extern void _ZN8S10086C22v9Ev();
extern void _ZN8S10086C23v10Ev();
extern void _ZN8S10086C12v1Ev();
extern void _ZN8S10086C12v2Ev();
extern void _ZN8S10086C12v3Ev();
extern void _ZN8S10086C12v4Ev();
extern void _ZN8S10086C12v5Ev();
static  VTBL_ENTRY vtc_S10086C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10086C1[0]),
  (VTBL_ENTRY)&_ZN8S10086C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10086C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10086C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10086C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10086C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10086C1[];
extern  VTBL_ENTRY _ZTV8S10086C1[];
Class_Descriptor cd_S10086C1 = {  "S10086C1", // class name
  bases_S10086C1, 1,
  &(vtc_S10086C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S10086C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10086C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10087C2  {
  virtual  ~S10087C2(); // _ZN8S10087C2D1Ev
  virtual void  v6(); // _ZN8S10087C22v6Ev
  virtual void  v7(); // _ZN8S10087C22v7Ev
  virtual void  v8(); // _ZN8S10087C22v8Ev
  virtual void  v9(); // _ZN8S10087C22v9Ev
  virtual void  v10(); // _ZN8S10087C23v10Ev
  S10087C2(); // tgen
};
//SIG(-1 S10087C2) C1{ vd v1 v2 v3 v4 v5}


 S10087C2 ::~S10087C2(){ note_dtor("S10087C2", this);}
void  S10087C2 ::v6(){vfunc_called(this, "_ZN8S10087C22v6Ev");}
void  S10087C2 ::v7(){vfunc_called(this, "_ZN8S10087C22v7Ev");}
void  S10087C2 ::v8(){vfunc_called(this, "_ZN8S10087C22v8Ev");}
void  S10087C2 ::v9(){vfunc_called(this, "_ZN8S10087C22v9Ev");}
void  S10087C2 ::v10(){vfunc_called(this, "_ZN8S10087C23v10Ev");}
S10087C2 ::S10087C2(){ note_ctor("S10087C2", this);} // tgen

static void Test_S10087C2()
{
  extern Class_Descriptor cd_S10087C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10087C2, buf);
    S10087C2 *dp, &lv = *(dp=new (buf) S10087C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10087C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10087C2)");
    test_class_info(&lv, &cd_S10087C2);
    dp->~S10087C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10087C2(Test_S10087C2, "S10087C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10087C2C1Ev();
extern void _ZN8S10087C2D1Ev();
Name_Map name_map_S10087C2[] = {
  NSPAIR(_ZN8S10087C2C1Ev),
  NSPAIR(_ZN8S10087C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10087C2[];
extern void _ZN8S10087C2D1Ev();
extern void _ZN8S10087C2D0Ev();
extern void _ZN8S10087C22v6Ev();
extern void _ZN8S10087C22v7Ev();
extern void _ZN8S10087C22v8Ev();
extern void _ZN8S10087C22v9Ev();
extern void _ZN8S10087C23v10Ev();
static  VTBL_ENTRY vtc_S10087C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10087C2[0]),
  (VTBL_ENTRY)&_ZN8S10087C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10087C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10087C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10087C2[];
extern  VTBL_ENTRY _ZTV8S10087C2[];
Class_Descriptor cd_S10087C2 = {  "S10087C2", // class name
  0,0,//no base classes
  &(vtc_S10087C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10087C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10087C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10087C1  : S10087C2 {
  void *s10087c1f0[2];
  virtual  ~S10087C1(); // _ZN8S10087C1D1Ev
  virtual void  v1(); // _ZN8S10087C12v1Ev
  virtual void  v2(); // _ZN8S10087C12v2Ev
  virtual void  v3(); // _ZN8S10087C12v3Ev
  virtual void  v4(); // _ZN8S10087C12v4Ev
  virtual void  v5(); // _ZN8S10087C12v5Ev
  S10087C1(); // tgen
};
//SIG(1 S10087C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp[2]}


 S10087C1 ::~S10087C1(){ note_dtor("S10087C1", this);}
void  S10087C1 ::v1(){vfunc_called(this, "_ZN8S10087C12v1Ev");}
void  S10087C1 ::v2(){vfunc_called(this, "_ZN8S10087C12v2Ev");}
void  S10087C1 ::v3(){vfunc_called(this, "_ZN8S10087C12v3Ev");}
void  S10087C1 ::v4(){vfunc_called(this, "_ZN8S10087C12v4Ev");}
void  S10087C1 ::v5(){vfunc_called(this, "_ZN8S10087C12v5Ev");}
S10087C1 ::S10087C1(){ note_ctor("S10087C1", this);} // tgen

static void Test_S10087C1()
{
  extern Class_Descriptor cd_S10087C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10087C1, buf);
    S10087C1 *dp, &lv = *(dp=new (buf) S10087C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10087C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10087C1)");
    check_base_class_offset(lv, (S10087C2*), 0, "S10087C1");
    check_field_offset(lv, s10087c1f0, ABISELECT(8,4), "S10087C1.s10087c1f0");
    test_class_info(&lv, &cd_S10087C1);
    dp->~S10087C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10087C1(Test_S10087C1, "S10087C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10087C1C1Ev();
extern void _ZN8S10087C1D1Ev();
Name_Map name_map_S10087C1[] = {
  NSPAIR(_ZN8S10087C1C1Ev),
  NSPAIR(_ZN8S10087C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10087C2;
extern VTBL_ENTRY _ZTI8S10087C2[];
extern  VTBL_ENTRY _ZTV8S10087C2[];
static Base_Class bases_S10087C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10087C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10087C1[];
extern void _ZN8S10087C1D1Ev();
extern void _ZN8S10087C1D0Ev();
extern void _ZN8S10087C22v6Ev();
extern void _ZN8S10087C22v7Ev();
extern void _ZN8S10087C22v8Ev();
extern void _ZN8S10087C22v9Ev();
extern void _ZN8S10087C23v10Ev();
extern void _ZN8S10087C12v1Ev();
extern void _ZN8S10087C12v2Ev();
extern void _ZN8S10087C12v3Ev();
extern void _ZN8S10087C12v4Ev();
extern void _ZN8S10087C12v5Ev();
static  VTBL_ENTRY vtc_S10087C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10087C1[0]),
  (VTBL_ENTRY)&_ZN8S10087C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10087C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10087C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10087C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10087C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10087C1[];
extern  VTBL_ENTRY _ZTV8S10087C1[];
Class_Descriptor cd_S10087C1 = {  "S10087C1", // class name
  bases_S10087C1, 1,
  &(vtc_S10087C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10087C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10087C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10085C2  {
  virtual  ~S10085C2(); // _ZN8S10085C2D1Ev
  virtual void  v6(); // _ZN8S10085C22v6Ev
  virtual void  v7(); // _ZN8S10085C22v7Ev
  virtual void  v8(); // _ZN8S10085C22v8Ev
  virtual void  v9(); // _ZN8S10085C22v9Ev
  virtual void  v10(); // _ZN8S10085C23v10Ev
  S10085C2(); // tgen
};
//SIG(-1 S10085C2) C1{ vd v1 v2 v3 v4 v5}


 S10085C2 ::~S10085C2(){ note_dtor("S10085C2", this);}
void  S10085C2 ::v6(){vfunc_called(this, "_ZN8S10085C22v6Ev");}
void  S10085C2 ::v7(){vfunc_called(this, "_ZN8S10085C22v7Ev");}
void  S10085C2 ::v8(){vfunc_called(this, "_ZN8S10085C22v8Ev");}
void  S10085C2 ::v9(){vfunc_called(this, "_ZN8S10085C22v9Ev");}
void  S10085C2 ::v10(){vfunc_called(this, "_ZN8S10085C23v10Ev");}
S10085C2 ::S10085C2(){ note_ctor("S10085C2", this);} // tgen

static void Test_S10085C2()
{
  extern Class_Descriptor cd_S10085C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10085C2, buf);
    S10085C2 *dp, &lv = *(dp=new (buf) S10085C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10085C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10085C2)");
    test_class_info(&lv, &cd_S10085C2);
    dp->~S10085C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10085C2(Test_S10085C2, "S10085C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10085C2C1Ev();
extern void _ZN8S10085C2D1Ev();
Name_Map name_map_S10085C2[] = {
  NSPAIR(_ZN8S10085C2C1Ev),
  NSPAIR(_ZN8S10085C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10085C2[];
extern void _ZN8S10085C2D1Ev();
extern void _ZN8S10085C2D0Ev();
extern void _ZN8S10085C22v6Ev();
extern void _ZN8S10085C22v7Ev();
extern void _ZN8S10085C22v8Ev();
extern void _ZN8S10085C22v9Ev();
extern void _ZN8S10085C23v10Ev();
static  VTBL_ENTRY vtc_S10085C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10085C2[0]),
  (VTBL_ENTRY)&_ZN8S10085C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10085C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10085C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10085C2[];
extern  VTBL_ENTRY _ZTV8S10085C2[];
Class_Descriptor cd_S10085C2 = {  "S10085C2", // class name
  0,0,//no base classes
  &(vtc_S10085C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10085C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10085C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10085C1  : S10085C2 {
  void *s10085c1f0;
  int s10085c1f1;
  virtual  ~S10085C1(); // _ZN8S10085C1D1Ev
  virtual void  v1(); // _ZN8S10085C12v1Ev
  virtual void  v2(); // _ZN8S10085C12v2Ev
  virtual void  v3(); // _ZN8S10085C12v3Ev
  virtual void  v4(); // _ZN8S10085C12v4Ev
  virtual void  v5(); // _ZN8S10085C12v5Ev
  S10085C1(); // tgen
};
//SIG(1 S10085C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp Fi}


 S10085C1 ::~S10085C1(){ note_dtor("S10085C1", this);}
void  S10085C1 ::v1(){vfunc_called(this, "_ZN8S10085C12v1Ev");}
void  S10085C1 ::v2(){vfunc_called(this, "_ZN8S10085C12v2Ev");}
void  S10085C1 ::v3(){vfunc_called(this, "_ZN8S10085C12v3Ev");}
void  S10085C1 ::v4(){vfunc_called(this, "_ZN8S10085C12v4Ev");}
void  S10085C1 ::v5(){vfunc_called(this, "_ZN8S10085C12v5Ev");}
S10085C1 ::S10085C1(){ note_ctor("S10085C1", this);} // tgen

static void Test_S10085C1()
{
  extern Class_Descriptor cd_S10085C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S10085C1, buf);
    S10085C1 *dp, &lv = *(dp=new (buf) S10085C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10085C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10085C1)");
    check_base_class_offset(lv, (S10085C2*), 0, "S10085C1");
    check_field_offset(lv, s10085c1f0, ABISELECT(8,4), "S10085C1.s10085c1f0");
    check_field_offset(lv, s10085c1f1, ABISELECT(16,8), "S10085C1.s10085c1f1");
    test_class_info(&lv, &cd_S10085C1);
    dp->~S10085C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10085C1(Test_S10085C1, "S10085C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S10085C1C1Ev();
extern void _ZN8S10085C1D1Ev();
Name_Map name_map_S10085C1[] = {
  NSPAIR(_ZN8S10085C1C1Ev),
  NSPAIR(_ZN8S10085C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10085C2;
extern VTBL_ENTRY _ZTI8S10085C2[];
extern  VTBL_ENTRY _ZTV8S10085C2[];
static Base_Class bases_S10085C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10085C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10085C1[];
extern void _ZN8S10085C1D1Ev();
extern void _ZN8S10085C1D0Ev();
extern void _ZN8S10085C22v6Ev();
extern void _ZN8S10085C22v7Ev();
extern void _ZN8S10085C22v8Ev();
extern void _ZN8S10085C22v9Ev();
extern void _ZN8S10085C23v10Ev();
extern void _ZN8S10085C12v1Ev();
extern void _ZN8S10085C12v2Ev();
extern void _ZN8S10085C12v3Ev();
extern void _ZN8S10085C12v4Ev();
extern void _ZN8S10085C12v5Ev();
static  VTBL_ENTRY vtc_S10085C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10085C1[0]),
  (VTBL_ENTRY)&_ZN8S10085C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10085C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10085C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10085C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10085C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10085C1[];
extern  VTBL_ENTRY _ZTV8S10085C1[];
Class_Descriptor cd_S10085C1 = {  "S10085C1", // class name
  bases_S10085C1, 1,
  &(vtc_S10085C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S10085C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10085C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5271C3  {
  virtual  ~S5271C3(); // _ZN7S5271C3D1Ev
  virtual void  v5(); // _ZN7S5271C32v5Ev
  virtual void  v6(); // _ZN7S5271C32v6Ev
  virtual void  v7(); // _ZN7S5271C32v7Ev
  virtual void  v8(); // _ZN7S5271C32v8Ev
  virtual void  v9(); // _ZN7S5271C32v9Ev
  S5271C3(); // tgen
};
//SIG(-1 S5271C3) C1{ vd v1 v2 v3 v4 v5}


 S5271C3 ::~S5271C3(){ note_dtor("S5271C3", this);}
void  S5271C3 ::v5(){vfunc_called(this, "_ZN7S5271C32v5Ev");}
void  S5271C3 ::v6(){vfunc_called(this, "_ZN7S5271C32v6Ev");}
void  S5271C3 ::v7(){vfunc_called(this, "_ZN7S5271C32v7Ev");}
void  S5271C3 ::v8(){vfunc_called(this, "_ZN7S5271C32v8Ev");}
void  S5271C3 ::v9(){vfunc_called(this, "_ZN7S5271C32v9Ev");}
S5271C3 ::S5271C3(){ note_ctor("S5271C3", this);} // tgen

static void Test_S5271C3()
{
  extern Class_Descriptor cd_S5271C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5271C3, buf);
    S5271C3 *dp, &lv = *(dp=new (buf) S5271C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5271C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5271C3)");
    test_class_info(&lv, &cd_S5271C3);
    dp->~S5271C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5271C3(Test_S5271C3, "S5271C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5271C3C1Ev();
extern void _ZN7S5271C3D1Ev();
Name_Map name_map_S5271C3[] = {
  NSPAIR(_ZN7S5271C3C1Ev),
  NSPAIR(_ZN7S5271C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5271C3[];
extern void _ZN7S5271C3D1Ev();
extern void _ZN7S5271C3D0Ev();
extern void _ZN7S5271C32v5Ev();
extern void _ZN7S5271C32v6Ev();
extern void _ZN7S5271C32v7Ev();
extern void _ZN7S5271C32v8Ev();
extern void _ZN7S5271C32v9Ev();
static  VTBL_ENTRY vtc_S5271C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5271C3[0]),
  (VTBL_ENTRY)&_ZN7S5271C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5271C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5271C3[];
extern  VTBL_ENTRY _ZTV7S5271C3[];
Class_Descriptor cd_S5271C3 = {  "S5271C3", // class name
  0,0,//no base classes
  &(vtc_S5271C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5271C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5271C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5271C2  : S5271C3 {
  void *s5271c2f0[2];
  ~S5271C2(); // tgen
  S5271C2(); // tgen
};
//SIG(-1 S5271C2) C1{ BC2{ vd v1 v2 v3 v4 v5} Fp[2]}


S5271C2 ::~S5271C2(){ note_dtor("S5271C2", this);} // tgen
S5271C2 ::S5271C2(){ note_ctor("S5271C2", this);} // tgen

static void Test_S5271C2()
{
  extern Class_Descriptor cd_S5271C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5271C2, buf);
    S5271C2 *dp, &lv = *(dp=new (buf) S5271C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5271C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5271C2)");
    check_base_class_offset(lv, (S5271C3*), 0, "S5271C2");
    check_field_offset(lv, s5271c2f0, ABISELECT(8,4), "S5271C2.s5271c2f0");
    test_class_info(&lv, &cd_S5271C2);
    dp->~S5271C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5271C2(Test_S5271C2, "S5271C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S5271C2C1Ev();
extern void _ZN7S5271C2D1Ev();
Name_Map name_map_S5271C2[] = {
  NSPAIR(_ZN7S5271C2C1Ev),
  NSPAIR(_ZN7S5271C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5271C3;
extern VTBL_ENTRY _ZTI7S5271C3[];
extern  VTBL_ENTRY _ZTV7S5271C3[];
static Base_Class bases_S5271C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5271C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5271C2[];
extern void _ZN7S5271C2D1Ev();
extern void _ZN7S5271C2D0Ev();
extern void _ZN7S5271C32v5Ev();
extern void _ZN7S5271C32v6Ev();
extern void _ZN7S5271C32v7Ev();
extern void _ZN7S5271C32v8Ev();
extern void _ZN7S5271C32v9Ev();
static  VTBL_ENTRY vtc_S5271C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5271C2[0]),
  (VTBL_ENTRY)&_ZN7S5271C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5271C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5271C2[];
extern  VTBL_ENTRY _ZTV7S5271C2[];
Class_Descriptor cd_S5271C2 = {  "S5271C2", // class name
  bases_S5271C2, 1,
  &(vtc_S5271C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S5271C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5271C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5271C1  : S5271C2 {
  int s5271c1f0;
  virtual void  v1(); // _ZN7S5271C12v1Ev
  virtual void  v2(); // _ZN7S5271C12v2Ev
  virtual void  v3(); // _ZN7S5271C12v3Ev
  virtual void  v4(); // _ZN7S5271C12v4Ev
  ~S5271C1(); // tgen
  S5271C1(); // tgen
};
//SIG(1 S5271C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9} Fp[2]} v1 v2 v3 v4 Fi}


void  S5271C1 ::v1(){vfunc_called(this, "_ZN7S5271C12v1Ev");}
void  S5271C1 ::v2(){vfunc_called(this, "_ZN7S5271C12v2Ev");}
void  S5271C1 ::v3(){vfunc_called(this, "_ZN7S5271C12v3Ev");}
void  S5271C1 ::v4(){vfunc_called(this, "_ZN7S5271C12v4Ev");}
S5271C1 ::~S5271C1(){ note_dtor("S5271C1", this);} // tgen
S5271C1 ::S5271C1(){ note_ctor("S5271C1", this);} // tgen

static void Test_S5271C1()
{
  extern Class_Descriptor cd_S5271C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5271C1, buf);
    S5271C1 *dp, &lv = *(dp=new (buf) S5271C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5271C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5271C1)");
    check_base_class_offset(lv, (S5271C3*)(S5271C2*), 0, "S5271C1");
    check_base_class_offset(lv, (S5271C2*), 0, "S5271C1");
    check_field_offset(lv, s5271c1f0, ABISELECT(24,12), "S5271C1.s5271c1f0");
    test_class_info(&lv, &cd_S5271C1);
    dp->~S5271C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5271C1(Test_S5271C1, "S5271C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S5271C1C1Ev();
extern void _ZN7S5271C1D1Ev();
Name_Map name_map_S5271C1[] = {
  NSPAIR(_ZN7S5271C1C1Ev),
  NSPAIR(_ZN7S5271C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5271C3;
extern VTBL_ENTRY _ZTI7S5271C3[];
extern  VTBL_ENTRY _ZTV7S5271C3[];
extern Class_Descriptor cd_S5271C2;
extern VTBL_ENTRY _ZTI7S5271C2[];
extern  VTBL_ENTRY _ZTV7S5271C2[];
static Base_Class bases_S5271C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5271C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5271C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5271C1[];
extern void _ZN7S5271C1D1Ev();
extern void _ZN7S5271C1D0Ev();
extern void _ZN7S5271C32v5Ev();
extern void _ZN7S5271C32v6Ev();
extern void _ZN7S5271C32v7Ev();
extern void _ZN7S5271C32v8Ev();
extern void _ZN7S5271C32v9Ev();
extern void _ZN7S5271C12v1Ev();
extern void _ZN7S5271C12v2Ev();
extern void _ZN7S5271C12v3Ev();
extern void _ZN7S5271C12v4Ev();
static  VTBL_ENTRY vtc_S5271C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5271C1[0]),
  (VTBL_ENTRY)&_ZN7S5271C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5271C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5271C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5271C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5271C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5271C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5271C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5271C1[];
extern  VTBL_ENTRY _ZTV7S5271C1[];
Class_Descriptor cd_S5271C1 = {  "S5271C1", // class name
  bases_S5271C1, 2,
  &(vtc_S5271C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S5271C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5271C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10091C2  {
  virtual  ~S10091C2(); // _ZN8S10091C2D1Ev
  virtual void  v6(); // _ZN8S10091C22v6Ev
  virtual void  v7(); // _ZN8S10091C22v7Ev
  virtual void  v8(); // _ZN8S10091C22v8Ev
  virtual void  v9(); // _ZN8S10091C22v9Ev
  virtual void  v10(); // _ZN8S10091C23v10Ev
  S10091C2(); // tgen
};
//SIG(-1 S10091C2) C1{ vd v1 v2 v3 v4 v5}


 S10091C2 ::~S10091C2(){ note_dtor("S10091C2", this);}
void  S10091C2 ::v6(){vfunc_called(this, "_ZN8S10091C22v6Ev");}
void  S10091C2 ::v7(){vfunc_called(this, "_ZN8S10091C22v7Ev");}
void  S10091C2 ::v8(){vfunc_called(this, "_ZN8S10091C22v8Ev");}
void  S10091C2 ::v9(){vfunc_called(this, "_ZN8S10091C22v9Ev");}
void  S10091C2 ::v10(){vfunc_called(this, "_ZN8S10091C23v10Ev");}
S10091C2 ::S10091C2(){ note_ctor("S10091C2", this);} // tgen

static void Test_S10091C2()
{
  extern Class_Descriptor cd_S10091C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10091C2, buf);
    S10091C2 *dp, &lv = *(dp=new (buf) S10091C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10091C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10091C2)");
    test_class_info(&lv, &cd_S10091C2);
    dp->~S10091C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10091C2(Test_S10091C2, "S10091C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10091C2C1Ev();
extern void _ZN8S10091C2D1Ev();
Name_Map name_map_S10091C2[] = {
  NSPAIR(_ZN8S10091C2C1Ev),
  NSPAIR(_ZN8S10091C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10091C2[];
extern void _ZN8S10091C2D1Ev();
extern void _ZN8S10091C2D0Ev();
extern void _ZN8S10091C22v6Ev();
extern void _ZN8S10091C22v7Ev();
extern void _ZN8S10091C22v8Ev();
extern void _ZN8S10091C22v9Ev();
extern void _ZN8S10091C23v10Ev();
static  VTBL_ENTRY vtc_S10091C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10091C2[0]),
  (VTBL_ENTRY)&_ZN8S10091C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10091C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10091C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10091C2[];
extern  VTBL_ENTRY _ZTV8S10091C2[];
Class_Descriptor cd_S10091C2 = {  "S10091C2", // class name
  0,0,//no base classes
  &(vtc_S10091C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10091C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10091C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10091C1  : S10091C2 {
  void *s10091c1f0;
  virtual  ~S10091C1(); // _ZN8S10091C1D1Ev
  virtual void  v1(); // _ZN8S10091C12v1Ev
  virtual void  v2(); // _ZN8S10091C12v2Ev
  virtual void  v3(); // _ZN8S10091C12v3Ev
  virtual void  v4(); // _ZN8S10091C12v4Ev
  virtual void  v5(); // _ZN8S10091C12v5Ev
  S10091C1(); // tgen
};
//SIG(1 S10091C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp}


 S10091C1 ::~S10091C1(){ note_dtor("S10091C1", this);}
void  S10091C1 ::v1(){vfunc_called(this, "_ZN8S10091C12v1Ev");}
void  S10091C1 ::v2(){vfunc_called(this, "_ZN8S10091C12v2Ev");}
void  S10091C1 ::v3(){vfunc_called(this, "_ZN8S10091C12v3Ev");}
void  S10091C1 ::v4(){vfunc_called(this, "_ZN8S10091C12v4Ev");}
void  S10091C1 ::v5(){vfunc_called(this, "_ZN8S10091C12v5Ev");}
S10091C1 ::S10091C1(){ note_ctor("S10091C1", this);} // tgen

static void Test_S10091C1()
{
  extern Class_Descriptor cd_S10091C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10091C1, buf);
    S10091C1 *dp, &lv = *(dp=new (buf) S10091C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10091C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10091C1)");
    check_base_class_offset(lv, (S10091C2*), 0, "S10091C1");
    check_field_offset(lv, s10091c1f0, ABISELECT(8,4), "S10091C1.s10091c1f0");
    test_class_info(&lv, &cd_S10091C1);
    dp->~S10091C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10091C1(Test_S10091C1, "S10091C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10091C1C1Ev();
extern void _ZN8S10091C1D1Ev();
Name_Map name_map_S10091C1[] = {
  NSPAIR(_ZN8S10091C1C1Ev),
  NSPAIR(_ZN8S10091C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10091C2;
extern VTBL_ENTRY _ZTI8S10091C2[];
extern  VTBL_ENTRY _ZTV8S10091C2[];
static Base_Class bases_S10091C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10091C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10091C1[];
extern void _ZN8S10091C1D1Ev();
extern void _ZN8S10091C1D0Ev();
extern void _ZN8S10091C22v6Ev();
extern void _ZN8S10091C22v7Ev();
extern void _ZN8S10091C22v8Ev();
extern void _ZN8S10091C22v9Ev();
extern void _ZN8S10091C23v10Ev();
extern void _ZN8S10091C12v1Ev();
extern void _ZN8S10091C12v2Ev();
extern void _ZN8S10091C12v3Ev();
extern void _ZN8S10091C12v4Ev();
extern void _ZN8S10091C12v5Ev();
static  VTBL_ENTRY vtc_S10091C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10091C1[0]),
  (VTBL_ENTRY)&_ZN8S10091C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10091C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10091C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10091C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10091C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10091C1[];
extern  VTBL_ENTRY _ZTV8S10091C1[];
Class_Descriptor cd_S10091C1 = {  "S10091C1", // class name
  bases_S10091C1, 1,
  &(vtc_S10091C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10091C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10091C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5272C3  {
  virtual  ~S5272C3(); // _ZN7S5272C3D1Ev
  virtual void  v5(); // _ZN7S5272C32v5Ev
  virtual void  v6(); // _ZN7S5272C32v6Ev
  virtual void  v7(); // _ZN7S5272C32v7Ev
  virtual void  v8(); // _ZN7S5272C32v8Ev
  virtual void  v9(); // _ZN7S5272C32v9Ev
  S5272C3(); // tgen
};
//SIG(-1 S5272C3) C1{ vd v1 v2 v3 v4 v5}


 S5272C3 ::~S5272C3(){ note_dtor("S5272C3", this);}
void  S5272C3 ::v5(){vfunc_called(this, "_ZN7S5272C32v5Ev");}
void  S5272C3 ::v6(){vfunc_called(this, "_ZN7S5272C32v6Ev");}
void  S5272C3 ::v7(){vfunc_called(this, "_ZN7S5272C32v7Ev");}
void  S5272C3 ::v8(){vfunc_called(this, "_ZN7S5272C32v8Ev");}
void  S5272C3 ::v9(){vfunc_called(this, "_ZN7S5272C32v9Ev");}
S5272C3 ::S5272C3(){ note_ctor("S5272C3", this);} // tgen

static void Test_S5272C3()
{
  extern Class_Descriptor cd_S5272C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5272C3, buf);
    S5272C3 *dp, &lv = *(dp=new (buf) S5272C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5272C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5272C3)");
    test_class_info(&lv, &cd_S5272C3);
    dp->~S5272C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5272C3(Test_S5272C3, "S5272C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5272C3C1Ev();
extern void _ZN7S5272C3D1Ev();
Name_Map name_map_S5272C3[] = {
  NSPAIR(_ZN7S5272C3C1Ev),
  NSPAIR(_ZN7S5272C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5272C3[];
extern void _ZN7S5272C3D1Ev();
extern void _ZN7S5272C3D0Ev();
extern void _ZN7S5272C32v5Ev();
extern void _ZN7S5272C32v6Ev();
extern void _ZN7S5272C32v7Ev();
extern void _ZN7S5272C32v8Ev();
extern void _ZN7S5272C32v9Ev();
static  VTBL_ENTRY vtc_S5272C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5272C3[0]),
  (VTBL_ENTRY)&_ZN7S5272C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5272C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5272C3[];
extern  VTBL_ENTRY _ZTV7S5272C3[];
Class_Descriptor cd_S5272C3 = {  "S5272C3", // class name
  0,0,//no base classes
  &(vtc_S5272C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5272C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5272C3),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5272C2  : S5272C3 {
  void *s5272c2f0[2];
  ~S5272C2(); // tgen
  S5272C2(); // tgen
};
//SIG(-1 S5272C2) C1{ BC2{ vd v1 v2 v3 v4 v5} Fp[2]}


S5272C2 ::~S5272C2(){ note_dtor("S5272C2", this);} // tgen
S5272C2 ::S5272C2(){ note_ctor("S5272C2", this);} // tgen

static void Test_S5272C2()
{
  extern Class_Descriptor cd_S5272C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5272C2, buf);
    S5272C2 *dp, &lv = *(dp=new (buf) S5272C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5272C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5272C2)");
    check_base_class_offset(lv, (S5272C3*), 0, "S5272C2");
    check_field_offset(lv, s5272c2f0, ABISELECT(8,4), "S5272C2.s5272c2f0");
    test_class_info(&lv, &cd_S5272C2);
    dp->~S5272C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5272C2(Test_S5272C2, "S5272C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S5272C2C1Ev();
extern void _ZN7S5272C2D1Ev();
Name_Map name_map_S5272C2[] = {
  NSPAIR(_ZN7S5272C2C1Ev),
  NSPAIR(_ZN7S5272C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5272C3;
extern VTBL_ENTRY _ZTI7S5272C3[];
extern  VTBL_ENTRY _ZTV7S5272C3[];
static Base_Class bases_S5272C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5272C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5272C2[];
extern void _ZN7S5272C2D1Ev();
extern void _ZN7S5272C2D0Ev();
extern void _ZN7S5272C32v5Ev();
extern void _ZN7S5272C32v6Ev();
extern void _ZN7S5272C32v7Ev();
extern void _ZN7S5272C32v8Ev();
extern void _ZN7S5272C32v9Ev();
static  VTBL_ENTRY vtc_S5272C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5272C2[0]),
  (VTBL_ENTRY)&_ZN7S5272C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5272C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S5272C2[];
extern  VTBL_ENTRY _ZTV7S5272C2[];
Class_Descriptor cd_S5272C2 = {  "S5272C2", // class name
  bases_S5272C2, 1,
  &(vtc_S5272C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S5272C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5272C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5272C1  : S5272C2 {
  virtual void  v1(); // _ZN7S5272C12v1Ev
  virtual void  v2(); // _ZN7S5272C12v2Ev
  virtual void  v3(); // _ZN7S5272C12v3Ev
  virtual void  v4(); // _ZN7S5272C12v4Ev
  ~S5272C1(); // tgen
  S5272C1(); // tgen
};
//SIG(1 S5272C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9} Fp[2]} v1 v2 v3 v4}


void  S5272C1 ::v1(){vfunc_called(this, "_ZN7S5272C12v1Ev");}
void  S5272C1 ::v2(){vfunc_called(this, "_ZN7S5272C12v2Ev");}
void  S5272C1 ::v3(){vfunc_called(this, "_ZN7S5272C12v3Ev");}
void  S5272C1 ::v4(){vfunc_called(this, "_ZN7S5272C12v4Ev");}
S5272C1 ::~S5272C1(){ note_dtor("S5272C1", this);} // tgen
S5272C1 ::S5272C1(){ note_ctor("S5272C1", this);} // tgen

static void Test_S5272C1()
{
  extern Class_Descriptor cd_S5272C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5272C1, buf);
    S5272C1 *dp, &lv = *(dp=new (buf) S5272C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5272C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5272C1)");
    check_base_class_offset(lv, (S5272C3*)(S5272C2*), 0, "S5272C1");
    check_base_class_offset(lv, (S5272C2*), 0, "S5272C1");
    test_class_info(&lv, &cd_S5272C1);
    dp->~S5272C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5272C1(Test_S5272C1, "S5272C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S5272C1C1Ev();
extern void _ZN7S5272C1D1Ev();
Name_Map name_map_S5272C1[] = {
  NSPAIR(_ZN7S5272C1C1Ev),
  NSPAIR(_ZN7S5272C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5272C3;
extern VTBL_ENTRY _ZTI7S5272C3[];
extern  VTBL_ENTRY _ZTV7S5272C3[];
extern Class_Descriptor cd_S5272C2;
extern VTBL_ENTRY _ZTI7S5272C2[];
extern  VTBL_ENTRY _ZTV7S5272C2[];
static Base_Class bases_S5272C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5272C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5272C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5272C1[];
extern void _ZN7S5272C1D1Ev();
extern void _ZN7S5272C1D0Ev();
extern void _ZN7S5272C32v5Ev();
extern void _ZN7S5272C32v6Ev();
extern void _ZN7S5272C32v7Ev();
extern void _ZN7S5272C32v8Ev();
extern void _ZN7S5272C32v9Ev();
extern void _ZN7S5272C12v1Ev();
extern void _ZN7S5272C12v2Ev();
extern void _ZN7S5272C12v3Ev();
extern void _ZN7S5272C12v4Ev();
static  VTBL_ENTRY vtc_S5272C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5272C1[0]),
  (VTBL_ENTRY)&_ZN7S5272C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5272C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5272C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5272C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5272C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5272C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5272C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5272C1[];
extern  VTBL_ENTRY _ZTV7S5272C1[];
Class_Descriptor cd_S5272C1 = {  "S5272C1", // class name
  bases_S5272C1, 2,
  &(vtc_S5272C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S5272C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5272C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7044C2  {
  virtual  ~S7044C2(); // _ZN7S7044C2D1Ev
  virtual void  v6(); // _ZN7S7044C22v6Ev
  virtual void  v7(); // _ZN7S7044C22v7Ev
  virtual void  v8(); // _ZN7S7044C22v8Ev
  virtual void  v9(); // _ZN7S7044C22v9Ev
  virtual void  v10(); // _ZN7S7044C23v10Ev
  S7044C2(); // tgen
};
//SIG(-1 S7044C2) C1{ vd v1 v2 v3 v4 v5}


 S7044C2 ::~S7044C2(){ note_dtor("S7044C2", this);}
void  S7044C2 ::v6(){vfunc_called(this, "_ZN7S7044C22v6Ev");}
void  S7044C2 ::v7(){vfunc_called(this, "_ZN7S7044C22v7Ev");}
void  S7044C2 ::v8(){vfunc_called(this, "_ZN7S7044C22v8Ev");}
void  S7044C2 ::v9(){vfunc_called(this, "_ZN7S7044C22v9Ev");}
void  S7044C2 ::v10(){vfunc_called(this, "_ZN7S7044C23v10Ev");}
S7044C2 ::S7044C2(){ note_ctor("S7044C2", this);} // tgen

static void Test_S7044C2()
{
  extern Class_Descriptor cd_S7044C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7044C2, buf);
    S7044C2 *dp, &lv = *(dp=new (buf) S7044C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7044C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7044C2)");
    test_class_info(&lv, &cd_S7044C2);
    dp->~S7044C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7044C2(Test_S7044C2, "S7044C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7044C2C1Ev();
extern void _ZN7S7044C2D1Ev();
Name_Map name_map_S7044C2[] = {
  NSPAIR(_ZN7S7044C2C1Ev),
  NSPAIR(_ZN7S7044C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7044C2[];
extern void _ZN7S7044C2D1Ev();
extern void _ZN7S7044C2D0Ev();
extern void _ZN7S7044C22v6Ev();
extern void _ZN7S7044C22v7Ev();
extern void _ZN7S7044C22v8Ev();
extern void _ZN7S7044C22v9Ev();
extern void _ZN7S7044C23v10Ev();
static  VTBL_ENTRY vtc_S7044C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7044C2[0]),
  (VTBL_ENTRY)&_ZN7S7044C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7044C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7044C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7044C2[];
extern  VTBL_ENTRY _ZTV7S7044C2[];
Class_Descriptor cd_S7044C2 = {  "S7044C2", // class name
  0,0,//no base classes
  &(vtc_S7044C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7044C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7044C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7044C1  : S7044C2 {
  void *s7044c1f0;
  virtual  ~S7044C1(); // _ZN7S7044C1D1Ev
  virtual void  v1(); // _ZN7S7044C12v1Ev
  virtual void  v2(); // _ZN7S7044C12v2Ev
  virtual void  v3(); // _ZN7S7044C12v3Ev
  virtual void  v4(); // _ZN7S7044C12v4Ev
  virtual void  v5(); // _ZN7S7044C12v5Ev
  S7044C1(); // tgen
};
//SIG(1 S7044C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5 Fp}


 S7044C1 ::~S7044C1(){ note_dtor("S7044C1", this);}
void  S7044C1 ::v1(){vfunc_called(this, "_ZN7S7044C12v1Ev");}
void  S7044C1 ::v2(){vfunc_called(this, "_ZN7S7044C12v2Ev");}
void  S7044C1 ::v3(){vfunc_called(this, "_ZN7S7044C12v3Ev");}
void  S7044C1 ::v4(){vfunc_called(this, "_ZN7S7044C12v4Ev");}
void  S7044C1 ::v5(){vfunc_called(this, "_ZN7S7044C12v5Ev");}
S7044C1 ::S7044C1(){ note_ctor("S7044C1", this);} // tgen

static void Test_S7044C1()
{
  extern Class_Descriptor cd_S7044C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7044C1, buf);
    S7044C1 *dp, &lv = *(dp=new (buf) S7044C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7044C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7044C1)");
    check_base_class_offset(lv, (S7044C2*), 0, "S7044C1");
    check_field_offset(lv, s7044c1f0, ABISELECT(8,4), "S7044C1.s7044c1f0");
    test_class_info(&lv, &cd_S7044C1);
    dp->~S7044C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7044C1(Test_S7044C1, "S7044C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7044C1C1Ev();
extern void _ZN7S7044C1D1Ev();
Name_Map name_map_S7044C1[] = {
  NSPAIR(_ZN7S7044C1C1Ev),
  NSPAIR(_ZN7S7044C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7044C2;
extern VTBL_ENTRY _ZTI7S7044C2[];
extern  VTBL_ENTRY _ZTV7S7044C2[];
static Base_Class bases_S7044C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7044C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7044C1[];
extern void _ZN7S7044C1D1Ev();
extern void _ZN7S7044C1D0Ev();
extern void _ZN7S7044C22v6Ev();
extern void _ZN7S7044C22v7Ev();
extern void _ZN7S7044C22v8Ev();
extern void _ZN7S7044C22v9Ev();
extern void _ZN7S7044C23v10Ev();
extern void _ZN7S7044C12v1Ev();
extern void _ZN7S7044C12v2Ev();
extern void _ZN7S7044C12v3Ev();
extern void _ZN7S7044C12v4Ev();
extern void _ZN7S7044C12v5Ev();
static  VTBL_ENTRY vtc_S7044C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7044C1[0]),
  (VTBL_ENTRY)&_ZN7S7044C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7044C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7044C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7044C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7044C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7044C1[];
extern  VTBL_ENTRY _ZTV7S7044C1[];
Class_Descriptor cd_S7044C1 = {  "S7044C1", // class name
  bases_S7044C1, 1,
  &(vtc_S7044C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7044C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7044C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9943C2  {
  virtual  ~S9943C2(); // _ZN7S9943C2D1Ev
  virtual void  v5(); // _ZN7S9943C22v5Ev
  virtual void  v6(); // _ZN7S9943C22v6Ev
  virtual void  v7(); // _ZN7S9943C22v7Ev
  virtual void  v8(); // _ZN7S9943C22v8Ev
  virtual void  v9(); // _ZN7S9943C22v9Ev
  S9943C2(); // tgen
};
//SIG(-1 S9943C2) C1{ vd v1 v2 v3 v4 v5}


 S9943C2 ::~S9943C2(){ note_dtor("S9943C2", this);}
void  S9943C2 ::v5(){vfunc_called(this, "_ZN7S9943C22v5Ev");}
void  S9943C2 ::v6(){vfunc_called(this, "_ZN7S9943C22v6Ev");}
void  S9943C2 ::v7(){vfunc_called(this, "_ZN7S9943C22v7Ev");}
void  S9943C2 ::v8(){vfunc_called(this, "_ZN7S9943C22v8Ev");}
void  S9943C2 ::v9(){vfunc_called(this, "_ZN7S9943C22v9Ev");}
S9943C2 ::S9943C2(){ note_ctor("S9943C2", this);} // tgen

static void Test_S9943C2()
{
  extern Class_Descriptor cd_S9943C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9943C2, buf);
    S9943C2 *dp, &lv = *(dp=new (buf) S9943C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9943C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9943C2)");
    test_class_info(&lv, &cd_S9943C2);
    dp->~S9943C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9943C2(Test_S9943C2, "S9943C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9943C2C1Ev();
extern void _ZN7S9943C2D1Ev();
Name_Map name_map_S9943C2[] = {
  NSPAIR(_ZN7S9943C2C1Ev),
  NSPAIR(_ZN7S9943C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9943C2[];
extern void _ZN7S9943C2D1Ev();
extern void _ZN7S9943C2D0Ev();
extern void _ZN7S9943C22v5Ev();
extern void _ZN7S9943C22v6Ev();
extern void _ZN7S9943C22v7Ev();
extern void _ZN7S9943C22v8Ev();
extern void _ZN7S9943C22v9Ev();
static  VTBL_ENTRY vtc_S9943C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9943C2[0]),
  (VTBL_ENTRY)&_ZN7S9943C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9943C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9943C2[];
extern  VTBL_ENTRY _ZTV7S9943C2[];
Class_Descriptor cd_S9943C2 = {  "S9943C2", // class name
  0,0,//no base classes
  &(vtc_S9943C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9943C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9943C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9943C1  : S9943C2 {
  int s9943c1f0[19];
  virtual  ~S9943C1(); // _ZN7S9943C1D1Ev
  virtual void  v1(); // _ZN7S9943C12v1Ev
  virtual void  v2(); // _ZN7S9943C12v2Ev
  virtual void  v3(); // _ZN7S9943C12v3Ev
  virtual void  v4(); // _ZN7S9943C12v4Ev
  S9943C1(); // tgen
};
//SIG(1 S9943C1) C1{ BC2{ vd v5 v6 v7 v8 v9} vd v1 v2 v3 v4 Fi[19]}


 S9943C1 ::~S9943C1(){ note_dtor("S9943C1", this);}
void  S9943C1 ::v1(){vfunc_called(this, "_ZN7S9943C12v1Ev");}
void  S9943C1 ::v2(){vfunc_called(this, "_ZN7S9943C12v2Ev");}
void  S9943C1 ::v3(){vfunc_called(this, "_ZN7S9943C12v3Ev");}
void  S9943C1 ::v4(){vfunc_called(this, "_ZN7S9943C12v4Ev");}
S9943C1 ::S9943C1(){ note_ctor("S9943C1", this);} // tgen

static void Test_S9943C1()
{
  extern Class_Descriptor cd_S9943C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,21)];
    init_test(&cd_S9943C1, buf);
    S9943C1 *dp, &lv = *(dp=new (buf) S9943C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,80), "sizeof(S9943C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9943C1)");
    check_base_class_offset(lv, (S9943C2*), 0, "S9943C1");
    check_field_offset(lv, s9943c1f0, ABISELECT(8,4), "S9943C1.s9943c1f0");
    test_class_info(&lv, &cd_S9943C1);
    dp->~S9943C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9943C1(Test_S9943C1, "S9943C1", ABISELECT(88,80));

#else // __cplusplus

extern void _ZN7S9943C1C1Ev();
extern void _ZN7S9943C1D1Ev();
Name_Map name_map_S9943C1[] = {
  NSPAIR(_ZN7S9943C1C1Ev),
  NSPAIR(_ZN7S9943C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9943C2;
extern VTBL_ENTRY _ZTI7S9943C2[];
extern  VTBL_ENTRY _ZTV7S9943C2[];
static Base_Class bases_S9943C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9943C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9943C1[];
extern void _ZN7S9943C1D1Ev();
extern void _ZN7S9943C1D0Ev();
extern void _ZN7S9943C22v5Ev();
extern void _ZN7S9943C22v6Ev();
extern void _ZN7S9943C22v7Ev();
extern void _ZN7S9943C22v8Ev();
extern void _ZN7S9943C22v9Ev();
extern void _ZN7S9943C12v1Ev();
extern void _ZN7S9943C12v2Ev();
extern void _ZN7S9943C12v3Ev();
extern void _ZN7S9943C12v4Ev();
static  VTBL_ENTRY vtc_S9943C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9943C1[0]),
  (VTBL_ENTRY)&_ZN7S9943C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9943C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9943C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9943C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9943C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9943C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9943C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9943C1[];
extern  VTBL_ENTRY _ZTV7S9943C1[];
Class_Descriptor cd_S9943C1 = {  "S9943C1", // class name
  bases_S9943C1, 1,
  &(vtc_S9943C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,80), // object size
  NSPAIRA(_ZTI7S9943C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9943C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9812C2  {
  virtual  ~S9812C2(); // _ZN7S9812C2D1Ev
  virtual void  v4(); // _ZN7S9812C22v4Ev
  virtual void  v5(); // _ZN7S9812C22v5Ev
  virtual void  v6(); // _ZN7S9812C22v6Ev
  virtual void  v7(); // _ZN7S9812C22v7Ev
  virtual void  v8(); // _ZN7S9812C22v8Ev
  S9812C2(); // tgen
};
//SIG(-1 S9812C2) C1{ vd v1 v2 v3 v4 v5}


 S9812C2 ::~S9812C2(){ note_dtor("S9812C2", this);}
void  S9812C2 ::v4(){vfunc_called(this, "_ZN7S9812C22v4Ev");}
void  S9812C2 ::v5(){vfunc_called(this, "_ZN7S9812C22v5Ev");}
void  S9812C2 ::v6(){vfunc_called(this, "_ZN7S9812C22v6Ev");}
void  S9812C2 ::v7(){vfunc_called(this, "_ZN7S9812C22v7Ev");}
void  S9812C2 ::v8(){vfunc_called(this, "_ZN7S9812C22v8Ev");}
S9812C2 ::S9812C2(){ note_ctor("S9812C2", this);} // tgen

static void Test_S9812C2()
{
  extern Class_Descriptor cd_S9812C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9812C2, buf);
    S9812C2 *dp, &lv = *(dp=new (buf) S9812C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9812C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9812C2)");
    test_class_info(&lv, &cd_S9812C2);
    dp->~S9812C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9812C2(Test_S9812C2, "S9812C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9812C2C1Ev();
extern void _ZN7S9812C2D1Ev();
Name_Map name_map_S9812C2[] = {
  NSPAIR(_ZN7S9812C2C1Ev),
  NSPAIR(_ZN7S9812C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9812C2[];
extern void _ZN7S9812C2D1Ev();
extern void _ZN7S9812C2D0Ev();
extern void _ZN7S9812C22v4Ev();
extern void _ZN7S9812C22v5Ev();
extern void _ZN7S9812C22v6Ev();
extern void _ZN7S9812C22v7Ev();
extern void _ZN7S9812C22v8Ev();
static  VTBL_ENTRY vtc_S9812C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9812C2[0]),
  (VTBL_ENTRY)&_ZN7S9812C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9812C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9812C2[];
extern  VTBL_ENTRY _ZTV7S9812C2[];
Class_Descriptor cd_S9812C2 = {  "S9812C2", // class name
  0,0,//no base classes
  &(vtc_S9812C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9812C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9812C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9812C1  : S9812C2 {
  char s9812c1f0[64];
  virtual  ~S9812C1(); // _ZN7S9812C1D1Ev
  virtual void  v1(); // _ZN7S9812C12v1Ev
  virtual void  v2(); // _ZN7S9812C12v2Ev
  virtual void  v3(); // _ZN7S9812C12v3Ev
  S9812C1(); // tgen
};
//SIG(1 S9812C1) C1{ BC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3 Fc[64]}


 S9812C1 ::~S9812C1(){ note_dtor("S9812C1", this);}
void  S9812C1 ::v1(){vfunc_called(this, "_ZN7S9812C12v1Ev");}
void  S9812C1 ::v2(){vfunc_called(this, "_ZN7S9812C12v2Ev");}
void  S9812C1 ::v3(){vfunc_called(this, "_ZN7S9812C12v3Ev");}
S9812C1 ::S9812C1(){ note_ctor("S9812C1", this);} // tgen

static void Test_S9812C1()
{
  extern Class_Descriptor cd_S9812C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,18)];
    init_test(&cd_S9812C1, buf);
    S9812C1 *dp, &lv = *(dp=new (buf) S9812C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S9812C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9812C1)");
    check_base_class_offset(lv, (S9812C2*), 0, "S9812C1");
    check_field_offset(lv, s9812c1f0, ABISELECT(8,4), "S9812C1.s9812c1f0");
    test_class_info(&lv, &cd_S9812C1);
    dp->~S9812C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9812C1(Test_S9812C1, "S9812C1", ABISELECT(72,68));

#else // __cplusplus

extern void _ZN7S9812C1C1Ev();
extern void _ZN7S9812C1D1Ev();
Name_Map name_map_S9812C1[] = {
  NSPAIR(_ZN7S9812C1C1Ev),
  NSPAIR(_ZN7S9812C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9812C2;
extern VTBL_ENTRY _ZTI7S9812C2[];
extern  VTBL_ENTRY _ZTV7S9812C2[];
static Base_Class bases_S9812C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9812C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9812C1[];
extern void _ZN7S9812C1D1Ev();
extern void _ZN7S9812C1D0Ev();
extern void _ZN7S9812C22v4Ev();
extern void _ZN7S9812C22v5Ev();
extern void _ZN7S9812C22v6Ev();
extern void _ZN7S9812C22v7Ev();
extern void _ZN7S9812C22v8Ev();
extern void _ZN7S9812C12v1Ev();
extern void _ZN7S9812C12v2Ev();
extern void _ZN7S9812C12v3Ev();
static  VTBL_ENTRY vtc_S9812C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9812C1[0]),
  (VTBL_ENTRY)&_ZN7S9812C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9812C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9812C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9812C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9812C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9812C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9812C1[];
extern  VTBL_ENTRY _ZTV7S9812C1[];
Class_Descriptor cd_S9812C1 = {  "S9812C1", // class name
  bases_S9812C1, 1,
  &(vtc_S9812C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,68), // object size
  NSPAIRA(_ZTI7S9812C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9812C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7043C2  {
  virtual  ~S7043C2(); // _ZN7S7043C2D1Ev
  virtual void  v6(); // _ZN7S7043C22v6Ev
  virtual void  v7(); // _ZN7S7043C22v7Ev
  virtual void  v8(); // _ZN7S7043C22v8Ev
  virtual void  v9(); // _ZN7S7043C22v9Ev
  virtual void  v10(); // _ZN7S7043C23v10Ev
  S7043C2(); // tgen
};
//SIG(-1 S7043C2) C1{ vd v1 v2 v3 v4 v5}


 S7043C2 ::~S7043C2(){ note_dtor("S7043C2", this);}
void  S7043C2 ::v6(){vfunc_called(this, "_ZN7S7043C22v6Ev");}
void  S7043C2 ::v7(){vfunc_called(this, "_ZN7S7043C22v7Ev");}
void  S7043C2 ::v8(){vfunc_called(this, "_ZN7S7043C22v8Ev");}
void  S7043C2 ::v9(){vfunc_called(this, "_ZN7S7043C22v9Ev");}
void  S7043C2 ::v10(){vfunc_called(this, "_ZN7S7043C23v10Ev");}
S7043C2 ::S7043C2(){ note_ctor("S7043C2", this);} // tgen

static void Test_S7043C2()
{
  extern Class_Descriptor cd_S7043C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7043C2, buf);
    S7043C2 *dp, &lv = *(dp=new (buf) S7043C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7043C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7043C2)");
    test_class_info(&lv, &cd_S7043C2);
    dp->~S7043C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7043C2(Test_S7043C2, "S7043C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7043C2C1Ev();
extern void _ZN7S7043C2D1Ev();
Name_Map name_map_S7043C2[] = {
  NSPAIR(_ZN7S7043C2C1Ev),
  NSPAIR(_ZN7S7043C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7043C2[];
extern void _ZN7S7043C2D1Ev();
extern void _ZN7S7043C2D0Ev();
extern void _ZN7S7043C22v6Ev();
extern void _ZN7S7043C22v7Ev();
extern void _ZN7S7043C22v8Ev();
extern void _ZN7S7043C22v9Ev();
extern void _ZN7S7043C23v10Ev();
static  VTBL_ENTRY vtc_S7043C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7043C2[0]),
  (VTBL_ENTRY)&_ZN7S7043C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7043C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7043C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S7043C2[];
extern  VTBL_ENTRY _ZTV7S7043C2[];
Class_Descriptor cd_S7043C2 = {  "S7043C2", // class name
  0,0,//no base classes
  &(vtc_S7043C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7043C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7043C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7043C1  : S7043C2 {
  virtual  ~S7043C1(); // _ZN7S7043C1D1Ev
  virtual void  v1(); // _ZN7S7043C12v1Ev
  virtual void  v2(); // _ZN7S7043C12v2Ev
  virtual void  v3(); // _ZN7S7043C12v3Ev
  virtual void  v4(); // _ZN7S7043C12v4Ev
  virtual void  v5(); // _ZN7S7043C12v5Ev
  S7043C1(); // tgen
};
//SIG(1 S7043C1) C1{ BC2{ vd v6 v7 v8 v9 v10} vd v1 v2 v3 v4 v5}


 S7043C1 ::~S7043C1(){ note_dtor("S7043C1", this);}
void  S7043C1 ::v1(){vfunc_called(this, "_ZN7S7043C12v1Ev");}
void  S7043C1 ::v2(){vfunc_called(this, "_ZN7S7043C12v2Ev");}
void  S7043C1 ::v3(){vfunc_called(this, "_ZN7S7043C12v3Ev");}
void  S7043C1 ::v4(){vfunc_called(this, "_ZN7S7043C12v4Ev");}
void  S7043C1 ::v5(){vfunc_called(this, "_ZN7S7043C12v5Ev");}
S7043C1 ::S7043C1(){ note_ctor("S7043C1", this);} // tgen

static void Test_S7043C1()
{
  extern Class_Descriptor cd_S7043C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7043C1, buf);
    S7043C1 *dp, &lv = *(dp=new (buf) S7043C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7043C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7043C1)");
    check_base_class_offset(lv, (S7043C2*), 0, "S7043C1");
    test_class_info(&lv, &cd_S7043C1);
    dp->~S7043C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7043C1(Test_S7043C1, "S7043C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7043C1C1Ev();
extern void _ZN7S7043C1D1Ev();
Name_Map name_map_S7043C1[] = {
  NSPAIR(_ZN7S7043C1C1Ev),
  NSPAIR(_ZN7S7043C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7043C2;
extern VTBL_ENTRY _ZTI7S7043C2[];
extern  VTBL_ENTRY _ZTV7S7043C2[];
static Base_Class bases_S7043C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7043C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7043C1[];
extern void _ZN7S7043C1D1Ev();
extern void _ZN7S7043C1D0Ev();
extern void _ZN7S7043C22v6Ev();
extern void _ZN7S7043C22v7Ev();
extern void _ZN7S7043C22v8Ev();
extern void _ZN7S7043C22v9Ev();
extern void _ZN7S7043C23v10Ev();
extern void _ZN7S7043C12v1Ev();
extern void _ZN7S7043C12v2Ev();
extern void _ZN7S7043C12v3Ev();
extern void _ZN7S7043C12v4Ev();
extern void _ZN7S7043C12v5Ev();
static  VTBL_ENTRY vtc_S7043C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7043C1[0]),
  (VTBL_ENTRY)&_ZN7S7043C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7043C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7043C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7043C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7043C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7043C1[];
extern  VTBL_ENTRY _ZTV7S7043C1[];
Class_Descriptor cd_S7043C1 = {  "S7043C1", // class name
  bases_S7043C1, 1,
  &(vtc_S7043C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7043C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7043C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10077C2  {
  virtual  ~S10077C2(); // _ZN8S10077C2D1Ev
  virtual void  v6(); // _ZN8S10077C22v6Ev
  virtual void  v7(); // _ZN8S10077C22v7Ev
  virtual void  v8(); // _ZN8S10077C22v8Ev
  virtual void  v9(); // _ZN8S10077C22v9Ev
  virtual void  v10(); // _ZN8S10077C23v10Ev
  S10077C2(); // tgen
};
//SIG(-1 S10077C2) C1{ vd v1 v2 v3 v4 v5}


 S10077C2 ::~S10077C2(){ note_dtor("S10077C2", this);}
void  S10077C2 ::v6(){vfunc_called(this, "_ZN8S10077C22v6Ev");}
void  S10077C2 ::v7(){vfunc_called(this, "_ZN8S10077C22v7Ev");}
void  S10077C2 ::v8(){vfunc_called(this, "_ZN8S10077C22v8Ev");}
void  S10077C2 ::v9(){vfunc_called(this, "_ZN8S10077C22v9Ev");}
void  S10077C2 ::v10(){vfunc_called(this, "_ZN8S10077C23v10Ev");}
S10077C2 ::S10077C2(){ note_ctor("S10077C2", this);} // tgen

static void Test_S10077C2()
{
  extern Class_Descriptor cd_S10077C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S10077C2, buf);
    S10077C2 *dp, &lv = *(dp=new (buf) S10077C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S10077C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10077C2)");
    test_class_info(&lv, &cd_S10077C2);
    dp->~S10077C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10077C2(Test_S10077C2, "S10077C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S10077C2C1Ev();
extern void _ZN8S10077C2D1Ev();
Name_Map name_map_S10077C2[] = {
  NSPAIR(_ZN8S10077C2C1Ev),
  NSPAIR(_ZN8S10077C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S10077C2[];
extern void _ZN8S10077C2D1Ev();
extern void _ZN8S10077C2D0Ev();
extern void _ZN8S10077C22v6Ev();
extern void _ZN8S10077C22v7Ev();
extern void _ZN8S10077C22v8Ev();
extern void _ZN8S10077C22v9Ev();
extern void _ZN8S10077C23v10Ev();
static  VTBL_ENTRY vtc_S10077C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10077C2[0]),
  (VTBL_ENTRY)&_ZN8S10077C2D1Ev,
  (VTBL_ENTRY)&_ZN8S10077C2D0Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10077C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S10077C2[];
extern  VTBL_ENTRY _ZTV8S10077C2[];
Class_Descriptor cd_S10077C2 = {  "S10077C2", // class name
  0,0,//no base classes
  &(vtc_S10077C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S10077C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S10077C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10077C1  : S10077C2 {
  void *s10077c1f0;
  virtual void  v1(); // _ZN8S10077C12v1Ev
  virtual void  v2(); // _ZN8S10077C12v2Ev
  virtual void  v3(); // _ZN8S10077C12v3Ev
  virtual void  v4(); // _ZN8S10077C12v4Ev
  virtual void  v5(); // _ZN8S10077C12v5Ev
  ~S10077C1(); // tgen
  S10077C1(); // tgen
};
//SIG(1 S10077C1) C1{ BC2{ vd v6 v7 v8 v9 v10} v1 v2 v3 v4 v5 Fp}


void  S10077C1 ::v1(){vfunc_called(this, "_ZN8S10077C12v1Ev");}
void  S10077C1 ::v2(){vfunc_called(this, "_ZN8S10077C12v2Ev");}
void  S10077C1 ::v3(){vfunc_called(this, "_ZN8S10077C12v3Ev");}
void  S10077C1 ::v4(){vfunc_called(this, "_ZN8S10077C12v4Ev");}
void  S10077C1 ::v5(){vfunc_called(this, "_ZN8S10077C12v5Ev");}
S10077C1 ::~S10077C1(){ note_dtor("S10077C1", this);} // tgen
S10077C1 ::S10077C1(){ note_ctor("S10077C1", this);} // tgen

static void Test_S10077C1()
{
  extern Class_Descriptor cd_S10077C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S10077C1, buf);
    S10077C1 *dp, &lv = *(dp=new (buf) S10077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S10077C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10077C1)");
    check_base_class_offset(lv, (S10077C2*), 0, "S10077C1");
    check_field_offset(lv, s10077c1f0, ABISELECT(8,4), "S10077C1.s10077c1f0");
    test_class_info(&lv, &cd_S10077C1);
    dp->~S10077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10077C1(Test_S10077C1, "S10077C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S10077C1C1Ev();
extern void _ZN8S10077C1D1Ev();
Name_Map name_map_S10077C1[] = {
  NSPAIR(_ZN8S10077C1C1Ev),
  NSPAIR(_ZN8S10077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10077C2;
extern VTBL_ENTRY _ZTI8S10077C2[];
extern  VTBL_ENTRY _ZTV8S10077C2[];
static Base_Class bases_S10077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10077C1[];
extern void _ZN8S10077C1D1Ev();
extern void _ZN8S10077C1D0Ev();
extern void _ZN8S10077C22v6Ev();
extern void _ZN8S10077C22v7Ev();
extern void _ZN8S10077C22v8Ev();
extern void _ZN8S10077C22v9Ev();
extern void _ZN8S10077C23v10Ev();
extern void _ZN8S10077C12v1Ev();
extern void _ZN8S10077C12v2Ev();
extern void _ZN8S10077C12v3Ev();
extern void _ZN8S10077C12v4Ev();
extern void _ZN8S10077C12v5Ev();
static  VTBL_ENTRY vtc_S10077C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10077C1[0]),
  (VTBL_ENTRY)&_ZN8S10077C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10077C1D0Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v6Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v7Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v8Ev,
  (VTBL_ENTRY)&_ZN8S10077C22v9Ev,
  (VTBL_ENTRY)&_ZN8S10077C23v10Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10077C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S10077C1[];
extern  VTBL_ENTRY _ZTV8S10077C1[];
Class_Descriptor cd_S10077C1 = {  "S10077C1", // class name
  bases_S10077C1, 1,
  &(vtc_S10077C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S10077C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10077C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9510C2  {
  virtual  ~S9510C2(); // _ZN7S9510C2D1Ev
  virtual void  v3(); // _ZN7S9510C22v3Ev
  virtual void  v4(); // _ZN7S9510C22v4Ev
  virtual void  v5(); // _ZN7S9510C22v5Ev
  virtual void  v6(); // _ZN7S9510C22v6Ev
  virtual void  v7(); // _ZN7S9510C22v7Ev
  S9510C2(); // tgen
};
//SIG(-1 S9510C2) C1{ vd v1 v2 v3 v4 v5}


 S9510C2 ::~S9510C2(){ note_dtor("S9510C2", this);}
void  S9510C2 ::v3(){vfunc_called(this, "_ZN7S9510C22v3Ev");}
void  S9510C2 ::v4(){vfunc_called(this, "_ZN7S9510C22v4Ev");}
void  S9510C2 ::v5(){vfunc_called(this, "_ZN7S9510C22v5Ev");}
void  S9510C2 ::v6(){vfunc_called(this, "_ZN7S9510C22v6Ev");}
void  S9510C2 ::v7(){vfunc_called(this, "_ZN7S9510C22v7Ev");}
S9510C2 ::S9510C2(){ note_ctor("S9510C2", this);} // tgen

static void Test_S9510C2()
{
  extern Class_Descriptor cd_S9510C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9510C2, buf);
    S9510C2 *dp, &lv = *(dp=new (buf) S9510C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9510C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9510C2)");
    test_class_info(&lv, &cd_S9510C2);
    dp->~S9510C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9510C2(Test_S9510C2, "S9510C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9510C2C1Ev();
extern void _ZN7S9510C2D1Ev();
Name_Map name_map_S9510C2[] = {
  NSPAIR(_ZN7S9510C2C1Ev),
  NSPAIR(_ZN7S9510C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9510C2[];
extern void _ZN7S9510C2D1Ev();
extern void _ZN7S9510C2D0Ev();
extern void _ZN7S9510C22v3Ev();
extern void _ZN7S9510C22v4Ev();
extern void _ZN7S9510C22v5Ev();
extern void _ZN7S9510C22v6Ev();
extern void _ZN7S9510C22v7Ev();
static  VTBL_ENTRY vtc_S9510C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9510C2[0]),
  (VTBL_ENTRY)&_ZN7S9510C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9510C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9510C2[];
extern  VTBL_ENTRY _ZTV7S9510C2[];
Class_Descriptor cd_S9510C2 = {  "S9510C2", // class name
  0,0,//no base classes
  &(vtc_S9510C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9510C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9510C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9510C1  : S9510C2 {
  int s9510c1f0;
  void *s9510c1f1;
  char s9510c1f2;
  virtual  ~S9510C1(); // _ZN7S9510C1D1Ev
  virtual void  v1(); // _ZN7S9510C12v1Ev
  virtual void  v2(); // _ZN7S9510C12v2Ev
  S9510C1(); // tgen
};
//SIG(1 S9510C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2 Fi Fp Fc}


 S9510C1 ::~S9510C1(){ note_dtor("S9510C1", this);}
void  S9510C1 ::v1(){vfunc_called(this, "_ZN7S9510C12v1Ev");}
void  S9510C1 ::v2(){vfunc_called(this, "_ZN7S9510C12v2Ev");}
S9510C1 ::S9510C1(){ note_ctor("S9510C1", this);} // tgen

static void Test_S9510C1()
{
  extern Class_Descriptor cd_S9510C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S9510C1, buf);
    S9510C1 *dp, &lv = *(dp=new (buf) S9510C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S9510C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9510C1)");
    check_base_class_offset(lv, (S9510C2*), 0, "S9510C1");
    check_field_offset(lv, s9510c1f0, ABISELECT(8,4), "S9510C1.s9510c1f0");
    check_field_offset(lv, s9510c1f1, ABISELECT(16,8), "S9510C1.s9510c1f1");
    check_field_offset(lv, s9510c1f2, ABISELECT(24,12), "S9510C1.s9510c1f2");
    test_class_info(&lv, &cd_S9510C1);
    dp->~S9510C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9510C1(Test_S9510C1, "S9510C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S9510C1C1Ev();
extern void _ZN7S9510C1D1Ev();
Name_Map name_map_S9510C1[] = {
  NSPAIR(_ZN7S9510C1C1Ev),
  NSPAIR(_ZN7S9510C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9510C2;
extern VTBL_ENTRY _ZTI7S9510C2[];
extern  VTBL_ENTRY _ZTV7S9510C2[];
static Base_Class bases_S9510C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9510C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9510C1[];
extern void _ZN7S9510C1D1Ev();
extern void _ZN7S9510C1D0Ev();
extern void _ZN7S9510C22v3Ev();
extern void _ZN7S9510C22v4Ev();
extern void _ZN7S9510C22v5Ev();
extern void _ZN7S9510C22v6Ev();
extern void _ZN7S9510C22v7Ev();
extern void _ZN7S9510C12v1Ev();
extern void _ZN7S9510C12v2Ev();
static  VTBL_ENTRY vtc_S9510C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9510C1[0]),
  (VTBL_ENTRY)&_ZN7S9510C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9510C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9510C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9510C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9510C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9510C1[];
extern  VTBL_ENTRY _ZTV7S9510C1[];
Class_Descriptor cd_S9510C1 = {  "S9510C1", // class name
  bases_S9510C1, 1,
  &(vtc_S9510C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S9510C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9510C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17524C1  {
  void *s17524c1f0;
  ::S260C25_nt s17524c1f1;
  void  mf17524c1(); // _ZN8S17524C19mf17524c1Ev
};
//SIG(1 S17524C1) C1{ m Fp FC2{ FC3{ Fi[5]} FC4{ m Fi[2]} Fp Fi:1}}


void  S17524C1 ::mf17524c1(){}

static void Test_S17524C1()
{
  {
    init_simple_test("S17524C1");
    static S17524C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S17524C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17524C1)");
    check_field_offset(lv, s17524c1f0, 0, "S17524C1.s17524c1f0");
    check_field_offset(lv, s17524c1f1, ABISELECT(8,4), "S17524C1.s17524c1f1");
  }
}
static Arrange_To_Call_Me vS17524C1(Test_S17524C1, "S17524C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20147C2  {
  virtual  ~S20147C2(); // _ZN8S20147C2D1Ev
  virtual void  v3(); // _ZN8S20147C22v3Ev
  virtual void  v4(); // _ZN8S20147C22v4Ev
  virtual void  v5(); // _ZN8S20147C22v5Ev
  virtual void  v6(); // _ZN8S20147C22v6Ev
  virtual void  v7(); // _ZN8S20147C22v7Ev
  S20147C2(); // tgen
};
//SIG(-1 S20147C2) C1{ vd v1 v2 v3 v4 v5}


 S20147C2 ::~S20147C2(){ note_dtor("S20147C2", this);}
void  S20147C2 ::v3(){vfunc_called(this, "_ZN8S20147C22v3Ev");}
void  S20147C2 ::v4(){vfunc_called(this, "_ZN8S20147C22v4Ev");}
void  S20147C2 ::v5(){vfunc_called(this, "_ZN8S20147C22v5Ev");}
void  S20147C2 ::v6(){vfunc_called(this, "_ZN8S20147C22v6Ev");}
void  S20147C2 ::v7(){vfunc_called(this, "_ZN8S20147C22v7Ev");}
S20147C2 ::S20147C2(){ note_ctor("S20147C2", this);} // tgen

static void Test_S20147C2()
{
  extern Class_Descriptor cd_S20147C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20147C2, buf);
    S20147C2 *dp, &lv = *(dp=new (buf) S20147C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20147C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20147C2)");
    test_class_info(&lv, &cd_S20147C2);
    dp->~S20147C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20147C2(Test_S20147C2, "S20147C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20147C2C1Ev();
extern void _ZN8S20147C2D1Ev();
Name_Map name_map_S20147C2[] = {
  NSPAIR(_ZN8S20147C2C1Ev),
  NSPAIR(_ZN8S20147C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20147C2[];
extern void _ZN8S20147C2D1Ev();
extern void _ZN8S20147C2D0Ev();
extern void _ZN8S20147C22v3Ev();
extern void _ZN8S20147C22v4Ev();
extern void _ZN8S20147C22v5Ev();
extern void _ZN8S20147C22v6Ev();
extern void _ZN8S20147C22v7Ev();
static  VTBL_ENTRY vtc_S20147C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20147C2[0]),
  (VTBL_ENTRY)&_ZN8S20147C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20147C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20147C2[];
extern  VTBL_ENTRY _ZTV8S20147C2[];
Class_Descriptor cd_S20147C2 = {  "S20147C2", // class name
  0,0,//no base classes
  &(vtc_S20147C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20147C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20147C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20147C1  : virtual S20147C2 {
  ::S15319C7 s20147c1f0;
  virtual  ~S20147C1(); // _ZN8S20147C1D2Ev
  virtual void  v1(); // _ZN8S20147C12v1Ev
  virtual void  v2(); // _ZN8S20147C12v2Ev
  S20147C1(); // tgen
};
//SIG(1 S20147C1) C1{ VBC2{ vd v3 v4 v5 v6 v7} vd v1 v2 FC3{}}


 S20147C1 ::~S20147C1(){ note_dtor("S20147C1", this);}
void  S20147C1 ::v1(){vfunc_called(this, "_ZN8S20147C12v1Ev");}
void  S20147C1 ::v2(){vfunc_called(this, "_ZN8S20147C12v2Ev");}
S20147C1 ::S20147C1(){ note_ctor("S20147C1", this);} // tgen

static void Test_S20147C1()
{
  extern Class_Descriptor cd_S20147C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20147C1, buf);
    S20147C1 *dp, &lv = *(dp=new (buf) S20147C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20147C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20147C1)");
    check_base_class_offset(lv, (S20147C2*), 0, "S20147C1");
    check_field_offset(lv, s20147c1f0, ABISELECT(8,4), "S20147C1.s20147c1f0");
    test_class_info(&lv, &cd_S20147C1);
    dp->~S20147C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20147C1(Test_S20147C1, "S20147C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20147C1C1Ev();
extern void _ZN8S20147C1D2Ev();
Name_Map name_map_S20147C1[] = {
  NSPAIR(_ZN8S20147C1C1Ev),
  NSPAIR(_ZN8S20147C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20147C2;
extern VTBL_ENTRY _ZTI8S20147C2[];
extern  VTBL_ENTRY _ZTV8S20147C2[];
static Base_Class bases_S20147C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20147C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20147C1[];
extern void _ZN8S20147C1D1Ev();
extern void _ZN8S20147C1D0Ev();
extern void _ZN8S20147C22v3Ev();
extern void _ZN8S20147C22v4Ev();
extern void _ZN8S20147C22v5Ev();
extern void _ZN8S20147C22v6Ev();
extern void _ZN8S20147C22v7Ev();
extern void _ZN8S20147C12v1Ev();
extern void _ZN8S20147C12v2Ev();
static  VTBL_ENTRY vtc_S20147C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20147C1[0]),
  (VTBL_ENTRY)&_ZN8S20147C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20147C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20147C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20147C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20147C12v2Ev,
};
extern VTBL_ENTRY _ZTV8S20147C1[];
static  VTT_ENTRY vtt_S20147C1[] = {
  {&(_ZTV8S20147C1[9]),  9,18},
  {&(_ZTV8S20147C1[9]),  9,18},
};
extern VTBL_ENTRY _ZTI8S20147C1[];
extern  VTBL_ENTRY _ZTV8S20147C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20147C1[];
Class_Descriptor cd_S20147C1 = {  "S20147C1", // class name
  bases_S20147C1, 1,
  &(vtc_S20147C1[0]), // expected_vtbl_contents
  &(vtt_S20147C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20147C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20147C1),18, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20147C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9503C2  {
  virtual  ~S9503C2(); // _ZN7S9503C2D1Ev
  virtual void  v3(); // _ZN7S9503C22v3Ev
  virtual void  v4(); // _ZN7S9503C22v4Ev
  virtual void  v5(); // _ZN7S9503C22v5Ev
  virtual void  v6(); // _ZN7S9503C22v6Ev
  virtual void  v7(); // _ZN7S9503C22v7Ev
  S9503C2(); // tgen
};
//SIG(-1 S9503C2) C1{ vd v1 v2 v3 v4 v5}


 S9503C2 ::~S9503C2(){ note_dtor("S9503C2", this);}
void  S9503C2 ::v3(){vfunc_called(this, "_ZN7S9503C22v3Ev");}
void  S9503C2 ::v4(){vfunc_called(this, "_ZN7S9503C22v4Ev");}
void  S9503C2 ::v5(){vfunc_called(this, "_ZN7S9503C22v5Ev");}
void  S9503C2 ::v6(){vfunc_called(this, "_ZN7S9503C22v6Ev");}
void  S9503C2 ::v7(){vfunc_called(this, "_ZN7S9503C22v7Ev");}
S9503C2 ::S9503C2(){ note_ctor("S9503C2", this);} // tgen

static void Test_S9503C2()
{
  extern Class_Descriptor cd_S9503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9503C2, buf);
    S9503C2 *dp, &lv = *(dp=new (buf) S9503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9503C2)");
    test_class_info(&lv, &cd_S9503C2);
    dp->~S9503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9503C2(Test_S9503C2, "S9503C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9503C2C1Ev();
extern void _ZN7S9503C2D1Ev();
Name_Map name_map_S9503C2[] = {
  NSPAIR(_ZN7S9503C2C1Ev),
  NSPAIR(_ZN7S9503C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9503C2[];
extern void _ZN7S9503C2D1Ev();
extern void _ZN7S9503C2D0Ev();
extern void _ZN7S9503C22v3Ev();
extern void _ZN7S9503C22v4Ev();
extern void _ZN7S9503C22v5Ev();
extern void _ZN7S9503C22v6Ev();
extern void _ZN7S9503C22v7Ev();
static  VTBL_ENTRY vtc_S9503C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9503C2[0]),
  (VTBL_ENTRY)&_ZN7S9503C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9503C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9503C2[];
extern  VTBL_ENTRY _ZTV7S9503C2[];
Class_Descriptor cd_S9503C2 = {  "S9503C2", // class name
  0,0,//no base classes
  &(vtc_S9503C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9503C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9503C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9503C1  : S9503C2 {
  void *s9503c1f0;
  int s9503c1f1;
  virtual void  v1(); // _ZN7S9503C12v1Ev
  virtual void  v2(); // _ZN7S9503C12v2Ev
  ~S9503C1(); // tgen
  S9503C1(); // tgen
};
//SIG(1 S9503C1) C1{ BC2{ vd v3 v4 v5 v6 v7} v1 v2 Fp Fi}


void  S9503C1 ::v1(){vfunc_called(this, "_ZN7S9503C12v1Ev");}
void  S9503C1 ::v2(){vfunc_called(this, "_ZN7S9503C12v2Ev");}
S9503C1 ::~S9503C1(){ note_dtor("S9503C1", this);} // tgen
S9503C1 ::S9503C1(){ note_ctor("S9503C1", this);} // tgen

static void Test_S9503C1()
{
  extern Class_Descriptor cd_S9503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9503C1, buf);
    S9503C1 *dp, &lv = *(dp=new (buf) S9503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9503C1)");
    check_base_class_offset(lv, (S9503C2*), 0, "S9503C1");
    check_field_offset(lv, s9503c1f0, ABISELECT(8,4), "S9503C1.s9503c1f0");
    check_field_offset(lv, s9503c1f1, ABISELECT(16,8), "S9503C1.s9503c1f1");
    test_class_info(&lv, &cd_S9503C1);
    dp->~S9503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9503C1(Test_S9503C1, "S9503C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9503C1C1Ev();
extern void _ZN7S9503C1D1Ev();
Name_Map name_map_S9503C1[] = {
  NSPAIR(_ZN7S9503C1C1Ev),
  NSPAIR(_ZN7S9503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9503C2;
extern VTBL_ENTRY _ZTI7S9503C2[];
extern  VTBL_ENTRY _ZTV7S9503C2[];
static Base_Class bases_S9503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9503C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9503C1[];
extern void _ZN7S9503C1D1Ev();
extern void _ZN7S9503C1D0Ev();
extern void _ZN7S9503C22v3Ev();
extern void _ZN7S9503C22v4Ev();
extern void _ZN7S9503C22v5Ev();
extern void _ZN7S9503C22v6Ev();
extern void _ZN7S9503C22v7Ev();
extern void _ZN7S9503C12v1Ev();
extern void _ZN7S9503C12v2Ev();
static  VTBL_ENTRY vtc_S9503C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9503C1[0]),
  (VTBL_ENTRY)&_ZN7S9503C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9503C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9503C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9503C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9503C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9503C1[];
extern  VTBL_ENTRY _ZTV7S9503C1[];
Class_Descriptor cd_S9503C1 = {  "S9503C1", // class name
  bases_S9503C1, 1,
  &(vtc_S9503C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9503C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9503C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9940C2  {
  virtual  ~S9940C2(); // _ZN7S9940C2D1Ev
  virtual void  v5(); // _ZN7S9940C22v5Ev
  virtual void  v6(); // _ZN7S9940C22v6Ev
  virtual void  v7(); // _ZN7S9940C22v7Ev
  virtual void  v8(); // _ZN7S9940C22v8Ev
  virtual void  v9(); // _ZN7S9940C22v9Ev
  S9940C2(); // tgen
};
//SIG(-1 S9940C2) C1{ vd v1 v2 v3 v4 v5}


 S9940C2 ::~S9940C2(){ note_dtor("S9940C2", this);}
void  S9940C2 ::v5(){vfunc_called(this, "_ZN7S9940C22v5Ev");}
void  S9940C2 ::v6(){vfunc_called(this, "_ZN7S9940C22v6Ev");}
void  S9940C2 ::v7(){vfunc_called(this, "_ZN7S9940C22v7Ev");}
void  S9940C2 ::v8(){vfunc_called(this, "_ZN7S9940C22v8Ev");}
void  S9940C2 ::v9(){vfunc_called(this, "_ZN7S9940C22v9Ev");}
S9940C2 ::S9940C2(){ note_ctor("S9940C2", this);} // tgen

static void Test_S9940C2()
{
  extern Class_Descriptor cd_S9940C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9940C2, buf);
    S9940C2 *dp, &lv = *(dp=new (buf) S9940C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9940C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9940C2)");
    test_class_info(&lv, &cd_S9940C2);
    dp->~S9940C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9940C2(Test_S9940C2, "S9940C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9940C2C1Ev();
extern void _ZN7S9940C2D1Ev();
Name_Map name_map_S9940C2[] = {
  NSPAIR(_ZN7S9940C2C1Ev),
  NSPAIR(_ZN7S9940C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9940C2[];
extern void _ZN7S9940C2D1Ev();
extern void _ZN7S9940C2D0Ev();
extern void _ZN7S9940C22v5Ev();
extern void _ZN7S9940C22v6Ev();
extern void _ZN7S9940C22v7Ev();
extern void _ZN7S9940C22v8Ev();
extern void _ZN7S9940C22v9Ev();
static  VTBL_ENTRY vtc_S9940C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9940C2[0]),
  (VTBL_ENTRY)&_ZN7S9940C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9940C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S9940C2[];
extern  VTBL_ENTRY _ZTV7S9940C2[];
Class_Descriptor cd_S9940C2 = {  "S9940C2", // class name
  0,0,//no base classes
  &(vtc_S9940C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9940C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9940C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9940C1  : S9940C2 {
  virtual void  v1(); // _ZN7S9940C12v1Ev
  virtual void  v2(); // _ZN7S9940C12v2Ev
  virtual void  v3(); // _ZN7S9940C12v3Ev
  virtual void  v4(); // _ZN7S9940C12v4Ev
  ~S9940C1(); // tgen
  S9940C1(); // tgen
};
//SIG(1 S9940C1) C1{ BC2{ vd v5 v6 v7 v8 v9} v1 v2 v3 v4}


void  S9940C1 ::v1(){vfunc_called(this, "_ZN7S9940C12v1Ev");}
void  S9940C1 ::v2(){vfunc_called(this, "_ZN7S9940C12v2Ev");}
void  S9940C1 ::v3(){vfunc_called(this, "_ZN7S9940C12v3Ev");}
void  S9940C1 ::v4(){vfunc_called(this, "_ZN7S9940C12v4Ev");}
S9940C1 ::~S9940C1(){ note_dtor("S9940C1", this);} // tgen
S9940C1 ::S9940C1(){ note_ctor("S9940C1", this);} // tgen

static void Test_S9940C1()
{
  extern Class_Descriptor cd_S9940C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9940C1, buf);
    S9940C1 *dp, &lv = *(dp=new (buf) S9940C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9940C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9940C1)");
    check_base_class_offset(lv, (S9940C2*), 0, "S9940C1");
    test_class_info(&lv, &cd_S9940C1);
    dp->~S9940C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9940C1(Test_S9940C1, "S9940C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9940C1C1Ev();
extern void _ZN7S9940C1D1Ev();
Name_Map name_map_S9940C1[] = {
  NSPAIR(_ZN7S9940C1C1Ev),
  NSPAIR(_ZN7S9940C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9940C2;
extern VTBL_ENTRY _ZTI7S9940C2[];
extern  VTBL_ENTRY _ZTV7S9940C2[];
static Base_Class bases_S9940C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9940C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9940C1[];
extern void _ZN7S9940C1D1Ev();
extern void _ZN7S9940C1D0Ev();
extern void _ZN7S9940C22v5Ev();
extern void _ZN7S9940C22v6Ev();
extern void _ZN7S9940C22v7Ev();
extern void _ZN7S9940C22v8Ev();
extern void _ZN7S9940C22v9Ev();
extern void _ZN7S9940C12v1Ev();
extern void _ZN7S9940C12v2Ev();
extern void _ZN7S9940C12v3Ev();
extern void _ZN7S9940C12v4Ev();
static  VTBL_ENTRY vtc_S9940C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9940C1[0]),
  (VTBL_ENTRY)&_ZN7S9940C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9940C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9940C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9940C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9940C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9940C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9940C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9940C1[];
extern  VTBL_ENTRY _ZTV7S9940C1[];
Class_Descriptor cd_S9940C1 = {  "S9940C1", // class name
  bases_S9940C1, 1,
  &(vtc_S9940C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9940C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9940C1),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9814C2  {
  virtual  ~S9814C2(); // _ZN7S9814C2D1Ev
  virtual void  v4(); // _ZN7S9814C22v4Ev
  virtual void  v5(); // _ZN7S9814C22v5Ev
  virtual void  v6(); // _ZN7S9814C22v6Ev
  virtual void  v7(); // _ZN7S9814C22v7Ev
  virtual void  v8(); // _ZN7S9814C22v8Ev
  S9814C2(); // tgen
};
//SIG(-1 S9814C2) C1{ vd v1 v2 v3 v4 v5}


 S9814C2 ::~S9814C2(){ note_dtor("S9814C2", this);}
void  S9814C2 ::v4(){vfunc_called(this, "_ZN7S9814C22v4Ev");}
void  S9814C2 ::v5(){vfunc_called(this, "_ZN7S9814C22v5Ev");}
void  S9814C2 ::v6(){vfunc_called(this, "_ZN7S9814C22v6Ev");}
void  S9814C2 ::v7(){vfunc_called(this, "_ZN7S9814C22v7Ev");}
void  S9814C2 ::v8(){vfunc_called(this, "_ZN7S9814C22v8Ev");}
S9814C2 ::S9814C2(){ note_ctor("S9814C2", this);} // tgen

static void Test_S9814C2()
{
  extern Class_Descriptor cd_S9814C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9814C2, buf);
    S9814C2 *dp, &lv = *(dp=new (buf) S9814C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9814C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9814C2)");
    test_class_info(&lv, &cd_S9814C2);
    dp->~S9814C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9814C2(Test_S9814C2, "S9814C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9814C2C1Ev();
extern void _ZN7S9814C2D1Ev();
Name_Map name_map_S9814C2[] = {
  NSPAIR(_ZN7S9814C2C1Ev),
  NSPAIR(_ZN7S9814C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9814C2[];
extern void _ZN7S9814C2D1Ev();
extern void _ZN7S9814C2D0Ev();
extern void _ZN7S9814C22v4Ev();
extern void _ZN7S9814C22v5Ev();
extern void _ZN7S9814C22v6Ev();
extern void _ZN7S9814C22v7Ev();
extern void _ZN7S9814C22v8Ev();
static  VTBL_ENTRY vtc_S9814C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9814C2[0]),
  (VTBL_ENTRY)&_ZN7S9814C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9814C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9814C2[];
extern  VTBL_ENTRY _ZTV7S9814C2[];
Class_Descriptor cd_S9814C2 = {  "S9814C2", // class name
  0,0,//no base classes
  &(vtc_S9814C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9814C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9814C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9814C1  : S9814C2 {
  virtual  ~S9814C1(); // _ZN7S9814C1D1Ev
  virtual void  v1(); // _ZN7S9814C12v1Ev
  virtual void  v2(); // _ZN7S9814C12v2Ev
  virtual void  v3(); // _ZN7S9814C12v3Ev
  S9814C1(); // tgen
};
//SIG(1 S9814C1) C1{ BC2{ vd v4 v5 v6 v7 v8} vd v1 v2 v3}


 S9814C1 ::~S9814C1(){ note_dtor("S9814C1", this);}
void  S9814C1 ::v1(){vfunc_called(this, "_ZN7S9814C12v1Ev");}
void  S9814C1 ::v2(){vfunc_called(this, "_ZN7S9814C12v2Ev");}
void  S9814C1 ::v3(){vfunc_called(this, "_ZN7S9814C12v3Ev");}
S9814C1 ::S9814C1(){ note_ctor("S9814C1", this);} // tgen

static void Test_S9814C1()
{
  extern Class_Descriptor cd_S9814C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9814C1, buf);
    S9814C1 *dp, &lv = *(dp=new (buf) S9814C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9814C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9814C1)");
    check_base_class_offset(lv, (S9814C2*), 0, "S9814C1");
    test_class_info(&lv, &cd_S9814C1);
    dp->~S9814C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9814C1(Test_S9814C1, "S9814C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9814C1C1Ev();
extern void _ZN7S9814C1D1Ev();
Name_Map name_map_S9814C1[] = {
  NSPAIR(_ZN7S9814C1C1Ev),
  NSPAIR(_ZN7S9814C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9814C2;
extern VTBL_ENTRY _ZTI7S9814C2[];
extern  VTBL_ENTRY _ZTV7S9814C2[];
static Base_Class bases_S9814C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9814C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9814C1[];
extern void _ZN7S9814C1D1Ev();
extern void _ZN7S9814C1D0Ev();
extern void _ZN7S9814C22v4Ev();
extern void _ZN7S9814C22v5Ev();
extern void _ZN7S9814C22v6Ev();
extern void _ZN7S9814C22v7Ev();
extern void _ZN7S9814C22v8Ev();
extern void _ZN7S9814C12v1Ev();
extern void _ZN7S9814C12v2Ev();
extern void _ZN7S9814C12v3Ev();
static  VTBL_ENTRY vtc_S9814C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9814C1[0]),
  (VTBL_ENTRY)&_ZN7S9814C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9814C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9814C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9814C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9814C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9814C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9814C1[];
extern  VTBL_ENTRY _ZTV7S9814C1[];
Class_Descriptor cd_S9814C1 = {  "S9814C1", // class name
  bases_S9814C1, 1,
  &(vtc_S9814C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9814C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9814C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9515C2  {
  virtual  ~S9515C2(); // _ZN7S9515C2D1Ev
  virtual void  v3(); // _ZN7S9515C22v3Ev
  virtual void  v4(); // _ZN7S9515C22v4Ev
  virtual void  v5(); // _ZN7S9515C22v5Ev
  virtual void  v6(); // _ZN7S9515C22v6Ev
  virtual void  v7(); // _ZN7S9515C22v7Ev
  S9515C2(); // tgen
};
//SIG(-1 S9515C2) C1{ vd v1 v2 v3 v4 v5}


 S9515C2 ::~S9515C2(){ note_dtor("S9515C2", this);}
void  S9515C2 ::v3(){vfunc_called(this, "_ZN7S9515C22v3Ev");}
void  S9515C2 ::v4(){vfunc_called(this, "_ZN7S9515C22v4Ev");}
void  S9515C2 ::v5(){vfunc_called(this, "_ZN7S9515C22v5Ev");}
void  S9515C2 ::v6(){vfunc_called(this, "_ZN7S9515C22v6Ev");}
void  S9515C2 ::v7(){vfunc_called(this, "_ZN7S9515C22v7Ev");}
S9515C2 ::S9515C2(){ note_ctor("S9515C2", this);} // tgen

static void Test_S9515C2()
{
  extern Class_Descriptor cd_S9515C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9515C2, buf);
    S9515C2 *dp, &lv = *(dp=new (buf) S9515C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9515C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9515C2)");
    test_class_info(&lv, &cd_S9515C2);
    dp->~S9515C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9515C2(Test_S9515C2, "S9515C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9515C2C1Ev();
extern void _ZN7S9515C2D1Ev();
Name_Map name_map_S9515C2[] = {
  NSPAIR(_ZN7S9515C2C1Ev),
  NSPAIR(_ZN7S9515C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9515C2[];
extern void _ZN7S9515C2D1Ev();
extern void _ZN7S9515C2D0Ev();
extern void _ZN7S9515C22v3Ev();
extern void _ZN7S9515C22v4Ev();
extern void _ZN7S9515C22v5Ev();
extern void _ZN7S9515C22v6Ev();
extern void _ZN7S9515C22v7Ev();
static  VTBL_ENTRY vtc_S9515C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9515C2[0]),
  (VTBL_ENTRY)&_ZN7S9515C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9515C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9515C2[];
extern  VTBL_ENTRY _ZTV7S9515C2[];
Class_Descriptor cd_S9515C2 = {  "S9515C2", // class name
  0,0,//no base classes
  &(vtc_S9515C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9515C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9515C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9515C1  : S9515C2 {
  void *s9515c1f0;
  virtual  ~S9515C1(); // _ZN7S9515C1D1Ev
  virtual void  v1(); // _ZN7S9515C12v1Ev
  virtual void  v2(); // _ZN7S9515C12v2Ev
  S9515C1(); // tgen
};
//SIG(1 S9515C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2 Fp}


 S9515C1 ::~S9515C1(){ note_dtor("S9515C1", this);}
void  S9515C1 ::v1(){vfunc_called(this, "_ZN7S9515C12v1Ev");}
void  S9515C1 ::v2(){vfunc_called(this, "_ZN7S9515C12v2Ev");}
S9515C1 ::S9515C1(){ note_ctor("S9515C1", this);} // tgen

static void Test_S9515C1()
{
  extern Class_Descriptor cd_S9515C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9515C1, buf);
    S9515C1 *dp, &lv = *(dp=new (buf) S9515C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9515C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9515C1)");
    check_base_class_offset(lv, (S9515C2*), 0, "S9515C1");
    check_field_offset(lv, s9515c1f0, ABISELECT(8,4), "S9515C1.s9515c1f0");
    test_class_info(&lv, &cd_S9515C1);
    dp->~S9515C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9515C1(Test_S9515C1, "S9515C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9515C1C1Ev();
extern void _ZN7S9515C1D1Ev();
Name_Map name_map_S9515C1[] = {
  NSPAIR(_ZN7S9515C1C1Ev),
  NSPAIR(_ZN7S9515C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9515C2;
extern VTBL_ENTRY _ZTI7S9515C2[];
extern  VTBL_ENTRY _ZTV7S9515C2[];
static Base_Class bases_S9515C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9515C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9515C1[];
extern void _ZN7S9515C1D1Ev();
extern void _ZN7S9515C1D0Ev();
extern void _ZN7S9515C22v3Ev();
extern void _ZN7S9515C22v4Ev();
extern void _ZN7S9515C22v5Ev();
extern void _ZN7S9515C22v6Ev();
extern void _ZN7S9515C22v7Ev();
extern void _ZN7S9515C12v1Ev();
extern void _ZN7S9515C12v2Ev();
static  VTBL_ENTRY vtc_S9515C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9515C1[0]),
  (VTBL_ENTRY)&_ZN7S9515C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9515C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9515C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9515C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9515C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9515C1[];
extern  VTBL_ENTRY _ZTV7S9515C1[];
Class_Descriptor cd_S9515C1 = {  "S9515C1", // class name
  bases_S9515C1, 1,
  &(vtc_S9515C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9515C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9515C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16097C1  {
  ::S3350C8_nt s16097c1f0;
  ::S4845C8_nt s16097c1f1;
  void  mf16097c1(); // _ZN8S16097C19mf16097c1Ev
};
//SIG(1 S16097C1) C1{ m FC2{ m Fi} FC3{ Fi[2] Fc[448] Fi}}


void  S16097C1 ::mf16097c1(){}

static void Test_S16097C1()
{
  {
    init_simple_test("S16097C1");
    S16097C1 lv;
    check2(sizeof(lv), 464, "sizeof(S16097C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16097C1)");
    check_field_offset(lv, s16097c1f0, 0, "S16097C1.s16097c1f0");
    check_field_offset(lv, s16097c1f1, 4, "S16097C1.s16097c1f1");
  }
}
static Arrange_To_Call_Me vS16097C1(Test_S16097C1, "S16097C1", 464);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9502C2  {
  virtual  ~S9502C2(); // _ZN7S9502C2D1Ev
  virtual void  v3(); // _ZN7S9502C22v3Ev
  virtual void  v4(); // _ZN7S9502C22v4Ev
  virtual void  v5(); // _ZN7S9502C22v5Ev
  virtual void  v6(); // _ZN7S9502C22v6Ev
  virtual void  v7(); // _ZN7S9502C22v7Ev
  S9502C2(); // tgen
};
//SIG(-1 S9502C2) C1{ vd v1 v2 v3 v4 v5}


 S9502C2 ::~S9502C2(){ note_dtor("S9502C2", this);}
void  S9502C2 ::v3(){vfunc_called(this, "_ZN7S9502C22v3Ev");}
void  S9502C2 ::v4(){vfunc_called(this, "_ZN7S9502C22v4Ev");}
void  S9502C2 ::v5(){vfunc_called(this, "_ZN7S9502C22v5Ev");}
void  S9502C2 ::v6(){vfunc_called(this, "_ZN7S9502C22v6Ev");}
void  S9502C2 ::v7(){vfunc_called(this, "_ZN7S9502C22v7Ev");}
S9502C2 ::S9502C2(){ note_ctor("S9502C2", this);} // tgen

static void Test_S9502C2()
{
  extern Class_Descriptor cd_S9502C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9502C2, buf);
    S9502C2 *dp, &lv = *(dp=new (buf) S9502C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9502C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9502C2)");
    test_class_info(&lv, &cd_S9502C2);
    dp->~S9502C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9502C2(Test_S9502C2, "S9502C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9502C2C1Ev();
extern void _ZN7S9502C2D1Ev();
Name_Map name_map_S9502C2[] = {
  NSPAIR(_ZN7S9502C2C1Ev),
  NSPAIR(_ZN7S9502C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9502C2[];
extern void _ZN7S9502C2D1Ev();
extern void _ZN7S9502C2D0Ev();
extern void _ZN7S9502C22v3Ev();
extern void _ZN7S9502C22v4Ev();
extern void _ZN7S9502C22v5Ev();
extern void _ZN7S9502C22v6Ev();
extern void _ZN7S9502C22v7Ev();
static  VTBL_ENTRY vtc_S9502C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9502C2[0]),
  (VTBL_ENTRY)&_ZN7S9502C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9502C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9502C2[];
extern  VTBL_ENTRY _ZTV7S9502C2[];
Class_Descriptor cd_S9502C2 = {  "S9502C2", // class name
  0,0,//no base classes
  &(vtc_S9502C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9502C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9502C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9502C1  : S9502C2 {
  int s9502c1f0;
  virtual void  v1(); // _ZN7S9502C12v1Ev
  virtual void  v2(); // _ZN7S9502C12v2Ev
  ~S9502C1(); // tgen
  S9502C1(); // tgen
};
//SIG(1 S9502C1) C1{ BC2{ vd v3 v4 v5 v6 v7} v1 v2 Fi}


void  S9502C1 ::v1(){vfunc_called(this, "_ZN7S9502C12v1Ev");}
void  S9502C1 ::v2(){vfunc_called(this, "_ZN7S9502C12v2Ev");}
S9502C1 ::~S9502C1(){ note_dtor("S9502C1", this);} // tgen
S9502C1 ::S9502C1(){ note_ctor("S9502C1", this);} // tgen

static void Test_S9502C1()
{
  extern Class_Descriptor cd_S9502C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9502C1, buf);
    S9502C1 *dp, &lv = *(dp=new (buf) S9502C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9502C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9502C1)");
    check_base_class_offset(lv, (S9502C2*), 0, "S9502C1");
    check_field_offset(lv, s9502c1f0, ABISELECT(8,4), "S9502C1.s9502c1f0");
    test_class_info(&lv, &cd_S9502C1);
    dp->~S9502C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9502C1(Test_S9502C1, "S9502C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9502C1C1Ev();
extern void _ZN7S9502C1D1Ev();
Name_Map name_map_S9502C1[] = {
  NSPAIR(_ZN7S9502C1C1Ev),
  NSPAIR(_ZN7S9502C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9502C2;
extern VTBL_ENTRY _ZTI7S9502C2[];
extern  VTBL_ENTRY _ZTV7S9502C2[];
static Base_Class bases_S9502C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9502C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9502C1[];
extern void _ZN7S9502C1D1Ev();
extern void _ZN7S9502C1D0Ev();
extern void _ZN7S9502C22v3Ev();
extern void _ZN7S9502C22v4Ev();
extern void _ZN7S9502C22v5Ev();
extern void _ZN7S9502C22v6Ev();
extern void _ZN7S9502C22v7Ev();
extern void _ZN7S9502C12v1Ev();
extern void _ZN7S9502C12v2Ev();
static  VTBL_ENTRY vtc_S9502C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9502C1[0]),
  (VTBL_ENTRY)&_ZN7S9502C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9502C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9502C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9502C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9502C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9502C1[];
extern  VTBL_ENTRY _ZTV7S9502C1[];
Class_Descriptor cd_S9502C1 = {  "S9502C1", // class name
  bases_S9502C1, 1,
  &(vtc_S9502C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9502C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9502C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8982C2  {
  virtual  ~S8982C2(); // _ZN7S8982C2D1Ev
  virtual void  v2(); // _ZN7S8982C22v2Ev
  virtual void  v3(); // _ZN7S8982C22v3Ev
  virtual void  v4(); // _ZN7S8982C22v4Ev
  virtual void  v5(); // _ZN7S8982C22v5Ev
  virtual void  v6(); // _ZN7S8982C22v6Ev
  S8982C2(); // tgen
};
//SIG(-1 S8982C2) C1{ vd v1 v2 v3 v4 v5}


 S8982C2 ::~S8982C2(){ note_dtor("S8982C2", this);}
void  S8982C2 ::v2(){vfunc_called(this, "_ZN7S8982C22v2Ev");}
void  S8982C2 ::v3(){vfunc_called(this, "_ZN7S8982C22v3Ev");}
void  S8982C2 ::v4(){vfunc_called(this, "_ZN7S8982C22v4Ev");}
void  S8982C2 ::v5(){vfunc_called(this, "_ZN7S8982C22v5Ev");}
void  S8982C2 ::v6(){vfunc_called(this, "_ZN7S8982C22v6Ev");}
S8982C2 ::S8982C2(){ note_ctor("S8982C2", this);} // tgen

static void Test_S8982C2()
{
  extern Class_Descriptor cd_S8982C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8982C2, buf);
    S8982C2 *dp, &lv = *(dp=new (buf) S8982C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8982C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8982C2)");
    test_class_info(&lv, &cd_S8982C2);
    dp->~S8982C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8982C2(Test_S8982C2, "S8982C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8982C2C1Ev();
extern void _ZN7S8982C2D1Ev();
Name_Map name_map_S8982C2[] = {
  NSPAIR(_ZN7S8982C2C1Ev),
  NSPAIR(_ZN7S8982C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8982C2[];
extern void _ZN7S8982C2D1Ev();
extern void _ZN7S8982C2D0Ev();
extern void _ZN7S8982C22v2Ev();
extern void _ZN7S8982C22v3Ev();
extern void _ZN7S8982C22v4Ev();
extern void _ZN7S8982C22v5Ev();
extern void _ZN7S8982C22v6Ev();
static  VTBL_ENTRY vtc_S8982C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8982C2[0]),
  (VTBL_ENTRY)&_ZN7S8982C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8982C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8982C2[];
extern  VTBL_ENTRY _ZTV7S8982C2[];
Class_Descriptor cd_S8982C2 = {  "S8982C2", // class name
  0,0,//no base classes
  &(vtc_S8982C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8982C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8982C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8982C1  : S8982C2 {
  void *s8982c1f0[2];
  virtual void  v1(); // _ZN7S8982C12v1Ev
  ~S8982C1(); // tgen
  S8982C1(); // tgen
};
//SIG(1 S8982C1) C1{ BC2{ vd v2 v3 v4 v5 v6} v1 Fp[2]}


void  S8982C1 ::v1(){vfunc_called(this, "_ZN7S8982C12v1Ev");}
S8982C1 ::~S8982C1(){ note_dtor("S8982C1", this);} // tgen
S8982C1 ::S8982C1(){ note_ctor("S8982C1", this);} // tgen

static void Test_S8982C1()
{
  extern Class_Descriptor cd_S8982C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8982C1, buf);
    S8982C1 *dp, &lv = *(dp=new (buf) S8982C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8982C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8982C1)");
    check_base_class_offset(lv, (S8982C2*), 0, "S8982C1");
    check_field_offset(lv, s8982c1f0, ABISELECT(8,4), "S8982C1.s8982c1f0");
    test_class_info(&lv, &cd_S8982C1);
    dp->~S8982C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8982C1(Test_S8982C1, "S8982C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8982C1C1Ev();
extern void _ZN7S8982C1D1Ev();
Name_Map name_map_S8982C1[] = {
  NSPAIR(_ZN7S8982C1C1Ev),
  NSPAIR(_ZN7S8982C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8982C2;
extern VTBL_ENTRY _ZTI7S8982C2[];
extern  VTBL_ENTRY _ZTV7S8982C2[];
static Base_Class bases_S8982C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8982C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8982C1[];
extern void _ZN7S8982C1D1Ev();
extern void _ZN7S8982C1D0Ev();
extern void _ZN7S8982C22v2Ev();
extern void _ZN7S8982C22v3Ev();
extern void _ZN7S8982C22v4Ev();
extern void _ZN7S8982C22v5Ev();
extern void _ZN7S8982C22v6Ev();
extern void _ZN7S8982C12v1Ev();
static  VTBL_ENTRY vtc_S8982C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8982C1[0]),
  (VTBL_ENTRY)&_ZN7S8982C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8982C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8982C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8982C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8982C1[];
extern  VTBL_ENTRY _ZTV7S8982C1[];
Class_Descriptor cd_S8982C1 = {  "S8982C1", // class name
  bases_S8982C1, 1,
  &(vtc_S8982C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8982C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8982C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9516C2  {
  virtual  ~S9516C2(); // _ZN7S9516C2D1Ev
  virtual void  v3(); // _ZN7S9516C22v3Ev
  virtual void  v4(); // _ZN7S9516C22v4Ev
  virtual void  v5(); // _ZN7S9516C22v5Ev
  virtual void  v6(); // _ZN7S9516C22v6Ev
  virtual void  v7(); // _ZN7S9516C22v7Ev
  S9516C2(); // tgen
};
//SIG(-1 S9516C2) C1{ vd v1 v2 v3 v4 v5}


 S9516C2 ::~S9516C2(){ note_dtor("S9516C2", this);}
void  S9516C2 ::v3(){vfunc_called(this, "_ZN7S9516C22v3Ev");}
void  S9516C2 ::v4(){vfunc_called(this, "_ZN7S9516C22v4Ev");}
void  S9516C2 ::v5(){vfunc_called(this, "_ZN7S9516C22v5Ev");}
void  S9516C2 ::v6(){vfunc_called(this, "_ZN7S9516C22v6Ev");}
void  S9516C2 ::v7(){vfunc_called(this, "_ZN7S9516C22v7Ev");}
S9516C2 ::S9516C2(){ note_ctor("S9516C2", this);} // tgen

static void Test_S9516C2()
{
  extern Class_Descriptor cd_S9516C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9516C2, buf);
    S9516C2 *dp, &lv = *(dp=new (buf) S9516C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9516C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9516C2)");
    test_class_info(&lv, &cd_S9516C2);
    dp->~S9516C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9516C2(Test_S9516C2, "S9516C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9516C2C1Ev();
extern void _ZN7S9516C2D1Ev();
Name_Map name_map_S9516C2[] = {
  NSPAIR(_ZN7S9516C2C1Ev),
  NSPAIR(_ZN7S9516C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9516C2[];
extern void _ZN7S9516C2D1Ev();
extern void _ZN7S9516C2D0Ev();
extern void _ZN7S9516C22v3Ev();
extern void _ZN7S9516C22v4Ev();
extern void _ZN7S9516C22v5Ev();
extern void _ZN7S9516C22v6Ev();
extern void _ZN7S9516C22v7Ev();
static  VTBL_ENTRY vtc_S9516C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9516C2[0]),
  (VTBL_ENTRY)&_ZN7S9516C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9516C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9516C2[];
extern  VTBL_ENTRY _ZTV7S9516C2[];
Class_Descriptor cd_S9516C2 = {  "S9516C2", // class name
  0,0,//no base classes
  &(vtc_S9516C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9516C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9516C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9516C1  : S9516C2 {
  virtual  ~S9516C1(); // _ZN7S9516C1D1Ev
  virtual void  v1(); // _ZN7S9516C12v1Ev
  virtual void  v2(); // _ZN7S9516C12v2Ev
  S9516C1(); // tgen
};
//SIG(1 S9516C1) C1{ BC2{ vd v3 v4 v5 v6 v7} vd v1 v2}


 S9516C1 ::~S9516C1(){ note_dtor("S9516C1", this);}
void  S9516C1 ::v1(){vfunc_called(this, "_ZN7S9516C12v1Ev");}
void  S9516C1 ::v2(){vfunc_called(this, "_ZN7S9516C12v2Ev");}
S9516C1 ::S9516C1(){ note_ctor("S9516C1", this);} // tgen

static void Test_S9516C1()
{
  extern Class_Descriptor cd_S9516C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9516C1, buf);
    S9516C1 *dp, &lv = *(dp=new (buf) S9516C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9516C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9516C1)");
    check_base_class_offset(lv, (S9516C2*), 0, "S9516C1");
    test_class_info(&lv, &cd_S9516C1);
    dp->~S9516C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9516C1(Test_S9516C1, "S9516C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9516C1C1Ev();
extern void _ZN7S9516C1D1Ev();
Name_Map name_map_S9516C1[] = {
  NSPAIR(_ZN7S9516C1C1Ev),
  NSPAIR(_ZN7S9516C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9516C2;
extern VTBL_ENTRY _ZTI7S9516C2[];
extern  VTBL_ENTRY _ZTV7S9516C2[];
static Base_Class bases_S9516C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9516C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9516C1[];
extern void _ZN7S9516C1D1Ev();
extern void _ZN7S9516C1D0Ev();
extern void _ZN7S9516C22v3Ev();
extern void _ZN7S9516C22v4Ev();
extern void _ZN7S9516C22v5Ev();
extern void _ZN7S9516C22v6Ev();
extern void _ZN7S9516C22v7Ev();
extern void _ZN7S9516C12v1Ev();
extern void _ZN7S9516C12v2Ev();
static  VTBL_ENTRY vtc_S9516C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9516C1[0]),
  (VTBL_ENTRY)&_ZN7S9516C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9516C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9516C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9516C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9516C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9516C1[];
extern  VTBL_ENTRY _ZTV7S9516C1[];
Class_Descriptor cd_S9516C1 = {  "S9516C1", // class name
  bases_S9516C1, 1,
  &(vtc_S9516C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9516C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9516C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9811C2  {
  virtual  ~S9811C2(); // _ZN7S9811C2D1Ev
  virtual void  v4(); // _ZN7S9811C22v4Ev
  virtual void  v5(); // _ZN7S9811C22v5Ev
  virtual void  v6(); // _ZN7S9811C22v6Ev
  virtual void  v7(); // _ZN7S9811C22v7Ev
  virtual void  v8(); // _ZN7S9811C22v8Ev
  S9811C2(); // tgen
};
//SIG(-1 S9811C2) C1{ vd v1 v2 v3 v4 v5}


 S9811C2 ::~S9811C2(){ note_dtor("S9811C2", this);}
void  S9811C2 ::v4(){vfunc_called(this, "_ZN7S9811C22v4Ev");}
void  S9811C2 ::v5(){vfunc_called(this, "_ZN7S9811C22v5Ev");}
void  S9811C2 ::v6(){vfunc_called(this, "_ZN7S9811C22v6Ev");}
void  S9811C2 ::v7(){vfunc_called(this, "_ZN7S9811C22v7Ev");}
void  S9811C2 ::v8(){vfunc_called(this, "_ZN7S9811C22v8Ev");}
S9811C2 ::S9811C2(){ note_ctor("S9811C2", this);} // tgen

static void Test_S9811C2()
{
  extern Class_Descriptor cd_S9811C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9811C2, buf);
    S9811C2 *dp, &lv = *(dp=new (buf) S9811C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9811C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9811C2)");
    test_class_info(&lv, &cd_S9811C2);
    dp->~S9811C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9811C2(Test_S9811C2, "S9811C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9811C2C1Ev();
extern void _ZN7S9811C2D1Ev();
Name_Map name_map_S9811C2[] = {
  NSPAIR(_ZN7S9811C2C1Ev),
  NSPAIR(_ZN7S9811C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9811C2[];
extern void _ZN7S9811C2D1Ev();
extern void _ZN7S9811C2D0Ev();
extern void _ZN7S9811C22v4Ev();
extern void _ZN7S9811C22v5Ev();
extern void _ZN7S9811C22v6Ev();
extern void _ZN7S9811C22v7Ev();
extern void _ZN7S9811C22v8Ev();
static  VTBL_ENTRY vtc_S9811C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9811C2[0]),
  (VTBL_ENTRY)&_ZN7S9811C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9811C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9811C2[];
extern  VTBL_ENTRY _ZTV7S9811C2[];
Class_Descriptor cd_S9811C2 = {  "S9811C2", // class name
  0,0,//no base classes
  &(vtc_S9811C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9811C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9811C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9811C1  : S9811C2 {
  virtual void  v1(); // _ZN7S9811C12v1Ev
  virtual void  v2(); // _ZN7S9811C12v2Ev
  virtual void  v3(); // _ZN7S9811C12v3Ev
  ~S9811C1(); // tgen
  S9811C1(); // tgen
};
//SIG(1 S9811C1) C1{ BC2{ vd v4 v5 v6 v7 v8} v1 v2 v3}


void  S9811C1 ::v1(){vfunc_called(this, "_ZN7S9811C12v1Ev");}
void  S9811C1 ::v2(){vfunc_called(this, "_ZN7S9811C12v2Ev");}
void  S9811C1 ::v3(){vfunc_called(this, "_ZN7S9811C12v3Ev");}
S9811C1 ::~S9811C1(){ note_dtor("S9811C1", this);} // tgen
S9811C1 ::S9811C1(){ note_ctor("S9811C1", this);} // tgen

static void Test_S9811C1()
{
  extern Class_Descriptor cd_S9811C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9811C1, buf);
    S9811C1 *dp, &lv = *(dp=new (buf) S9811C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9811C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9811C1)");
    check_base_class_offset(lv, (S9811C2*), 0, "S9811C1");
    test_class_info(&lv, &cd_S9811C1);
    dp->~S9811C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9811C1(Test_S9811C1, "S9811C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9811C1C1Ev();
extern void _ZN7S9811C1D1Ev();
Name_Map name_map_S9811C1[] = {
  NSPAIR(_ZN7S9811C1C1Ev),
  NSPAIR(_ZN7S9811C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9811C2;
extern VTBL_ENTRY _ZTI7S9811C2[];
extern  VTBL_ENTRY _ZTV7S9811C2[];
static Base_Class bases_S9811C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9811C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9811C1[];
extern void _ZN7S9811C1D1Ev();
extern void _ZN7S9811C1D0Ev();
extern void _ZN7S9811C22v4Ev();
extern void _ZN7S9811C22v5Ev();
extern void _ZN7S9811C22v6Ev();
extern void _ZN7S9811C22v7Ev();
extern void _ZN7S9811C22v8Ev();
extern void _ZN7S9811C12v1Ev();
extern void _ZN7S9811C12v2Ev();
extern void _ZN7S9811C12v3Ev();
static  VTBL_ENTRY vtc_S9811C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9811C1[0]),
  (VTBL_ENTRY)&_ZN7S9811C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9811C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9811C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9811C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9811C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9811C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9811C1[];
extern  VTBL_ENTRY _ZTV7S9811C1[];
Class_Descriptor cd_S9811C1 = {  "S9811C1", // class name
  bases_S9811C1, 1,
  &(vtc_S9811C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9811C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9811C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9504C2  {
  virtual  ~S9504C2(); // _ZN7S9504C2D1Ev
  virtual void  v3(); // _ZN7S9504C22v3Ev
  virtual void  v4(); // _ZN7S9504C22v4Ev
  virtual void  v5(); // _ZN7S9504C22v5Ev
  virtual void  v6(); // _ZN7S9504C22v6Ev
  virtual void  v7(); // _ZN7S9504C22v7Ev
  S9504C2(); // tgen
};
//SIG(-1 S9504C2) C1{ vd v1 v2 v3 v4 v5}


 S9504C2 ::~S9504C2(){ note_dtor("S9504C2", this);}
void  S9504C2 ::v3(){vfunc_called(this, "_ZN7S9504C22v3Ev");}
void  S9504C2 ::v4(){vfunc_called(this, "_ZN7S9504C22v4Ev");}
void  S9504C2 ::v5(){vfunc_called(this, "_ZN7S9504C22v5Ev");}
void  S9504C2 ::v6(){vfunc_called(this, "_ZN7S9504C22v6Ev");}
void  S9504C2 ::v7(){vfunc_called(this, "_ZN7S9504C22v7Ev");}
S9504C2 ::S9504C2(){ note_ctor("S9504C2", this);} // tgen

static void Test_S9504C2()
{
  extern Class_Descriptor cd_S9504C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9504C2, buf);
    S9504C2 *dp, &lv = *(dp=new (buf) S9504C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9504C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9504C2)");
    test_class_info(&lv, &cd_S9504C2);
    dp->~S9504C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9504C2(Test_S9504C2, "S9504C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9504C2C1Ev();
extern void _ZN7S9504C2D1Ev();
Name_Map name_map_S9504C2[] = {
  NSPAIR(_ZN7S9504C2C1Ev),
  NSPAIR(_ZN7S9504C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9504C2[];
extern void _ZN7S9504C2D1Ev();
extern void _ZN7S9504C2D0Ev();
extern void _ZN7S9504C22v3Ev();
extern void _ZN7S9504C22v4Ev();
extern void _ZN7S9504C22v5Ev();
extern void _ZN7S9504C22v6Ev();
extern void _ZN7S9504C22v7Ev();
static  VTBL_ENTRY vtc_S9504C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9504C2[0]),
  (VTBL_ENTRY)&_ZN7S9504C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9504C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S9504C2[];
extern  VTBL_ENTRY _ZTV7S9504C2[];
Class_Descriptor cd_S9504C2 = {  "S9504C2", // class name
  0,0,//no base classes
  &(vtc_S9504C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9504C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9504C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9504C1  : S9504C2 {
  void *s9504c1f0;
  virtual void  v1(); // _ZN7S9504C12v1Ev
  virtual void  v2(); // _ZN7S9504C12v2Ev
  ~S9504C1(); // tgen
  S9504C1(); // tgen
};
//SIG(1 S9504C1) C1{ BC2{ vd v3 v4 v5 v6 v7} v1 v2 Fp}


void  S9504C1 ::v1(){vfunc_called(this, "_ZN7S9504C12v1Ev");}
void  S9504C1 ::v2(){vfunc_called(this, "_ZN7S9504C12v2Ev");}
S9504C1 ::~S9504C1(){ note_dtor("S9504C1", this);} // tgen
S9504C1 ::S9504C1(){ note_ctor("S9504C1", this);} // tgen

static void Test_S9504C1()
{
  extern Class_Descriptor cd_S9504C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9504C1, buf);
    S9504C1 *dp, &lv = *(dp=new (buf) S9504C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9504C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9504C1)");
    check_base_class_offset(lv, (S9504C2*), 0, "S9504C1");
    check_field_offset(lv, s9504c1f0, ABISELECT(8,4), "S9504C1.s9504c1f0");
    test_class_info(&lv, &cd_S9504C1);
    dp->~S9504C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9504C1(Test_S9504C1, "S9504C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9504C1C1Ev();
extern void _ZN7S9504C1D1Ev();
Name_Map name_map_S9504C1[] = {
  NSPAIR(_ZN7S9504C1C1Ev),
  NSPAIR(_ZN7S9504C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9504C2;
extern VTBL_ENTRY _ZTI7S9504C2[];
extern  VTBL_ENTRY _ZTV7S9504C2[];
static Base_Class bases_S9504C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9504C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9504C1[];
extern void _ZN7S9504C1D1Ev();
extern void _ZN7S9504C1D0Ev();
extern void _ZN7S9504C22v3Ev();
extern void _ZN7S9504C22v4Ev();
extern void _ZN7S9504C22v5Ev();
extern void _ZN7S9504C22v6Ev();
extern void _ZN7S9504C22v7Ev();
extern void _ZN7S9504C12v1Ev();
extern void _ZN7S9504C12v2Ev();
static  VTBL_ENTRY vtc_S9504C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9504C1[0]),
  (VTBL_ENTRY)&_ZN7S9504C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9504C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9504C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9504C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9504C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9504C1[];
extern  VTBL_ENTRY _ZTV7S9504C1[];
Class_Descriptor cd_S9504C1 = {  "S9504C1", // class name
  bases_S9504C1, 1,
  &(vtc_S9504C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9504C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9504C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14092C1  {
  void *s14092c1f0;
  ::S4846C9_nt s14092c1f1;
  ::S8480C8_nt s14092c1f2;
  void *s14092c1f3;
};
//SIG(1 S14092C1) C1{ Fp FC2{ Fc[12]} FC3{ Fi Fp Fi} Fp}



static void Test_S14092C1()
{
  {
    init_simple_test("S14092C1");
    S14092C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S14092C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14092C1)");
    check_field_offset(lv, s14092c1f0, 0, "S14092C1.s14092c1f0");
    check_field_offset(lv, s14092c1f1, ABISELECT(8,4), "S14092C1.s14092c1f1");
    check_field_offset(lv, s14092c1f2, ABISELECT(24,16), "S14092C1.s14092c1f2");
    check_field_offset(lv, s14092c1f3, ABISELECT(48,28), "S14092C1.s14092c1f3");
  }
}
static Arrange_To_Call_Me vS14092C1(Test_S14092C1, "S14092C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20708C4  {
  virtual void  v1(); // _ZN8S20708C42v1Ev
  ~S20708C4(); // tgen
  S20708C4(); // tgen
};
//SIG(-1 S20708C4) C1{ v1}


void  S20708C4 ::v1(){vfunc_called(this, "_ZN8S20708C42v1Ev");}
S20708C4 ::~S20708C4(){ note_dtor("S20708C4", this);} // tgen
S20708C4 ::S20708C4(){ note_ctor("S20708C4", this);} // tgen

static void Test_S20708C4()
{
  extern Class_Descriptor cd_S20708C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20708C4, buf);
    S20708C4 *dp, &lv = *(dp=new (buf) S20708C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20708C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20708C4)");
    test_class_info(&lv, &cd_S20708C4);
    dp->~S20708C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20708C4(Test_S20708C4, "S20708C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20708C4C1Ev();
extern void _ZN8S20708C4D1Ev();
Name_Map name_map_S20708C4[] = {
  NSPAIR(_ZN8S20708C4C1Ev),
  NSPAIR(_ZN8S20708C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20708C4[];
extern void _ZN8S20708C42v1Ev();
static  VTBL_ENTRY vtc_S20708C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20708C4[0]),
  (VTBL_ENTRY)&_ZN8S20708C42v1Ev,
};
extern VTBL_ENTRY _ZTI8S20708C4[];
extern  VTBL_ENTRY _ZTV8S20708C4[];
Class_Descriptor cd_S20708C4 = {  "S20708C4", // class name
  0,0,//no base classes
  &(vtc_S20708C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20708C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20708C4),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20708C2  : virtual S2121C38 , S20708C4 , virtual S2121C28 {
  ~S20708C2(); // tgen
  S20708C2(); // tgen
};
//SIG(-1 S20708C2) C1{ VBC2{ m} BC3{ v1} VBC4{ m}}


S20708C2 ::~S20708C2(){ note_dtor("S20708C2", this);} // tgen
S20708C2 ::S20708C2(){ note_ctor("S20708C2", this);} // tgen

static void Test_S20708C2()
{
  extern Class_Descriptor cd_S20708C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20708C2, buf);
    S20708C2 *dp, &lv = *(dp=new (buf) S20708C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20708C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20708C2)");
    check_base_class_offset(lv, (S2121C38*), 0, "S20708C2");
    check_base_class_offset(lv, (S20708C4*), 0, "S20708C2");
    check_base_class_offset(lv, (S2121C28*), 0, "S20708C2");
    test_class_info(&lv, &cd_S20708C2);
    dp->~S20708C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20708C2(Test_S20708C2, "S20708C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20708C2C1Ev();
extern void _ZN8S20708C2D1Ev();
Name_Map name_map_S20708C2[] = {
  NSPAIR(_ZN8S20708C2C1Ev),
  NSPAIR(_ZN8S20708C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20708C4;
extern VTBL_ENTRY _ZTI8S20708C4[];
extern  VTBL_ENTRY _ZTV8S20708C4[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
static Base_Class bases_S20708C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20708C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20708C2[];
extern void _ZN8S20708C42v1Ev();
static  VTBL_ENTRY vtc_S20708C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20708C2[0]),
  (VTBL_ENTRY)&_ZN8S20708C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S20708C2[];
static  VTT_ENTRY vtt_S20708C2[] = {
  {&(_ZTV8S20708C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20708C2[];
extern  VTBL_ENTRY _ZTV8S20708C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20708C2[];
Class_Descriptor cd_S20708C2 = {  "S20708C2", // class name
  bases_S20708C2, 3,
  &(vtc_S20708C2[0]), // expected_vtbl_contents
  &(vtt_S20708C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20708C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20708C2),5, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20708C2),1, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20708C1  : virtual S20708C2 {
  ~S20708C1(); // tgen
  S20708C1(); // tgen
};
//SIG(1 S20708C1) C1{ VBC2{ VBC3{ m} BC4{ v1} VBC5{ m}}}


S20708C1 ::~S20708C1(){ note_dtor("S20708C1", this);} // tgen
S20708C1 ::S20708C1(){ note_ctor("S20708C1", this);} // tgen

static void Test_S20708C1()
{
  extern Class_Descriptor cd_S20708C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20708C1, buf);
    S20708C1 *dp, &lv = *(dp=new (buf) S20708C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20708C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20708C1)");
    check_base_class_offset(lv, (S2121C38*)(S20708C2*), 0, "S20708C1");
    check_base_class_offset(lv, (S20708C4*)(S20708C2*), 0, "S20708C1");
    check_base_class_offset(lv, (S2121C28*)(S20708C2*), 0, "S20708C1");
    check_base_class_offset(lv, (S20708C2*), 0, "S20708C1");
    test_class_info(&lv, &cd_S20708C1);
    dp->~S20708C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20708C1(Test_S20708C1, "S20708C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20708C1C1Ev();
extern void _ZN8S20708C1D1Ev();
Name_Map name_map_S20708C1[] = {
  NSPAIR(_ZN8S20708C1C1Ev),
  NSPAIR(_ZN8S20708C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
extern Class_Descriptor cd_S20708C4;
extern VTBL_ENTRY _ZTI8S20708C4[];
extern  VTBL_ENTRY _ZTV8S20708C4[];
extern Class_Descriptor cd_S2121C28;
extern VTBL_ENTRY _ZTI8S2121C28[];
extern Class_Descriptor cd_S20708C2;
extern VTBL_ENTRY _ZTI8S20708C2[];
extern  VTBL_ENTRY _ZTV8S20708C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20708C2[];
static Base_Class bases_S20708C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20708C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2121C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20708C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20708C1[];
extern void _ZN8S20708C42v1Ev();
static  VTBL_ENTRY vtc_S20708C1[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20708C1[0]),
  (VTBL_ENTRY)&_ZN8S20708C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S20708C1[];
extern void _ZN8S20708C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20708C2__8S20708C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20708C2[0]),
  (VTBL_ENTRY)&_ZN8S20708C42v1Ev,
};
static  VTT_ENTRY vtt_S20708C1[] = {
  {&(_ZTV8S20708C1[6]),  6,7},
  {&(_ZTV8S20708C1[6]),  6,7},
  {&(_tg__ZTV8S20708C2__8S20708C1[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S20708C1[];
extern  VTBL_ENTRY _ZTV8S20708C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20708C1[];
Class_Descriptor cd_S20708C1 = {  "S20708C1", // class name
  bases_S20708C1, 4,
  &(vtc_S20708C1[0]), // expected_vtbl_contents
  &(vtt_S20708C1[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20708C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20708C1),7, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20708C1),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8984C2  {
  virtual  ~S8984C2(); // _ZN7S8984C2D1Ev
  virtual void  v2(); // _ZN7S8984C22v2Ev
  virtual void  v3(); // _ZN7S8984C22v3Ev
  virtual void  v4(); // _ZN7S8984C22v4Ev
  virtual void  v5(); // _ZN7S8984C22v5Ev
  virtual void  v6(); // _ZN7S8984C22v6Ev
  S8984C2(); // tgen
};
//SIG(-1 S8984C2) C1{ vd v1 v2 v3 v4 v5}


 S8984C2 ::~S8984C2(){ note_dtor("S8984C2", this);}
void  S8984C2 ::v2(){vfunc_called(this, "_ZN7S8984C22v2Ev");}
void  S8984C2 ::v3(){vfunc_called(this, "_ZN7S8984C22v3Ev");}
void  S8984C2 ::v4(){vfunc_called(this, "_ZN7S8984C22v4Ev");}
void  S8984C2 ::v5(){vfunc_called(this, "_ZN7S8984C22v5Ev");}
void  S8984C2 ::v6(){vfunc_called(this, "_ZN7S8984C22v6Ev");}
S8984C2 ::S8984C2(){ note_ctor("S8984C2", this);} // tgen

static void Test_S8984C2()
{
  extern Class_Descriptor cd_S8984C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8984C2, buf);
    S8984C2 *dp, &lv = *(dp=new (buf) S8984C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8984C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8984C2)");
    test_class_info(&lv, &cd_S8984C2);
    dp->~S8984C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8984C2(Test_S8984C2, "S8984C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8984C2C1Ev();
extern void _ZN7S8984C2D1Ev();
Name_Map name_map_S8984C2[] = {
  NSPAIR(_ZN7S8984C2C1Ev),
  NSPAIR(_ZN7S8984C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8984C2[];
extern void _ZN7S8984C2D1Ev();
extern void _ZN7S8984C2D0Ev();
extern void _ZN7S8984C22v2Ev();
extern void _ZN7S8984C22v3Ev();
extern void _ZN7S8984C22v4Ev();
extern void _ZN7S8984C22v5Ev();
extern void _ZN7S8984C22v6Ev();
static  VTBL_ENTRY vtc_S8984C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8984C2[0]),
  (VTBL_ENTRY)&_ZN7S8984C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8984C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8984C2[];
extern  VTBL_ENTRY _ZTV7S8984C2[];
Class_Descriptor cd_S8984C2 = {  "S8984C2", // class name
  0,0,//no base classes
  &(vtc_S8984C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8984C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8984C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8984C1  : S8984C2 {
  virtual  ~S8984C1(); // _ZN7S8984C1D1Ev
  virtual void  v1(); // _ZN7S8984C12v1Ev
  S8984C1(); // tgen
};
//SIG(1 S8984C1) C1{ BC2{ vd v2 v3 v4 v5 v6} vd v1}


 S8984C1 ::~S8984C1(){ note_dtor("S8984C1", this);}
void  S8984C1 ::v1(){vfunc_called(this, "_ZN7S8984C12v1Ev");}
S8984C1 ::S8984C1(){ note_ctor("S8984C1", this);} // tgen

static void Test_S8984C1()
{
  extern Class_Descriptor cd_S8984C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8984C1, buf);
    S8984C1 *dp, &lv = *(dp=new (buf) S8984C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8984C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8984C1)");
    check_base_class_offset(lv, (S8984C2*), 0, "S8984C1");
    test_class_info(&lv, &cd_S8984C1);
    dp->~S8984C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8984C1(Test_S8984C1, "S8984C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8984C1C1Ev();
extern void _ZN7S8984C1D1Ev();
Name_Map name_map_S8984C1[] = {
  NSPAIR(_ZN7S8984C1C1Ev),
  NSPAIR(_ZN7S8984C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8984C2;
extern VTBL_ENTRY _ZTI7S8984C2[];
extern  VTBL_ENTRY _ZTV7S8984C2[];
static Base_Class bases_S8984C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8984C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8984C1[];
extern void _ZN7S8984C1D1Ev();
extern void _ZN7S8984C1D0Ev();
extern void _ZN7S8984C22v2Ev();
extern void _ZN7S8984C22v3Ev();
extern void _ZN7S8984C22v4Ev();
extern void _ZN7S8984C22v5Ev();
extern void _ZN7S8984C22v6Ev();
extern void _ZN7S8984C12v1Ev();
static  VTBL_ENTRY vtc_S8984C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8984C1[0]),
  (VTBL_ENTRY)&_ZN7S8984C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8984C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8984C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8984C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8984C1[];
extern  VTBL_ENTRY _ZTV7S8984C1[];
Class_Descriptor cd_S8984C1 = {  "S8984C1", // class name
  bases_S8984C1, 1,
  &(vtc_S8984C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8984C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8984C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8981C2  {
  virtual  ~S8981C2(); // _ZN7S8981C2D1Ev
  virtual void  v2(); // _ZN7S8981C22v2Ev
  virtual void  v3(); // _ZN7S8981C22v3Ev
  virtual void  v4(); // _ZN7S8981C22v4Ev
  virtual void  v5(); // _ZN7S8981C22v5Ev
  virtual void  v6(); // _ZN7S8981C22v6Ev
  S8981C2(); // tgen
};
//SIG(-1 S8981C2) C1{ vd v1 v2 v3 v4 v5}


 S8981C2 ::~S8981C2(){ note_dtor("S8981C2", this);}
void  S8981C2 ::v2(){vfunc_called(this, "_ZN7S8981C22v2Ev");}
void  S8981C2 ::v3(){vfunc_called(this, "_ZN7S8981C22v3Ev");}
void  S8981C2 ::v4(){vfunc_called(this, "_ZN7S8981C22v4Ev");}
void  S8981C2 ::v5(){vfunc_called(this, "_ZN7S8981C22v5Ev");}
void  S8981C2 ::v6(){vfunc_called(this, "_ZN7S8981C22v6Ev");}
S8981C2 ::S8981C2(){ note_ctor("S8981C2", this);} // tgen

static void Test_S8981C2()
{
  extern Class_Descriptor cd_S8981C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8981C2, buf);
    S8981C2 *dp, &lv = *(dp=new (buf) S8981C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8981C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8981C2)");
    test_class_info(&lv, &cd_S8981C2);
    dp->~S8981C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8981C2(Test_S8981C2, "S8981C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8981C2C1Ev();
extern void _ZN7S8981C2D1Ev();
Name_Map name_map_S8981C2[] = {
  NSPAIR(_ZN7S8981C2C1Ev),
  NSPAIR(_ZN7S8981C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8981C2[];
extern void _ZN7S8981C2D1Ev();
extern void _ZN7S8981C2D0Ev();
extern void _ZN7S8981C22v2Ev();
extern void _ZN7S8981C22v3Ev();
extern void _ZN7S8981C22v4Ev();
extern void _ZN7S8981C22v5Ev();
extern void _ZN7S8981C22v6Ev();
static  VTBL_ENTRY vtc_S8981C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8981C2[0]),
  (VTBL_ENTRY)&_ZN7S8981C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8981C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8981C2[];
extern  VTBL_ENTRY _ZTV7S8981C2[];
Class_Descriptor cd_S8981C2 = {  "S8981C2", // class name
  0,0,//no base classes
  &(vtc_S8981C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8981C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8981C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8981C1  : S8981C2 {
  int s8981c1f0;
  virtual void  v1(); // _ZN7S8981C12v1Ev
  ~S8981C1(); // tgen
  S8981C1(); // tgen
};
//SIG(1 S8981C1) C1{ BC2{ vd v2 v3 v4 v5 v6} v1 Fi}


void  S8981C1 ::v1(){vfunc_called(this, "_ZN7S8981C12v1Ev");}
S8981C1 ::~S8981C1(){ note_dtor("S8981C1", this);} // tgen
S8981C1 ::S8981C1(){ note_ctor("S8981C1", this);} // tgen

static void Test_S8981C1()
{
  extern Class_Descriptor cd_S8981C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S8981C1, buf);
    S8981C1 *dp, &lv = *(dp=new (buf) S8981C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8981C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8981C1)");
    check_base_class_offset(lv, (S8981C2*), 0, "S8981C1");
    check_field_offset(lv, s8981c1f0, ABISELECT(8,4), "S8981C1.s8981c1f0");
    test_class_info(&lv, &cd_S8981C1);
    dp->~S8981C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8981C1(Test_S8981C1, "S8981C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S8981C1C1Ev();
extern void _ZN7S8981C1D1Ev();
Name_Map name_map_S8981C1[] = {
  NSPAIR(_ZN7S8981C1C1Ev),
  NSPAIR(_ZN7S8981C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8981C2;
extern VTBL_ENTRY _ZTI7S8981C2[];
extern  VTBL_ENTRY _ZTV7S8981C2[];
static Base_Class bases_S8981C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8981C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8981C1[];
extern void _ZN7S8981C1D1Ev();
extern void _ZN7S8981C1D0Ev();
extern void _ZN7S8981C22v2Ev();
extern void _ZN7S8981C22v3Ev();
extern void _ZN7S8981C22v4Ev();
extern void _ZN7S8981C22v5Ev();
extern void _ZN7S8981C22v6Ev();
extern void _ZN7S8981C12v1Ev();
static  VTBL_ENTRY vtc_S8981C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8981C1[0]),
  (VTBL_ENTRY)&_ZN7S8981C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8981C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8981C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8981C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8981C1[];
extern  VTBL_ENTRY _ZTV7S8981C1[];
Class_Descriptor cd_S8981C1 = {  "S8981C1", // class name
  bases_S8981C1, 1,
  &(vtc_S8981C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S8981C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8981C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8058C1  : S6282C14_nt , S8480C8_nt {
  ~S8058C1(); // tgen
  S8058C1(); // tgen
};
//SIG(1 S8058C1) C1{ BC2{ vd m Fi} BC3{ Fi Fp Fi}}


S8058C1 ::~S8058C1(){ note_dtor("S8058C1", this);} // tgen
S8058C1 ::S8058C1(){ note_ctor("S8058C1", this);} // tgen

static void Test_S8058C1()
{
  extern Class_Descriptor cd_S8058C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8058C1, buf);
    S8058C1 *dp, &lv = *(dp=new (buf) S8058C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8058C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8058C1)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S8058C1");
    check_base_class_offset(lv, (S8480C8_nt*), ABISELECT(16,8), "S8058C1");
    test_class_info(&lv, &cd_S8058C1);
    dp->~S8058C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8058C1(Test_S8058C1, "S8058C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8058C1C1Ev();
extern void _ZN7S8058C1D1Ev();
Name_Map name_map_S8058C1[] = {
  NSPAIR(_ZN7S8058C1C1Ev),
  NSPAIR(_ZN7S8058C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
extern Class_Descriptor cd_S8480C8_nt;
extern VTBL_ENTRY _ZTI10S8480C8_nt[];
static Base_Class bases_S8058C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8480C8_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8058C1[];
extern void _ZN7S8058C1D1Ev();
extern void _ZN7S8058C1D0Ev();
static  VTBL_ENTRY vtc_S8058C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8058C1[0]),
  (VTBL_ENTRY)&_ZN7S8058C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8058C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8058C1[];
extern  VTBL_ENTRY _ZTV7S8058C1[];
Class_Descriptor cd_S8058C1 = {  "S8058C1", // class name
  bases_S8058C1, 2,
  &(vtc_S8058C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8058C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8058C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8983C2  {
  virtual  ~S8983C2(); // _ZN7S8983C2D1Ev
  virtual void  v2(); // _ZN7S8983C22v2Ev
  virtual void  v3(); // _ZN7S8983C22v3Ev
  virtual void  v4(); // _ZN7S8983C22v4Ev
  virtual void  v5(); // _ZN7S8983C22v5Ev
  virtual void  v6(); // _ZN7S8983C22v6Ev
  S8983C2(); // tgen
};
//SIG(-1 S8983C2) C1{ vd v1 v2 v3 v4 v5}


 S8983C2 ::~S8983C2(){ note_dtor("S8983C2", this);}
void  S8983C2 ::v2(){vfunc_called(this, "_ZN7S8983C22v2Ev");}
void  S8983C2 ::v3(){vfunc_called(this, "_ZN7S8983C22v3Ev");}
void  S8983C2 ::v4(){vfunc_called(this, "_ZN7S8983C22v4Ev");}
void  S8983C2 ::v5(){vfunc_called(this, "_ZN7S8983C22v5Ev");}
void  S8983C2 ::v6(){vfunc_called(this, "_ZN7S8983C22v6Ev");}
S8983C2 ::S8983C2(){ note_ctor("S8983C2", this);} // tgen

static void Test_S8983C2()
{
  extern Class_Descriptor cd_S8983C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8983C2, buf);
    S8983C2 *dp, &lv = *(dp=new (buf) S8983C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8983C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8983C2)");
    test_class_info(&lv, &cd_S8983C2);
    dp->~S8983C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8983C2(Test_S8983C2, "S8983C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8983C2C1Ev();
extern void _ZN7S8983C2D1Ev();
Name_Map name_map_S8983C2[] = {
  NSPAIR(_ZN7S8983C2C1Ev),
  NSPAIR(_ZN7S8983C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8983C2[];
extern void _ZN7S8983C2D1Ev();
extern void _ZN7S8983C2D0Ev();
extern void _ZN7S8983C22v2Ev();
extern void _ZN7S8983C22v3Ev();
extern void _ZN7S8983C22v4Ev();
extern void _ZN7S8983C22v5Ev();
extern void _ZN7S8983C22v6Ev();
static  VTBL_ENTRY vtc_S8983C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8983C2[0]),
  (VTBL_ENTRY)&_ZN7S8983C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8983C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S8983C2[];
extern  VTBL_ENTRY _ZTV7S8983C2[];
Class_Descriptor cd_S8983C2 = {  "S8983C2", // class name
  0,0,//no base classes
  &(vtc_S8983C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8983C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8983C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8983C1  : S8983C2 {
  virtual void  v1(); // _ZN7S8983C12v1Ev
  ~S8983C1(); // tgen
  S8983C1(); // tgen
};
//SIG(1 S8983C1) C1{ BC2{ vd v2 v3 v4 v5 v6} v1}


void  S8983C1 ::v1(){vfunc_called(this, "_ZN7S8983C12v1Ev");}
S8983C1 ::~S8983C1(){ note_dtor("S8983C1", this);} // tgen
S8983C1 ::S8983C1(){ note_ctor("S8983C1", this);} // tgen

static void Test_S8983C1()
{
  extern Class_Descriptor cd_S8983C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8983C1, buf);
    S8983C1 *dp, &lv = *(dp=new (buf) S8983C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8983C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8983C1)");
    check_base_class_offset(lv, (S8983C2*), 0, "S8983C1");
    test_class_info(&lv, &cd_S8983C1);
    dp->~S8983C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8983C1(Test_S8983C1, "S8983C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8983C1C1Ev();
extern void _ZN7S8983C1D1Ev();
Name_Map name_map_S8983C1[] = {
  NSPAIR(_ZN7S8983C1C1Ev),
  NSPAIR(_ZN7S8983C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8983C2;
extern VTBL_ENTRY _ZTI7S8983C2[];
extern  VTBL_ENTRY _ZTV7S8983C2[];
static Base_Class bases_S8983C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8983C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8983C1[];
extern void _ZN7S8983C1D1Ev();
extern void _ZN7S8983C1D0Ev();
extern void _ZN7S8983C22v2Ev();
extern void _ZN7S8983C22v3Ev();
extern void _ZN7S8983C22v4Ev();
extern void _ZN7S8983C22v5Ev();
extern void _ZN7S8983C22v6Ev();
extern void _ZN7S8983C12v1Ev();
static  VTBL_ENTRY vtc_S8983C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8983C1[0]),
  (VTBL_ENTRY)&_ZN7S8983C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8983C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8983C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8983C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8983C1[];
extern  VTBL_ENTRY _ZTV7S8983C1[];
Class_Descriptor cd_S8983C1 = {  "S8983C1", // class name
  bases_S8983C1, 1,
  &(vtc_S8983C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8983C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8983C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14295C1  {
  void *s14295c1f0;
  int s14295c1f1[2];
  void *s14295c1f2;
  int s14295c1f3;
  char s14295c1f4;
  int s14295c1f5[3];
};
//SIG(1 S14295C1) C1{ Fp Fi[2] Fp Fi Fc Fi[3]}



static void Test_S14295C1()
{
  {
    init_simple_test("S14295C1");
    S14295C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S14295C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14295C1)");
    check_field_offset(lv, s14295c1f0, 0, "S14295C1.s14295c1f0");
    check_field_offset(lv, s14295c1f1, ABISELECT(8,4), "S14295C1.s14295c1f1");
    check_field_offset(lv, s14295c1f2, ABISELECT(16,12), "S14295C1.s14295c1f2");
    check_field_offset(lv, s14295c1f3, ABISELECT(24,16), "S14295C1.s14295c1f3");
    check_field_offset(lv, s14295c1f4, ABISELECT(28,20), "S14295C1.s14295c1f4");
    check_field_offset(lv, s14295c1f5, ABISELECT(32,24), "S14295C1.s14295c1f5");
  }
}
static Arrange_To_Call_Me vS14295C1(Test_S14295C1, "S14295C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18724C1  {
  int s18724c1f0;
  void *s18724c1f1;
  __tsi64 s18724c1f2;
  virtual void  v1(); // _ZN8S18724C12v1Ev
  virtual void  v2(); // _ZN8S18724C12v2Ev
  virtual void  v3(); // _ZN8S18724C12v3Ev
  virtual void  v4(); // _ZN8S18724C12v4Ev
  virtual void  v5(); // _ZN8S18724C12v5Ev
  ~S18724C1(); // tgen
  S18724C1(); // tgen
};
//SIG(1 S18724C1) C1{ v1 v2 v3 v4 v5 Fi Fp FL}


void  S18724C1 ::v1(){vfunc_called(this, "_ZN8S18724C12v1Ev");}
void  S18724C1 ::v2(){vfunc_called(this, "_ZN8S18724C12v2Ev");}
void  S18724C1 ::v3(){vfunc_called(this, "_ZN8S18724C12v3Ev");}
void  S18724C1 ::v4(){vfunc_called(this, "_ZN8S18724C12v4Ev");}
void  S18724C1 ::v5(){vfunc_called(this, "_ZN8S18724C12v5Ev");}
S18724C1 ::~S18724C1(){ note_dtor("S18724C1", this);} // tgen
S18724C1 ::S18724C1(){ note_ctor("S18724C1", this);} // tgen

static void Test_S18724C1()
{
  extern Class_Descriptor cd_S18724C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S18724C1, buf);
    S18724C1 *dp, &lv = *(dp=new (buf) S18724C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18724C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18724C1)");
    check_field_offset(lv, s18724c1f0, ABISELECT(8,4), "S18724C1.s18724c1f0");
    check_field_offset(lv, s18724c1f1, ABISELECT(16,8), "S18724C1.s18724c1f1");
    check_field_offset(lv, s18724c1f2, ABISELECT(24,12), "S18724C1.s18724c1f2");
    test_class_info(&lv, &cd_S18724C1);
    dp->~S18724C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18724C1(Test_S18724C1, "S18724C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18724C1C1Ev();
extern void _ZN8S18724C1D1Ev();
Name_Map name_map_S18724C1[] = {
  NSPAIR(_ZN8S18724C1C1Ev),
  NSPAIR(_ZN8S18724C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18724C1[];
extern void _ZN8S18724C12v1Ev();
extern void _ZN8S18724C12v2Ev();
extern void _ZN8S18724C12v3Ev();
extern void _ZN8S18724C12v4Ev();
extern void _ZN8S18724C12v5Ev();
static  VTBL_ENTRY vtc_S18724C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18724C1[0]),
  (VTBL_ENTRY)&_ZN8S18724C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18724C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18724C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18724C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18724C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18724C1[];
extern  VTBL_ENTRY _ZTV8S18724C1[];
Class_Descriptor cd_S18724C1 = {  "S18724C1", // class name
  0,0,//no base classes
  &(vtc_S18724C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18724C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18724C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11528C1  {
  ::S4846C11_nt s11528c1f0;
  int s11528c1f1;
};
//SIG(1 S11528C1) C1{ FC2{ Fi[2] Fc[320] Fi} Fi}



static void Test_S11528C1()
{
  {
    init_simple_test("S11528C1");
    S11528C1 lv;
    check2(sizeof(lv), 336, "sizeof(S11528C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11528C1)");
    check_field_offset(lv, s11528c1f0, 0, "S11528C1.s11528c1f0");
    check_field_offset(lv, s11528c1f1, 332, "S11528C1.s11528c1f1");
  }
}
static Arrange_To_Call_Me vS11528C1(Test_S11528C1, "S11528C1", 336);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9578C2_nt  {
  virtual  ~S9578C2_nt(); // _ZN10S9578C2_ntD1Ev
  virtual void  v3(); // _ZN10S9578C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9578C2_nt2v4Ev
  S9578C2_nt(); // tgen
};
//SIG(-1 S9578C2_nt) C1{ vd v1 v2}


 S9578C2_nt ::~S9578C2_nt(){ note_dtor("S9578C2_nt", this);}
void  S9578C2_nt ::v3(){vfunc_called(this, "_ZN10S9578C2_nt2v3Ev");}
void  S9578C2_nt ::v4(){vfunc_called(this, "_ZN10S9578C2_nt2v4Ev");}
S9578C2_nt ::S9578C2_nt(){ note_ctor("S9578C2_nt", this);} // tgen

//skip512 S9578C2_nt

#else // __cplusplus

extern void _ZN10S9578C2_ntC1Ev();
extern void _ZN10S9578C2_ntD1Ev();
Name_Map name_map_S9578C2_nt[] = {
  NSPAIR(_ZN10S9578C2_ntC1Ev),
  NSPAIR(_ZN10S9578C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9578C2_nt[];
extern void _ZN10S9578C2_ntD1Ev();
extern void _ZN10S9578C2_ntD0Ev();
extern void _ZN10S9578C2_nt2v3Ev();
extern void _ZN10S9578C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S9578C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9578C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9578C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S9578C2_nt[];
VTBL_ENTRY *P__ZTI10S9578C2_nt = _ZTI10S9578C2_nt; 
extern  VTBL_ENTRY _ZTV10S9578C2_nt[];
Class_Descriptor cd_S9578C2_nt = {  "S9578C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9578C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9578C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9578C2_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9578C1  : S9578C2_nt {
  virtual  ~S9578C1(); // _ZN7S9578C1D1Ev
  virtual void  v1(); // _ZN7S9578C12v1Ev
  virtual void  v2(); // _ZN7S9578C12v2Ev
  S9578C1(); // tgen
};
//SIG(1 S9578C1) C1{ BC2{ vd v3 v4} vd v1 v2}


 S9578C1 ::~S9578C1(){ note_dtor("S9578C1", this);}
void  S9578C1 ::v1(){vfunc_called(this, "_ZN7S9578C12v1Ev");}
void  S9578C1 ::v2(){vfunc_called(this, "_ZN7S9578C12v2Ev");}
S9578C1 ::S9578C1(){ note_ctor("S9578C1", this);} // tgen

static void Test_S9578C1()
{
  extern Class_Descriptor cd_S9578C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9578C1, buf);
    S9578C1 *dp, &lv = *(dp=new (buf) S9578C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9578C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9578C1)");
    check_base_class_offset(lv, (S9578C2_nt*), 0, "S9578C1");
    test_class_info(&lv, &cd_S9578C1);
    dp->~S9578C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9578C1(Test_S9578C1, "S9578C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9578C1C1Ev();
extern void _ZN7S9578C1D1Ev();
Name_Map name_map_S9578C1[] = {
  NSPAIR(_ZN7S9578C1C1Ev),
  NSPAIR(_ZN7S9578C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9578C2_nt;
extern VTBL_ENTRY _ZTI10S9578C2_nt[];
extern  VTBL_ENTRY _ZTV10S9578C2_nt[];
static Base_Class bases_S9578C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9578C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9578C1[];
extern void _ZN7S9578C1D1Ev();
extern void _ZN7S9578C1D0Ev();
extern void _ZN10S9578C2_nt2v3Ev();
extern void _ZN10S9578C2_nt2v4Ev();
extern void _ZN7S9578C12v1Ev();
extern void _ZN7S9578C12v2Ev();
static  VTBL_ENTRY vtc_S9578C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9578C1[0]),
  (VTBL_ENTRY)&_ZN7S9578C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9578C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9578C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S9578C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9578C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9578C1[];
extern  VTBL_ENTRY _ZTV7S9578C1[];
Class_Descriptor cd_S9578C1 = {  "S9578C1", // class name
  bases_S9578C1, 1,
  &(vtc_S9578C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9578C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9578C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21560C2_nt  {
  long s21560c2f0;
};
//SIG(-1 S21560C2_nt) C1{ Fl}



//skip512 S21560C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21560C1  {
  int s21560c1f0;
  char s21560c1f1;
  ::S21560C2_nt s21560c1f2;
  ::S21560C2_nt s21560c1f3;
  void  mf21560c1(); // _ZN8S21560C19mf21560c1Ev
  virtual  ~S21560C1(); // _ZN8S21560C1D1Ev
  S21560C1(); // tgen
};
//SIG(1 S21560C1) C1{ vd m Fi Fc FC2{ Fl} FC2}


void  S21560C1 ::mf21560c1(){}
 S21560C1 ::~S21560C1(){ note_dtor("S21560C1", this);}
S21560C1 ::S21560C1(){ note_ctor("S21560C1", this);} // tgen

static void Test_S21560C1()
{
  extern Class_Descriptor cd_S21560C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21560C1, buf);
    S21560C1 *dp, &lv = *(dp=new (buf) S21560C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21560C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21560C1)");
    check_field_offset(lv, s21560c1f0, ABISELECT(8,4), "S21560C1.s21560c1f0");
    check_field_offset(lv, s21560c1f1, ABISELECT(12,8), "S21560C1.s21560c1f1");
    check_field_offset(lv, s21560c1f2, ABISELECT(16,12), "S21560C1.s21560c1f2");
    check_field_offset(lv, s21560c1f3, ABISELECT(24,16), "S21560C1.s21560c1f3");
    test_class_info(&lv, &cd_S21560C1);
    dp->~S21560C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21560C1(Test_S21560C1, "S21560C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S21560C1C1Ev();
extern void _ZN8S21560C1D1Ev();
Name_Map name_map_S21560C1[] = {
  NSPAIR(_ZN8S21560C1C1Ev),
  NSPAIR(_ZN8S21560C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21560C1[];
extern void _ZN8S21560C1D1Ev();
extern void _ZN8S21560C1D0Ev();
static  VTBL_ENTRY vtc_S21560C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21560C1[0]),
  (VTBL_ENTRY)&_ZN8S21560C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21560C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21560C1[];
extern  VTBL_ENTRY _ZTV8S21560C1[];
Class_Descriptor cd_S21560C1 = {  "S21560C1", // class name
  0,0,//no base classes
  &(vtc_S21560C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S21560C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21560C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13881C1  {
  long s13881c1f0;
  short s13881c1f1[2];
  long s13881c1f2;
  short s13881c1f3[2];
  long s13881c1f4;
};
//SIG(1 S13881C1) C1{ Fl Fs[2] Fl Fs[2] Fl}



static void Test_S13881C1()
{
  {
    init_simple_test("S13881C1");
    S13881C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S13881C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13881C1)");
    check_field_offset(lv, s13881c1f0, 0, "S13881C1.s13881c1f0");
    check_field_offset(lv, s13881c1f1, ABISELECT(8,4), "S13881C1.s13881c1f1");
    check_field_offset(lv, s13881c1f2, ABISELECT(16,8), "S13881C1.s13881c1f2");
    check_field_offset(lv, s13881c1f3, ABISELECT(24,12), "S13881C1.s13881c1f3");
    check_field_offset(lv, s13881c1f4, ABISELECT(32,16), "S13881C1.s13881c1f4");
  }
}
static Arrange_To_Call_Me vS13881C1(Test_S13881C1, "S13881C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8139C1  : S6282C14_nt {
  void *s8139c1f0[2];
  virtual  ~S8139C1(); // _ZN7S8139C1D1Ev
  S8139C1(); // tgen
};
//SIG(1 S8139C1) C1{ BC2{ vd m Fi} vd Fp[2]}


 S8139C1 ::~S8139C1(){ note_dtor("S8139C1", this);}
S8139C1 ::S8139C1(){ note_ctor("S8139C1", this);} // tgen

static void Test_S8139C1()
{
  extern Class_Descriptor cd_S8139C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8139C1, buf);
    S8139C1 *dp, &lv = *(dp=new (buf) S8139C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8139C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8139C1)");
    check_base_class_offset(lv, (S6282C14_nt*), 0, "S8139C1");
    check_field_offset(lv, s8139c1f0, ABISELECT(16,8), "S8139C1.s8139c1f0");
    test_class_info(&lv, &cd_S8139C1);
    dp->~S8139C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8139C1(Test_S8139C1, "S8139C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8139C1C1Ev();
extern void _ZN7S8139C1D1Ev();
Name_Map name_map_S8139C1[] = {
  NSPAIR(_ZN7S8139C1C1Ev),
  NSPAIR(_ZN7S8139C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6282C14_nt;
extern VTBL_ENTRY _ZTI11S6282C14_nt[];
extern  VTBL_ENTRY _ZTV11S6282C14_nt[];
static Base_Class bases_S8139C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6282C14_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8139C1[];
extern void _ZN7S8139C1D1Ev();
extern void _ZN7S8139C1D0Ev();
static  VTBL_ENTRY vtc_S8139C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8139C1[0]),
  (VTBL_ENTRY)&_ZN7S8139C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8139C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8139C1[];
extern  VTBL_ENTRY _ZTV7S8139C1[];
Class_Descriptor cd_S8139C1 = {  "S8139C1", // class name
  bases_S8139C1, 1,
  &(vtc_S8139C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8139C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8139C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18680C1  {
  __tsi64 s18680c1f0;
  short s18680c1f1[2];
  virtual void  v1(); // _ZN8S18680C12v1Ev
  virtual void  v2(); // _ZN8S18680C12v2Ev
  virtual void  v3(); // _ZN8S18680C12v3Ev
  virtual void  v4(); // _ZN8S18680C12v4Ev
  ~S18680C1(); // tgen
  S18680C1(); // tgen
};
//SIG(1 S18680C1) C1{ v1 v2 v3 v4 FL Fs[2]}


void  S18680C1 ::v1(){vfunc_called(this, "_ZN8S18680C12v1Ev");}
void  S18680C1 ::v2(){vfunc_called(this, "_ZN8S18680C12v2Ev");}
void  S18680C1 ::v3(){vfunc_called(this, "_ZN8S18680C12v3Ev");}
void  S18680C1 ::v4(){vfunc_called(this, "_ZN8S18680C12v4Ev");}
S18680C1 ::~S18680C1(){ note_dtor("S18680C1", this);} // tgen
S18680C1 ::S18680C1(){ note_ctor("S18680C1", this);} // tgen

static void Test_S18680C1()
{
  extern Class_Descriptor cd_S18680C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S18680C1, buf);
    S18680C1 *dp, &lv = *(dp=new (buf) S18680C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18680C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18680C1)");
    check_field_offset(lv, s18680c1f0, ABISELECT(8,4), "S18680C1.s18680c1f0");
    check_field_offset(lv, s18680c1f1, ABISELECT(16,12), "S18680C1.s18680c1f1");
    test_class_info(&lv, &cd_S18680C1);
    dp->~S18680C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18680C1(Test_S18680C1, "S18680C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S18680C1C1Ev();
extern void _ZN8S18680C1D1Ev();
Name_Map name_map_S18680C1[] = {
  NSPAIR(_ZN8S18680C1C1Ev),
  NSPAIR(_ZN8S18680C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18680C1[];
extern void _ZN8S18680C12v1Ev();
extern void _ZN8S18680C12v2Ev();
extern void _ZN8S18680C12v3Ev();
extern void _ZN8S18680C12v4Ev();
static  VTBL_ENTRY vtc_S18680C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18680C1[0]),
  (VTBL_ENTRY)&_ZN8S18680C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18680C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18680C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18680C12v4Ev,
};
extern VTBL_ENTRY _ZTI8S18680C1[];
extern  VTBL_ENTRY _ZTV8S18680C1[];
Class_Descriptor cd_S18680C1 = {  "S18680C1", // class name
  0,0,//no base classes
  &(vtc_S18680C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S18680C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18680C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11170C2  {
  char s11170c2f0[21];
  int s11170c2f1;
};
//SIG(-1 S11170C2) C1{ Fc[21] Fi}



static void Test_S11170C2()
{
  {
    init_simple_test("S11170C2");
    S11170C2 lv;
    check2(sizeof(lv), 28, "sizeof(S11170C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11170C2)");
    check_field_offset(lv, s11170c2f0, 0, "S11170C2.s11170c2f0");
    check_field_offset(lv, s11170c2f1, 24, "S11170C2.s11170c2f1");
  }
}
static Arrange_To_Call_Me vS11170C2(Test_S11170C2, "S11170C2", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11170C1  {
  ::S11170C2 s11170c1f0;
  int s11170c1f1[3];
};
//SIG(1 S11170C1) C1{ FC2{ Fc[21] Fi} Fi[3]}



static void Test_S11170C1()
{
  {
    init_simple_test("S11170C1");
    S11170C1 lv;
    check2(sizeof(lv), 40, "sizeof(S11170C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11170C1)");
    check_field_offset(lv, s11170c1f0, 0, "S11170C1.s11170c1f0");
    check_field_offset(lv, s11170c1f1, 28, "S11170C1.s11170c1f1");
  }
}
static Arrange_To_Call_Me vS11170C1(Test_S11170C1, "S11170C1", 40);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18434C1  {
  short s18434c1f0[2];
  int s18434c1f1;
  short s18434c1f2;
  int s18434c1f3[4];
  void  mf18434c1(); // _ZN8S18434C19mf18434c1Ev
};
//SIG(1 S18434C1) C1{ m Fs[2] Fi Fs Fi[4]}


void  S18434C1 ::mf18434c1(){}

static void Test_S18434C1()
{
  {
    init_simple_test("S18434C1");
    S18434C1 lv;
    check2(sizeof(lv), 28, "sizeof(S18434C1)");
    check2(__alignof__(lv), 4, "__alignof__(S18434C1)");
    check_field_offset(lv, s18434c1f0, 0, "S18434C1.s18434c1f0");
    check_field_offset(lv, s18434c1f1, 4, "S18434C1.s18434c1f1");
    check_field_offset(lv, s18434c1f2, 8, "S18434C1.s18434c1f2");
    check_field_offset(lv, s18434c1f3, 12, "S18434C1.s18434c1f3");
  }
}
static Arrange_To_Call_Me vS18434C1(Test_S18434C1, "S18434C1", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10978C1  {
  char s10978c1f0[6];
  short s10978c1f1[8];
  char s10978c1f2[10];
};
//SIG(1 S10978C1) C1{ Fc[6] Fs[8] Fc[10]}



static void Test_S10978C1()
{
  {
    init_simple_test("S10978C1");
    S10978C1 lv;
    check2(sizeof(lv), 32, "sizeof(S10978C1)");
    check2(__alignof__(lv), 2, "__alignof__(S10978C1)");
    check_field_offset(lv, s10978c1f0, 0, "S10978C1.s10978c1f0");
    check_field_offset(lv, s10978c1f1, 6, "S10978C1.s10978c1f1");
    check_field_offset(lv, s10978c1f2, 22, "S10978C1.s10978c1f2");
  }
}
static Arrange_To_Call_Me vS10978C1(Test_S10978C1, "S10978C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13030C1  {
  int s13030c1f0[2];
  char s13030c1f1[32];
  int s13030c1f2[5];
};
//SIG(1 S13030C1) C1{ Fi[2] Fc[32] Fi[5]}



static void Test_S13030C1()
{
  {
    init_simple_test("S13030C1");
    S13030C1 lv;
    check2(sizeof(lv), 60, "sizeof(S13030C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13030C1)");
    check_field_offset(lv, s13030c1f0, 0, "S13030C1.s13030c1f0");
    check_field_offset(lv, s13030c1f1, 8, "S13030C1.s13030c1f1");
    check_field_offset(lv, s13030c1f2, 40, "S13030C1.s13030c1f2");
  }
}
static Arrange_To_Call_Me vS13030C1(Test_S13030C1, "S13030C1", 60);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12699C1  {
  int s12699c1f0;
  void *s12699c1f1;
  int s12699c1f2[2];
  char s12699c1f3[2];
};
//SIG(1 S12699C1) C1{ Fi Fp Fi[2] Fc[2]}



static void Test_S12699C1()
{
  {
    init_simple_test("S12699C1");
    S12699C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S12699C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12699C1)");
    check_field_offset(lv, s12699c1f0, 0, "S12699C1.s12699c1f0");
    check_field_offset(lv, s12699c1f1, ABISELECT(8,4), "S12699C1.s12699c1f1");
    check_field_offset(lv, s12699c1f2, ABISELECT(16,8), "S12699C1.s12699c1f2");
    check_field_offset(lv, s12699c1f3, ABISELECT(24,16), "S12699C1.s12699c1f3");
  }
}
static Arrange_To_Call_Me vS12699C1(Test_S12699C1, "S12699C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S17845C2  {
  short s17845c2f0;
  short s17845c2f1;
  void  mf17845c2(); // _ZN8S17845C29mf17845c2Ev
};
//SIG(1 S17845C2) U1{ m Fs Fs}

#endif // __cplusplus
#ifdef __cplusplus

struct  S17845C1  {
  void *s17845c1f0;
  ::S17845C2 s17845c1f1;
  void  mf17845c1(); // _ZN8S17845C19mf17845c1Ev
};
//SIG(1 S17845C1) C1{ m Fp FU2{ m Fs Fs}}


void  S17845C1 ::mf17845c1(){}

static void Test_S17845C1()
{
  {
    init_simple_test("S17845C1");
    S17845C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S17845C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17845C1)");
    check_field_offset(lv, s17845c1f0, 0, "S17845C1.s17845c1f0");
    check_field_offset(lv, s17845c1f1, ABISELECT(8,4), "S17845C1.s17845c1f1");
  }
}
static Arrange_To_Call_Me vS17845C1(Test_S17845C1, "S17845C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6233C1  : S2121C38 {
  void *s6233c1f0;
  int s6233c1f1[2];
  void *s6233c1f2;
};
//SIG(1 S6233C1) C1{ BC2{ m} Fp Fi[2] Fp}



static void Test_S6233C1()
{
  extern Class_Descriptor cd_S6233C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6233C1, buf);
    S6233C1 &lv = *(new (buf) S6233C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6233C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6233C1)");
    check_base_class_offset(lv, (S2121C38*), 0, "S6233C1");
    check_field_offset(lv, s6233c1f0, 0, "S6233C1.s6233c1f0");
    check_field_offset(lv, s6233c1f1, ABISELECT(8,4), "S6233C1.s6233c1f1");
    check_field_offset(lv, s6233c1f2, ABISELECT(16,12), "S6233C1.s6233c1f2");
    test_class_info(&lv, &cd_S6233C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6233C1(Test_S6233C1, "S6233C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S2121C38;
extern VTBL_ENTRY _ZTI8S2121C38[];
static Base_Class bases_S6233C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2121C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6233C1 = {  "S6233C1", // class name
  bases_S6233C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21810C1  {
  void *s21810c1f0[2];
  int s21810c1f1[2];
  void  mf21810c1(); // _ZN8S21810C19mf21810c1Ev
  virtual  ~S21810C1(); // _ZN8S21810C1D1Ev
  S21810C1(); // tgen
};
//SIG(1 S21810C1) C1{ vd m Fp[2] Fi[2]}


void  S21810C1 ::mf21810c1(){}
 S21810C1 ::~S21810C1(){ note_dtor("S21810C1", this);}
S21810C1 ::S21810C1(){ note_ctor("S21810C1", this);} // tgen

static void Test_S21810C1()
{
  extern Class_Descriptor cd_S21810C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S21810C1, buf);
    S21810C1 *dp, &lv = *(dp=new (buf) S21810C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S21810C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21810C1)");
    check_field_offset(lv, s21810c1f0, ABISELECT(8,4), "S21810C1.s21810c1f0");
    check_field_offset(lv, s21810c1f1, ABISELECT(24,12), "S21810C1.s21810c1f1");
    test_class_info(&lv, &cd_S21810C1);
    dp->~S21810C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21810C1(Test_S21810C1, "S21810C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S21810C1C1Ev();
extern void _ZN8S21810C1D1Ev();
Name_Map name_map_S21810C1[] = {
  NSPAIR(_ZN8S21810C1C1Ev),
  NSPAIR(_ZN8S21810C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21810C1[];
extern void _ZN8S21810C1D1Ev();
extern void _ZN8S21810C1D0Ev();
static  VTBL_ENTRY vtc_S21810C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21810C1[0]),
  (VTBL_ENTRY)&_ZN8S21810C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21810C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21810C1[];
extern  VTBL_ENTRY _ZTV8S21810C1[];
Class_Descriptor cd_S21810C1 = {  "S21810C1", // class name
  0,0,//no base classes
  &(vtc_S21810C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S21810C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21810C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13051C1  {
  int s13051c1f0[2];
  char s13051c1f1[518];
  int s13051c1f2;
};
//SIG(1 S13051C1) C1{ Fi[2] Fc[518] Fi}



static void Test_S13051C1()
{
  {
    init_simple_test("S13051C1");
    S13051C1 lv;
    check2(sizeof(lv), 532, "sizeof(S13051C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13051C1)");
    check_field_offset(lv, s13051c1f0, 0, "S13051C1.s13051c1f0");
    check_field_offset(lv, s13051c1f1, 8, "S13051C1.s13051c1f1");
    check_field_offset(lv, s13051c1f2, 528, "S13051C1.s13051c1f2");
  }
}
static Arrange_To_Call_Me vS13051C1(Test_S13051C1, "S13051C1", 532);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12257C1  {
  int s12257c1f0;
  char s12257c1f1[259];
  int s12257c1f2[3];
};
//SIG(1 S12257C1) C1{ Fi Fc[259] Fi[3]}



static void Test_S12257C1()
{
  {
    init_simple_test("S12257C1");
    S12257C1 lv;
    check2(sizeof(lv), 276, "sizeof(S12257C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12257C1)");
    check_field_offset(lv, s12257c1f0, 0, "S12257C1.s12257c1f0");
    check_field_offset(lv, s12257c1f1, 4, "S12257C1.s12257c1f1");
    check_field_offset(lv, s12257c1f2, 264, "S12257C1.s12257c1f2");
  }
}
static Arrange_To_Call_Me vS12257C1(Test_S12257C1, "S12257C1", 276);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5555C2_nt  {
  void *s5555c2f0[2];
};
//SIG(-1 S5555C2_nt) C1{ Fp[2]}



//skip512 S5555C2_nt

#else // __cplusplus

Class_Descriptor cd_S5555C2_nt = {  "S5555C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5555C1  : S5555C2_nt {
  int s5555c1f0[2];
};
//SIG(1 S5555C1) C1{ BC2{ Fp[2]} Fi[2]}



static void Test_S5555C1()
{
  extern Class_Descriptor cd_S5555C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5555C1, buf);
    S5555C1 &lv = *(new (buf) S5555C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5555C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5555C1)");
    check_base_class_offset(lv, (S5555C2_nt*), 0, "S5555C1");
    check_field_offset(lv, s5555c1f0, ABISELECT(16,8), "S5555C1.s5555c1f0");
    test_class_info(&lv, &cd_S5555C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5555C1(Test_S5555C1, "S5555C1", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S5555C2_nt;
static Base_Class bases_S5555C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5555C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5555C1 = {  "S5555C1", // class name
  bases_S5555C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5503C1  : S8480C8_nt {
  void *s5503c1f0;
};
//SIG(1 S5503C1) C1{ BC2{ Fi Fp Fi} Fp}



static void Test_S5503C1()
{
  extern Class_Descriptor cd_S5503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S5503C1, buf);
    S5503C1 &lv = *(new (buf) S5503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S5503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5503C1)");
    check_base_class_offset(lv, (S8480C8_nt*), 0, "S5503C1");
    check_field_offset(lv, s5503c1f0, ABISELECT(24,12), "S5503C1.s5503c1f0");
    test_class_info(&lv, &cd_S5503C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5503C1(Test_S5503C1, "S5503C1", ABISELECT(32,16));

#else // __cplusplus

extern Class_Descriptor cd_S8480C8_nt;
extern VTBL_ENTRY _ZTI10S8480C8_nt[];
static Base_Class bases_S5503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8480C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5503C1 = {  "S5503C1", // class name
  bases_S5503C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,16), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13959C1  {
  long s13959c1f0[2];
  short s13959c1f1[9];
  char s13959c1f2;
};
//SIG(1 S13959C1) C1{ Fl[2] Fs[9] Fc}



static void Test_S13959C1()
{
  {
    init_simple_test("S13959C1");
    S13959C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13959C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13959C1)");
    check_field_offset(lv, s13959c1f0, 0, "S13959C1.s13959c1f0");
    check_field_offset(lv, s13959c1f1, ABISELECT(16,8), "S13959C1.s13959c1f1");
    check_field_offset(lv, s13959c1f2, ABISELECT(34,26), "S13959C1.s13959c1f2");
  }
}
static Arrange_To_Call_Me vS13959C1(Test_S13959C1, "S13959C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8266C2_nt  {
  void  mf8266c2(); // _ZN10S8266C2_nt8mf8266c2Ev
  virtual  ~S8266C2_nt(); // _ZN10S8266C2_ntD1Ev
  S8266C2_nt(); // tgen
};
//SIG(-1 S8266C2_nt) C1{ vd m}


void  S8266C2_nt ::mf8266c2(){}
 S8266C2_nt ::~S8266C2_nt(){ note_dtor("S8266C2_nt", this);}
S8266C2_nt ::S8266C2_nt(){ note_ctor("S8266C2_nt", this);} // tgen

//skip512 S8266C2_nt

#else // __cplusplus

extern void _ZN10S8266C2_ntC1Ev();
extern void _ZN10S8266C2_ntD1Ev();
Name_Map name_map_S8266C2_nt[] = {
  NSPAIR(_ZN10S8266C2_ntC1Ev),
  NSPAIR(_ZN10S8266C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8266C2_nt[];
extern void _ZN10S8266C2_ntD1Ev();
extern void _ZN10S8266C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8266C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8266C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8266C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8266C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8266C2_nt[];
VTBL_ENTRY *P__ZTI10S8266C2_nt = _ZTI10S8266C2_nt; 
extern  VTBL_ENTRY _ZTV10S8266C2_nt[];
Class_Descriptor cd_S8266C2_nt = {  "S8266C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8266C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8266C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8266C2_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8266C1  : S8266C2_nt {
  int s8266c1f0;
  short s8266c1f1;
  ~S8266C1(); // tgen
  S8266C1(); // tgen
};
//SIG(1 S8266C1) C1{ BC2{ vd m} Fi Fs}


S8266C1 ::~S8266C1(){ note_dtor("S8266C1", this);} // tgen
S8266C1 ::S8266C1(){ note_ctor("S8266C1", this);} // tgen

static void Test_S8266C1()
{
  extern Class_Descriptor cd_S8266C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S8266C1, buf);
    S8266C1 *dp, &lv = *(dp=new (buf) S8266C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S8266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8266C1)");
    check_base_class_offset(lv, (S8266C2_nt*), 0, "S8266C1");
    check_field_offset(lv, s8266c1f0, ABISELECT(8,4), "S8266C1.s8266c1f0");
    check_field_offset(lv, s8266c1f1, ABISELECT(12,8), "S8266C1.s8266c1f1");
    test_class_info(&lv, &cd_S8266C1);
    dp->~S8266C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8266C1(Test_S8266C1, "S8266C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S8266C1C1Ev();
extern void _ZN7S8266C1D1Ev();
Name_Map name_map_S8266C1[] = {
  NSPAIR(_ZN7S8266C1C1Ev),
  NSPAIR(_ZN7S8266C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8266C2_nt;
extern VTBL_ENTRY _ZTI10S8266C2_nt[];
extern  VTBL_ENTRY _ZTV10S8266C2_nt[];
static Base_Class bases_S8266C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8266C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8266C1[];
extern void _ZN7S8266C1D1Ev();
extern void _ZN7S8266C1D0Ev();
static  VTBL_ENTRY vtc_S8266C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8266C1[0]),
  (VTBL_ENTRY)&_ZN7S8266C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8266C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8266C1[];
extern  VTBL_ENTRY _ZTV7S8266C1[];
Class_Descriptor cd_S8266C1 = {  "S8266C1", // class name
  bases_S8266C1, 1,
  &(vtc_S8266C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S8266C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8266C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13257C1  {
  int s13257c1f0[2];
  short s13257c1f1[256];
};
//SIG(1 S13257C1) C1{ Fi[2] Fs[256]}



static void Test_S13257C1()
{
  {
    init_simple_test("S13257C1");
    S13257C1 lv;
    check2(sizeof(lv), 520, "sizeof(S13257C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13257C1)");
    check_field_offset(lv, s13257c1f0, 0, "S13257C1.s13257c1f0");
    check_field_offset(lv, s13257c1f1, 8, "S13257C1.s13257c1f1");
  }
}
static Arrange_To_Call_Me vS13257C1(Test_S13257C1, "S13257C1", 520);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14064C1  {
  void *s14064c1f0;
  char s14064c1f1[132];
  int s14064c1f2;
};
//SIG(1 S14064C1) C1{ Fp Fc[132] Fi}



static void Test_S14064C1()
{
  {
    init_simple_test("S14064C1");
    S14064C1 lv;
    check2(sizeof(lv), ABISELECT(144,140), "sizeof(S14064C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14064C1)");
    check_field_offset(lv, s14064c1f0, 0, "S14064C1.s14064c1f0");
    check_field_offset(lv, s14064c1f1, ABISELECT(8,4), "S14064C1.s14064c1f1");
    check_field_offset(lv, s14064c1f2, ABISELECT(140,136), "S14064C1.s14064c1f2");
  }
}
static Arrange_To_Call_Me vS14064C1(Test_S14064C1, "S14064C1", ABISELECT(144,140));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15209C1  {
  char s15209c1f0[2];
  short s15209c1f1[6];
  void  mf15209c1(); // _ZN8S15209C19mf15209c1Ev
};
//SIG(1 S15209C1) C1{ m Fc[2] Fs[6]}


void  S15209C1 ::mf15209c1(){}

static void Test_S15209C1()
{
  {
    init_simple_test("S15209C1");
    S15209C1 lv;
    check2(sizeof(lv), 14, "sizeof(S15209C1)");
    check2(__alignof__(lv), 2, "__alignof__(S15209C1)");
    check_field_offset(lv, s15209c1f0, 0, "S15209C1.s15209c1f0");
    check_field_offset(lv, s15209c1f1, 2, "S15209C1.s15209c1f1");
  }
}
static Arrange_To_Call_Me vS15209C1(Test_S15209C1, "S15209C1", 14);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14589C1  {
  void *s14589c1f0[3];
  char s14589c1f1[61];
};
//SIG(1 S14589C1) C1{ Fp[3] Fc[61]}



static void Test_S14589C1()
{
  {
    init_simple_test("S14589C1");
    S14589C1 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S14589C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14589C1)");
    check_field_offset(lv, s14589c1f0, 0, "S14589C1.s14589c1f0");
    check_field_offset(lv, s14589c1f1, ABISELECT(24,12), "S14589C1.s14589c1f1");
  }
}
static Arrange_To_Call_Me vS14589C1(Test_S14589C1, "S14589C1", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13602C1  {
  int s13602c1f0[7];
  char s13602c1f1[4];
};
//SIG(1 S13602C1) C1{ Fi[7] Fc[4]}



static void Test_S13602C1()
{
  {
    init_simple_test("S13602C1");
    S13602C1 lv;
    check2(sizeof(lv), 32, "sizeof(S13602C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13602C1)");
    check_field_offset(lv, s13602c1f0, 0, "S13602C1.s13602c1f0");
    check_field_offset(lv, s13602c1f1, 28, "S13602C1.s13602c1f1");
  }
}
static Arrange_To_Call_Me vS13602C1(Test_S13602C1, "S13602C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14033C1  {
  long s14033c1f0[6];
  short s14033c1f1[8];
};
//SIG(1 S14033C1) C1{ Fl[6] Fs[8]}



static void Test_S14033C1()
{
  {
    init_simple_test("S14033C1");
    S14033C1 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S14033C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14033C1)");
    check_field_offset(lv, s14033c1f0, 0, "S14033C1.s14033c1f0");
    check_field_offset(lv, s14033c1f1, ABISELECT(48,24), "S14033C1.s14033c1f1");
  }
}
static Arrange_To_Call_Me vS14033C1(Test_S14033C1, "S14033C1", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14821C1  {
  short s14821c1f0;
  int s14821c1f1;
  short s14821c1f2[3];
};
//SIG(1 S14821C1) C1{ Fs Fi Fs[3]}



static void Test_S14821C1()
{
  {
    init_simple_test("S14821C1");
    S14821C1 lv;
    check2(sizeof(lv), 16, "sizeof(S14821C1)");
    check2(__alignof__(lv), 4, "__alignof__(S14821C1)");
    check_field_offset(lv, s14821c1f0, 0, "S14821C1.s14821c1f0");
    check_field_offset(lv, s14821c1f1, 4, "S14821C1.s14821c1f1");
    check_field_offset(lv, s14821c1f2, 8, "S14821C1.s14821c1f2");
  }
}
static Arrange_To_Call_Me vS14821C1(Test_S14821C1, "S14821C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13637C1  {
  long s13637c1f0;
  char s13637c1f1;
  short s13637c1f2;
  long s13637c1f3;
};
//SIG(1 S13637C1) C1{ Fl Fc Fs Fl}



static void Test_S13637C1()
{
  {
    init_simple_test("S13637C1");
    S13637C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S13637C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13637C1)");
    check_field_offset(lv, s13637c1f0, 0, "S13637C1.s13637c1f0");
    check_field_offset(lv, s13637c1f1, ABISELECT(8,4), "S13637C1.s13637c1f1");
    check_field_offset(lv, s13637c1f2, ABISELECT(10,6), "S13637C1.s13637c1f2");
    check_field_offset(lv, s13637c1f3, ABISELECT(16,8), "S13637C1.s13637c1f3");
  }
}
static Arrange_To_Call_Me vS13637C1(Test_S13637C1, "S13637C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16599C1  {
  int s16599c1f0;
  char s16599c1f1[5];
  void  mf16599c1(); // _ZN8S16599C19mf16599c1Ev
};
//SIG(1 S16599C1) C1{ m Fi Fc[5]}


void  S16599C1 ::mf16599c1(){}

static void Test_S16599C1()
{
  {
    init_simple_test("S16599C1");
    S16599C1 lv;
    check2(sizeof(lv), 12, "sizeof(S16599C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16599C1)");
    check_field_offset(lv, s16599c1f0, 0, "S16599C1.s16599c1f0");
    check_field_offset(lv, s16599c1f1, 4, "S16599C1.s16599c1f1");
  }
}
static Arrange_To_Call_Me vS16599C1(Test_S16599C1, "S16599C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15225C1  {
  char s15225c1f0[257];
  void  mf15225c1(); // _ZN8S15225C19mf15225c1Ev
};
//SIG(1 S15225C1) C1{ m Fc[257]}


void  S15225C1 ::mf15225c1(){}

static void Test_S15225C1()
{
  {
    init_simple_test("S15225C1");
    S15225C1 lv;
    check2(sizeof(lv), 257, "sizeof(S15225C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15225C1)");
    check_field_offset(lv, s15225c1f0, 0, "S15225C1.s15225c1f0");
  }
}
static Arrange_To_Call_Me vS15225C1(Test_S15225C1, "S15225C1", 257);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10947C1  {
  char s10947c1f0[5];
  int s10947c1f1;
};
//SIG(1 S10947C1) C1{ Fc[5] Fi}



static void Test_S10947C1()
{
  {
    init_simple_test("S10947C1");
    S10947C1 lv;
    check2(sizeof(lv), 12, "sizeof(S10947C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10947C1)");
    check_field_offset(lv, s10947c1f0, 0, "S10947C1.s10947c1f0");
    check_field_offset(lv, s10947c1f1, 8, "S10947C1.s10947c1f1");
  }
}
static Arrange_To_Call_Me vS10947C1(Test_S10947C1, "S10947C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10721C1  {
  char s10721c1f0[208];
};
//SIG(1 S10721C1) C1{ Fc[208]}



static void Test_S10721C1()
{
  {
    init_simple_test("S10721C1");
    S10721C1 lv;
    check2(sizeof(lv), 208, "sizeof(S10721C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10721C1)");
    check_field_offset(lv, s10721c1f0, 0, "S10721C1.s10721c1f0");
  }
}
static Arrange_To_Call_Me vS10721C1(Test_S10721C1, "S10721C1", 208);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14829C1  {
  short s14829c1f0;
  long s14829c1f1;
};
//SIG(1 S14829C1) C1{ Fs Fl}



static void Test_S14829C1()
{
  {
    init_simple_test("S14829C1");
    S14829C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S14829C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14829C1)");
    check_field_offset(lv, s14829c1f0, 0, "S14829C1.s14829c1f0");
    check_field_offset(lv, s14829c1f1, ABISELECT(8,4), "S14829C1.s14829c1f1");
  }
}
static Arrange_To_Call_Me vS14829C1(Test_S14829C1, "S14829C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

